1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2025-03-28 04:00:17 +01:00

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
This commit is contained in:
epriestley 2017-02-27 07:27:29 -08:00
parent 5cb4c76bef
commit b9568646ac
4 changed files with 203 additions and 0 deletions

View file

@ -3163,6 +3163,7 @@ phutil_register_library_map(array(
'PhabricatorOwnersPackage' => 'applications/owners/storage/PhabricatorOwnersPackage.php',
'PhabricatorOwnersPackageAuditingTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackageAuditingTransaction.php',
'PhabricatorOwnersPackageAutoreviewTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackageAutoreviewTransaction.php',
'PhabricatorOwnersPackageContextFreeGrammar' => 'applications/owners/lipsum/PhabricatorOwnersPackageContextFreeGrammar.php',
'PhabricatorOwnersPackageDatasource' => 'applications/owners/typeahead/PhabricatorOwnersPackageDatasource.php',
'PhabricatorOwnersPackageDescriptionTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackageDescriptionTransaction.php',
'PhabricatorOwnersPackageDominionTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackageDominionTransaction.php',
@ -3181,11 +3182,13 @@ phutil_register_library_map(array(
'PhabricatorOwnersPackageSearchEngine' => 'applications/owners/query/PhabricatorOwnersPackageSearchEngine.php',
'PhabricatorOwnersPackageStatusTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackageStatusTransaction.php',
'PhabricatorOwnersPackageTestCase' => 'applications/owners/storage/__tests__/PhabricatorOwnersPackageTestCase.php',
'PhabricatorOwnersPackageTestDataGenerator' => 'applications/owners/lipsum/PhabricatorOwnersPackageTestDataGenerator.php',
'PhabricatorOwnersPackageTransaction' => 'applications/owners/storage/PhabricatorOwnersPackageTransaction.php',
'PhabricatorOwnersPackageTransactionEditor' => 'applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php',
'PhabricatorOwnersPackageTransactionQuery' => 'applications/owners/query/PhabricatorOwnersPackageTransactionQuery.php',
'PhabricatorOwnersPackageTransactionType' => 'applications/owners/xaction/PhabricatorOwnersPackageTransactionType.php',
'PhabricatorOwnersPath' => 'applications/owners/storage/PhabricatorOwnersPath.php',
'PhabricatorOwnersPathContextFreeGrammar' => 'applications/owners/lipsum/PhabricatorOwnersPathContextFreeGrammar.php',
'PhabricatorOwnersPathsController' => 'applications/owners/controller/PhabricatorOwnersPathsController.php',
'PhabricatorOwnersPathsSearchEngineAttachment' => 'applications/owners/engineextension/PhabricatorOwnersPathsSearchEngineAttachment.php',
'PhabricatorOwnersSchemaSpec' => 'applications/owners/storage/PhabricatorOwnersSchemaSpec.php',
@ -8285,6 +8288,7 @@ phutil_register_library_map(array(
),
'PhabricatorOwnersPackageAuditingTransaction' => 'PhabricatorOwnersPackageTransactionType',
'PhabricatorOwnersPackageAutoreviewTransaction' => 'PhabricatorOwnersPackageTransactionType',
'PhabricatorOwnersPackageContextFreeGrammar' => 'PhutilContextFreeGrammar',
'PhabricatorOwnersPackageDatasource' => 'PhabricatorTypeaheadDatasource',
'PhabricatorOwnersPackageDescriptionTransaction' => 'PhabricatorOwnersPackageTransactionType',
'PhabricatorOwnersPackageDominionTransaction' => 'PhabricatorOwnersPackageTransactionType',
@ -8303,11 +8307,13 @@ phutil_register_library_map(array(
'PhabricatorOwnersPackageSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorOwnersPackageStatusTransaction' => 'PhabricatorOwnersPackageTransactionType',
'PhabricatorOwnersPackageTestCase' => 'PhabricatorTestCase',
'PhabricatorOwnersPackageTestDataGenerator' => 'PhabricatorTestDataGenerator',
'PhabricatorOwnersPackageTransaction' => 'PhabricatorModularTransaction',
'PhabricatorOwnersPackageTransactionEditor' => 'PhabricatorApplicationTransactionEditor',
'PhabricatorOwnersPackageTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorOwnersPackageTransactionType' => 'PhabricatorModularTransactionType',
'PhabricatorOwnersPath' => 'PhabricatorOwnersDAO',
'PhabricatorOwnersPathContextFreeGrammar' => 'PhutilContextFreeGrammar',
'PhabricatorOwnersPathsController' => 'PhabricatorOwnersController',
'PhabricatorOwnersPathsSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment',
'PhabricatorOwnersSchemaSpec' => 'PhabricatorConfigSchemaSpec',

View file

@ -0,0 +1,60 @@
<?php
final class PhabricatorOwnersPackageContextFreeGrammar
extends PhutilContextFreeGrammar {
protected function getRules() {
return array(
'start' => array(
'[package]',
),
'package' => array(
'[adjective] [noun]',
'[adjective] [noun]',
'[adjective] [noun]',
'[adjective] [noun]',
'[adjective] [adjective] [noun]',
'[adjective] [noun] [noun]',
'[adjective] [adjective] [noun] [noun]',
),
'adjective' => array(
'Temporary',
'Backend',
'External',
'Emergency',
'Applied',
'Advanced',
'Experimental',
'Logging',
'Test',
'Network',
'Ephemeral',
'Clustered',
'Mining',
'Core',
'Remote',
),
'noun' => array(
'Support',
'Services',
'Infrastructure',
'Mail',
'Security',
'Application',
'Microservices',
'Monoservices',
'Megaservices',
'API',
'Storage',
'Records',
'Package',
'Directories',
'Library',
'Concern',
'Cluster',
'Engine',
),
);
}
}

View file

@ -0,0 +1,89 @@
<?php
final class PhabricatorOwnersPackageTestDataGenerator
extends PhabricatorTestDataGenerator {
const GENERATORKEY = 'owners';
public function getGeneratorName() {
return pht('Owners Packages');
}
public function generateObject() {
$author = $this->loadRandomUser();
$name = id(new PhabricatorOwnersPackageContextFreeGrammar())
->generate();
switch ($this->roll(1, 4)) {
case 1:
case 2:
// Most packages own only one path.
$path_count = 1;
break;
case 3:
// Some packages own a few paths.
$path_count = mt_rand(1, 4);
break;
case 4:
// Some packages own a very large number of paths.
$path_count = mt_rand(1, 1024);
break;
}
$xactions = array();
$xactions[] = array(
'type' => 'name',
'value' => $name,
);
$xactions[] = array(
'type' => 'owners',
'value' => array($author->getPHID()),
);
$dominion = PhabricatorOwnersPackage::getDominionOptionsMap();
$dominion = array_rand($dominion);
$xactions[] = array(
'type' => 'dominion',
'value' => $dominion,
);
$paths = id(new PhabricatorOwnersPathContextFreeGrammar())
->generateSeveral($path_count, "\n");
$paths = explode("\n", $paths);
$paths = array_unique($paths);
$repository_phid = $this->loadOneRandom('PhabricatorRepository')
->getPHID();
$paths_value = array();
foreach ($paths as $path) {
$paths_value[] = array(
'repositoryPHID' => $repository_phid,
'path' => $path,
// Excluded paths are relatively rare.
'excluded' => (mt_rand(1, 10) == 1),
);
}
$xactions[] = array(
'type' => 'paths.set',
'value' => $paths_value,
);
$params = array(
'transactions' => $xactions,
);
$result = id(new ConduitCall('owners.edit', $params))
->setUser($author)
->execute();
return $result['object']['phid'];
}
}

View file

@ -0,0 +1,48 @@
<?php
final class PhabricatorOwnersPathContextFreeGrammar
extends PhutilContextFreeGrammar {
protected function getRules() {
return array(
'start' => array(
'[path]',
),
'path' => array(
'/',
'/[directories]',
),
'directories' => array(
'[directory-name]',
'[directories][directory-name]',
),
'directory-name' => array(
'[directory-part]/',
),
'directory-part' => array(
'src',
'doc',
'bin',
'tmp',
'log',
'bak',
'applications',
'var',
'home',
'user',
'lib',
'tests',
'webroot',
'externals',
'third-party',
'libraries',
'config',
'media',
'resources',
'support',
'scripts',
),
);
}
}