Skip to content

Commit b956864

Browse files
author
epriestley
committedFeb 27, 2017
Add an owners package generator for Lipsum
Summary: Ref T12319. Allow `bin/lipsum generate` to generate owners packages. Test Plan: Generated ~4,000 packages with ~150,000 paths. Reviewers: chad Reviewed By: chad Maniphest Tasks: T12319 Differential Revision: https://secure.phabricator.com/D17423
1 parent 5cb4c76 commit b956864

4 files changed

+203
-0
lines changed
 

‎src/__phutil_library_map__.php

+6
Original file line numberDiff line numberDiff line change
@@ -3163,6 +3163,7 @@
31633163
'PhabricatorOwnersPackage' => 'applications/owners/storage/PhabricatorOwnersPackage.php',
31643164
'PhabricatorOwnersPackageAuditingTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackageAuditingTransaction.php',
31653165
'PhabricatorOwnersPackageAutoreviewTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackageAutoreviewTransaction.php',
3166+
'PhabricatorOwnersPackageContextFreeGrammar' => 'applications/owners/lipsum/PhabricatorOwnersPackageContextFreeGrammar.php',
31663167
'PhabricatorOwnersPackageDatasource' => 'applications/owners/typeahead/PhabricatorOwnersPackageDatasource.php',
31673168
'PhabricatorOwnersPackageDescriptionTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackageDescriptionTransaction.php',
31683169
'PhabricatorOwnersPackageDominionTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackageDominionTransaction.php',
@@ -3181,11 +3182,13 @@
31813182
'PhabricatorOwnersPackageSearchEngine' => 'applications/owners/query/PhabricatorOwnersPackageSearchEngine.php',
31823183
'PhabricatorOwnersPackageStatusTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackageStatusTransaction.php',
31833184
'PhabricatorOwnersPackageTestCase' => 'applications/owners/storage/__tests__/PhabricatorOwnersPackageTestCase.php',
3185+
'PhabricatorOwnersPackageTestDataGenerator' => 'applications/owners/lipsum/PhabricatorOwnersPackageTestDataGenerator.php',
31843186
'PhabricatorOwnersPackageTransaction' => 'applications/owners/storage/PhabricatorOwnersPackageTransaction.php',
31853187
'PhabricatorOwnersPackageTransactionEditor' => 'applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php',
31863188
'PhabricatorOwnersPackageTransactionQuery' => 'applications/owners/query/PhabricatorOwnersPackageTransactionQuery.php',
31873189
'PhabricatorOwnersPackageTransactionType' => 'applications/owners/xaction/PhabricatorOwnersPackageTransactionType.php',
31883190
'PhabricatorOwnersPath' => 'applications/owners/storage/PhabricatorOwnersPath.php',
3191+
'PhabricatorOwnersPathContextFreeGrammar' => 'applications/owners/lipsum/PhabricatorOwnersPathContextFreeGrammar.php',
31893192
'PhabricatorOwnersPathsController' => 'applications/owners/controller/PhabricatorOwnersPathsController.php',
31903193
'PhabricatorOwnersPathsSearchEngineAttachment' => 'applications/owners/engineextension/PhabricatorOwnersPathsSearchEngineAttachment.php',
31913194
'PhabricatorOwnersSchemaSpec' => 'applications/owners/storage/PhabricatorOwnersSchemaSpec.php',
@@ -8285,6 +8288,7 @@
82858288
),
82868289
'PhabricatorOwnersPackageAuditingTransaction' => 'PhabricatorOwnersPackageTransactionType',
82878290
'PhabricatorOwnersPackageAutoreviewTransaction' => 'PhabricatorOwnersPackageTransactionType',
8291+
'PhabricatorOwnersPackageContextFreeGrammar' => 'PhutilContextFreeGrammar',
82888292
'PhabricatorOwnersPackageDatasource' => 'PhabricatorTypeaheadDatasource',
82898293
'PhabricatorOwnersPackageDescriptionTransaction' => 'PhabricatorOwnersPackageTransactionType',
82908294
'PhabricatorOwnersPackageDominionTransaction' => 'PhabricatorOwnersPackageTransactionType',
@@ -8303,11 +8307,13 @@
83038307
'PhabricatorOwnersPackageSearchEngine' => 'PhabricatorApplicationSearchEngine',
83048308
'PhabricatorOwnersPackageStatusTransaction' => 'PhabricatorOwnersPackageTransactionType',
83058309
'PhabricatorOwnersPackageTestCase' => 'PhabricatorTestCase',
8310+
'PhabricatorOwnersPackageTestDataGenerator' => 'PhabricatorTestDataGenerator',
83068311
'PhabricatorOwnersPackageTransaction' => 'PhabricatorModularTransaction',
83078312
'PhabricatorOwnersPackageTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
83088313
'PhabricatorOwnersPackageTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
83098314
'PhabricatorOwnersPackageTransactionType' => 'PhabricatorModularTransactionType',
83108315
'PhabricatorOwnersPath' => 'PhabricatorOwnersDAO',
8316+
'PhabricatorOwnersPathContextFreeGrammar' => 'PhutilContextFreeGrammar',
83118317
'PhabricatorOwnersPathsController' => 'PhabricatorOwnersController',
83128318
'PhabricatorOwnersPathsSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment',
83138319
'PhabricatorOwnersSchemaSpec' => 'PhabricatorConfigSchemaSpec',
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
<?php
2+
3+
final class PhabricatorOwnersPackageContextFreeGrammar
4+
extends PhutilContextFreeGrammar {
5+
6+
protected function getRules() {
7+
return array(
8+
'start' => array(
9+
'[package]',
10+
),
11+
'package' => array(
12+
'[adjective] [noun]',
13+
'[adjective] [noun]',
14+
'[adjective] [noun]',
15+
'[adjective] [noun]',
16+
'[adjective] [adjective] [noun]',
17+
'[adjective] [noun] [noun]',
18+
'[adjective] [adjective] [noun] [noun]',
19+
),
20+
'adjective' => array(
21+
'Temporary',
22+
'Backend',
23+
'External',
24+
'Emergency',
25+
'Applied',
26+
'Advanced',
27+
'Experimental',
28+
'Logging',
29+
'Test',
30+
'Network',
31+
'Ephemeral',
32+
'Clustered',
33+
'Mining',
34+
'Core',
35+
'Remote',
36+
),
37+
'noun' => array(
38+
'Support',
39+
'Services',
40+
'Infrastructure',
41+
'Mail',
42+
'Security',
43+
'Application',
44+
'Microservices',
45+
'Monoservices',
46+
'Megaservices',
47+
'API',
48+
'Storage',
49+
'Records',
50+
'Package',
51+
'Directories',
52+
'Library',
53+
'Concern',
54+
'Cluster',
55+
'Engine',
56+
),
57+
);
58+
}
59+
60+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
<?php
2+
3+
final class PhabricatorOwnersPackageTestDataGenerator
4+
extends PhabricatorTestDataGenerator {
5+
6+
const GENERATORKEY = 'owners';
7+
8+
public function getGeneratorName() {
9+
return pht('Owners Packages');
10+
}
11+
12+
public function generateObject() {
13+
$author = $this->loadRandomUser();
14+
15+
$name = id(new PhabricatorOwnersPackageContextFreeGrammar())
16+
->generate();
17+
18+
switch ($this->roll(1, 4)) {
19+
case 1:
20+
case 2:
21+
// Most packages own only one path.
22+
$path_count = 1;
23+
break;
24+
case 3:
25+
// Some packages own a few paths.
26+
$path_count = mt_rand(1, 4);
27+
break;
28+
case 4:
29+
// Some packages own a very large number of paths.
30+
$path_count = mt_rand(1, 1024);
31+
break;
32+
}
33+
34+
$xactions = array();
35+
36+
$xactions[] = array(
37+
'type' => 'name',
38+
'value' => $name,
39+
);
40+
41+
$xactions[] = array(
42+
'type' => 'owners',
43+
'value' => array($author->getPHID()),
44+
);
45+
46+
$dominion = PhabricatorOwnersPackage::getDominionOptionsMap();
47+
$dominion = array_rand($dominion);
48+
$xactions[] = array(
49+
'type' => 'dominion',
50+
'value' => $dominion,
51+
);
52+
53+
$paths = id(new PhabricatorOwnersPathContextFreeGrammar())
54+
->generateSeveral($path_count, "\n");
55+
$paths = explode("\n", $paths);
56+
$paths = array_unique($paths);
57+
58+
$repository_phid = $this->loadOneRandom('PhabricatorRepository')
59+
->getPHID();
60+
61+
$paths_value = array();
62+
foreach ($paths as $path) {
63+
$paths_value[] = array(
64+
'repositoryPHID' => $repository_phid,
65+
'path' => $path,
66+
67+
// Excluded paths are relatively rare.
68+
'excluded' => (mt_rand(1, 10) == 1),
69+
);
70+
}
71+
72+
$xactions[] = array(
73+
'type' => 'paths.set',
74+
'value' => $paths_value,
75+
);
76+
77+
$params = array(
78+
'transactions' => $xactions,
79+
);
80+
81+
$result = id(new ConduitCall('owners.edit', $params))
82+
->setUser($author)
83+
->execute();
84+
85+
return $result['object']['phid'];
86+
}
87+
88+
89+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
final class PhabricatorOwnersPathContextFreeGrammar
4+
extends PhutilContextFreeGrammar {
5+
6+
protected function getRules() {
7+
return array(
8+
'start' => array(
9+
'[path]',
10+
),
11+
'path' => array(
12+
'/',
13+
'/[directories]',
14+
),
15+
'directories' => array(
16+
'[directory-name]',
17+
'[directories][directory-name]',
18+
),
19+
'directory-name' => array(
20+
'[directory-part]/',
21+
),
22+
'directory-part' => array(
23+
'src',
24+
'doc',
25+
'bin',
26+
'tmp',
27+
'log',
28+
'bak',
29+
'applications',
30+
'var',
31+
'home',
32+
'user',
33+
'lib',
34+
'tests',
35+
'webroot',
36+
'externals',
37+
'third-party',
38+
'libraries',
39+
'config',
40+
'media',
41+
'resources',
42+
'support',
43+
'scripts',
44+
),
45+
);
46+
}
47+
48+
}

0 commit comments

Comments
 (0)
Failed to load comments.