Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15331837
D17264.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
12 KB
Referenced Files
None
Subscribers
None
D17264.diff
View Options
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -635,6 +635,7 @@
'DiffusionCommitEditController' => 'applications/diffusion/controller/DiffusionCommitEditController.php',
'DiffusionCommitEditEngine' => 'applications/diffusion/editor/DiffusionCommitEditEngine.php',
'DiffusionCommitFulltextEngine' => 'applications/repository/search/DiffusionCommitFulltextEngine.php',
+ 'DiffusionCommitHasPackageEdgeType' => 'applications/diffusion/edge/DiffusionCommitHasPackageEdgeType.php',
'DiffusionCommitHasRevisionEdgeType' => 'applications/diffusion/edge/DiffusionCommitHasRevisionEdgeType.php',
'DiffusionCommitHasRevisionRelationship' => 'applications/diffusion/relationships/DiffusionCommitHasRevisionRelationship.php',
'DiffusionCommitHasTaskEdgeType' => 'applications/diffusion/edge/DiffusionCommitHasTaskEdgeType.php',
@@ -1891,6 +1892,7 @@
'PhabricatorAuditTransactionComment' => 'applications/audit/storage/PhabricatorAuditTransactionComment.php',
'PhabricatorAuditTransactionQuery' => 'applications/audit/query/PhabricatorAuditTransactionQuery.php',
'PhabricatorAuditTransactionView' => 'applications/audit/view/PhabricatorAuditTransactionView.php',
+ 'PhabricatorAuditUpdateOwnersManagementWorkflow' => 'applications/audit/management/PhabricatorAuditUpdateOwnersManagementWorkflow.php',
'PhabricatorAuthAccountView' => 'applications/auth/view/PhabricatorAuthAccountView.php',
'PhabricatorAuthApplication' => 'applications/auth/application/PhabricatorAuthApplication.php',
'PhabricatorAuthAuthFactorPHIDType' => 'applications/auth/phid/PhabricatorAuthAuthFactorPHIDType.php',
@@ -5343,6 +5345,7 @@
'DiffusionCommitEditController' => 'DiffusionController',
'DiffusionCommitEditEngine' => 'PhabricatorEditEngine',
'DiffusionCommitFulltextEngine' => 'PhabricatorFulltextEngine',
+ 'DiffusionCommitHasPackageEdgeType' => 'PhabricatorEdgeType',
'DiffusionCommitHasRevisionEdgeType' => 'PhabricatorEdgeType',
'DiffusionCommitHasRevisionRelationship' => 'DiffusionCommitRelationship',
'DiffusionCommitHasTaskEdgeType' => 'PhabricatorEdgeType',
@@ -6786,6 +6789,7 @@
'PhabricatorAuditTransactionComment' => 'PhabricatorApplicationTransactionComment',
'PhabricatorAuditTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorAuditTransactionView' => 'PhabricatorApplicationTransactionView',
+ 'PhabricatorAuditUpdateOwnersManagementWorkflow' => 'PhabricatorAuditManagementWorkflow',
'PhabricatorAuthAccountView' => 'AphrontView',
'PhabricatorAuthApplication' => 'PhabricatorApplication',
'PhabricatorAuthAuthFactorPHIDType' => 'PhabricatorPHIDType',
diff --git a/src/applications/audit/management/PhabricatorAuditUpdateOwnersManagementWorkflow.php b/src/applications/audit/management/PhabricatorAuditUpdateOwnersManagementWorkflow.php
new file mode 100644
--- /dev/null
+++ b/src/applications/audit/management/PhabricatorAuditUpdateOwnersManagementWorkflow.php
@@ -0,0 +1,117 @@
+<?php
+
+final class PhabricatorAuditUpdateOwnersManagementWorkflow
+ extends PhabricatorAuditManagementWorkflow {
+
+ protected function didConstruct() {
+ $this
+ ->setName('update-owners')
+ ->setExamples('**update-owners** ...')
+ ->setSynopsis(pht('Update package relationships for commits.'))
+ ->setArguments(
+ array(
+ array(
+ 'name' => 'all',
+ 'help' => pht('Update all commits in all repositories.'),
+ ),
+ array(
+ 'name' => 'objects',
+ 'wildcard' => true,
+ 'help' => pht('Update named commits and repositories.'),
+ ),
+ ));
+ }
+
+ public function execute(PhutilArgumentParser $args) {
+ $viewer = $this->getViewer();
+
+ $all = $args->getArg('all');
+ $names = $args->getArg('objects');
+
+ if (!$names && !$all) {
+ throw new PhutilArgumentUsageException(
+ pht(
+ 'Specify "--all" to update everything, or a list of specific '.
+ 'commits or repositories to update.'));
+ } else if ($names && $all) {
+ throw new PhutilArgumentUsageException(
+ pht(
+ 'Specify either a list of objects to update or "--all", but not '.
+ 'both.'));
+ }
+
+ if ($all) {
+ $objects = new LiskMigrationIterator(new PhabricatorRepository());
+ } else {
+ $query = id(new PhabricatorObjectQuery())
+ ->setViewer($viewer)
+ ->withNames($names);
+
+ $query->execute();
+
+ $objects = array();
+
+ $results = $query->getNamedResults();
+ foreach ($names as $name) {
+ if (!isset($results[$name])) {
+ throw new PhutilArgumentUsageException(
+ pht(
+ 'Object "%s" is not a valid object.',
+ $name));
+ }
+
+ $object = $results[$name];
+ if (!($object instanceof PhabricatorRepository) &&
+ !($object instanceof PhabricatorRepositoryCommit)) {
+ throw new PhutilArgumentUsageException(
+ pht(
+ 'Object "%s" is not a valid repository or commit.',
+ $name));
+ }
+
+ $objects[] = $object;
+ }
+ }
+
+ foreach ($objects as $object) {
+ if ($object instanceof PhabricatorRepository) {
+ $commits = id(new DiffusionCommitQuery())
+ ->setViewer($viewer)
+ ->withRepository($object)
+ ->execute();
+ } else {
+ $commits = array($object);
+ }
+
+ foreach ($commits as $commit) {
+ $repository = $commit->getRepository();
+
+ $affected_paths = PhabricatorOwnerPathQuery::loadAffectedPaths(
+ $repository,
+ $commit,
+ $viewer);
+
+ $affected_packages = PhabricatorOwnersPackage::loadAffectedPackages(
+ $repository,
+ $affected_paths);
+
+ $monograms = mpull($affected_packages, 'getMonogram');
+ if ($monograms) {
+ $monograms = implode(', ', $monograms);
+ } else {
+ $monograms = pht('none');
+ }
+
+ echo tsprintf(
+ "%s\n",
+ pht(
+ 'Updating "%s" (%s)...',
+ $commit->getDisplayName(),
+ $monograms));
+
+ $commit->writeOwnersEdges(mpull($affected_packages, 'getPHID'));
+ }
+ }
+ }
+
+}
diff --git a/src/applications/audit/query/PhabricatorCommitSearchEngine.php b/src/applications/audit/query/PhabricatorCommitSearchEngine.php
--- a/src/applications/audit/query/PhabricatorCommitSearchEngine.php
+++ b/src/applications/audit/query/PhabricatorCommitSearchEngine.php
@@ -45,6 +45,10 @@
$query->withRepositoryPHIDs($map['repositoryPHIDs']);
}
+ if ($map['packagePHIDs']) {
+ $query->withPackagePHIDs($map['packagePHIDs']);
+ }
+
return $query;
}
@@ -78,6 +82,12 @@
->setConduitKey('repositories')
->setAliases(array('repository', 'repositories', 'repositoryPHID'))
->setDatasource(new DiffusionRepositoryDatasource()),
+ id(new PhabricatorSearchDatasourceField())
+ ->setLabel(pht('Packages'))
+ ->setKey('packagePHIDs')
+ ->setConduitKey('packages')
+ ->setAliases(array('package', 'packages', 'packagePHID'))
+ ->setDatasource(new PhabricatorOwnersPackageDatasource()),
);
}
diff --git a/src/applications/diffusion/edge/DiffusionCommitHasPackageEdgeType.php b/src/applications/diffusion/edge/DiffusionCommitHasPackageEdgeType.php
new file mode 100644
--- /dev/null
+++ b/src/applications/diffusion/edge/DiffusionCommitHasPackageEdgeType.php
@@ -0,0 +1,8 @@
+<?php
+
+final class DiffusionCommitHasPackageEdgeType
+ extends PhabricatorEdgeType {
+
+ const EDGECONST = 65;
+
+}
diff --git a/src/applications/diffusion/query/DiffusionCommitQuery.php b/src/applications/diffusion/query/DiffusionCommitQuery.php
--- a/src/applications/diffusion/query/DiffusionCommitQuery.php
+++ b/src/applications/diffusion/query/DiffusionCommitQuery.php
@@ -13,6 +13,7 @@
private $identifierMap;
private $responsiblePHIDs;
private $statuses;
+ private $packagePHIDs;
private $needAuditRequests;
private $auditIDs;
@@ -124,6 +125,11 @@
return $this;
}
+ public function withPackagePHIDs(array $package_phids) {
+ $this->packagePHIDs = $package_phids;
+ return $this;
+ }
+
public function withStatuses(array $statuses) {
$this->statuses = $statuses;
return $this;
@@ -498,6 +504,13 @@
$this->statuses);
}
+ if ($this->packagePHIDs !== null) {
+ $where[] = qsprintf(
+ $conn,
+ 'package.dst IN (%Ls)',
+ $this->packagePHIDs);
+ }
+
return $where;
}
@@ -519,6 +532,10 @@
return (bool)$this->responsiblePHIDs;
}
+ private function shouldJoinOwners() {
+ return (bool)$this->packagePHIDs;
+ }
+
protected function buildJoinClauseParts(AphrontDatabaseConnection $conn) {
$join = parent::buildJoinClauseParts($conn);
$audit_request = new PhabricatorRepositoryAuditRequest();
@@ -537,6 +554,15 @@
$audit_request->getTableName());
}
+ if ($this->shouldJoinOwners()) {
+ $join[] = qsprintf(
+ $conn,
+ 'JOIN %T package ON commit.phid = package.src
+ AND package.type = %s',
+ PhabricatorEdgeConfig::TABLE_NAME_EDGE,
+ DiffusionCommitHasPackageEdgeType::EDGECONST);
+ }
+
return $join;
}
@@ -549,6 +575,10 @@
return true;
}
+ if ($this->shouldJoinOwners()) {
+ return true;
+ }
+
return parent::shouldGroupQueryResultRows();
}
diff --git a/src/applications/owners/controller/PhabricatorOwnersDetailController.php b/src/applications/owners/controller/PhabricatorOwnersDetailController.php
--- a/src/applications/owners/controller/PhabricatorOwnersDetailController.php
+++ b/src/applications/owners/controller/PhabricatorOwnersDetailController.php
@@ -68,14 +68,14 @@
$commit_uri = id(new PhutilURI('/diffusion/commit/'))
->setQueryParams(
array(
- 'auditorPHIDs' => $package->getPHID(),
+ 'package' => $package->getPHID(),
));
$status_concern = PhabricatorAuditCommitStatusConstants::CONCERN_RAISED;
$attention_commits = id(new DiffusionCommitQuery())
->setViewer($request->getUser())
- ->withAuditorPHIDs(array($package->getPHID()))
+ ->withPackagePHIDs(array($package->getPHID()))
->withStatuses(
array(
$status_concern,
@@ -102,7 +102,7 @@
$all_commits = id(new DiffusionCommitQuery())
->setViewer($request->getUser())
- ->withAuditorPHIDs(array($package->getPHID()))
+ ->withPackagePHIDs(array($package->getPHID()))
->needCommitData(true)
->needAuditRequests(true)
->setLimit(25)
diff --git a/src/applications/repository/storage/PhabricatorRepositoryCommit.php b/src/applications/repository/storage/PhabricatorRepositoryCommit.php
--- a/src/applications/repository/storage/PhabricatorRepositoryCommit.php
+++ b/src/applications/repository/storage/PhabricatorRepositoryCommit.php
@@ -262,6 +262,29 @@
return isset($map[$audit->getAuditorPHID()]);
}
+ public function writeOwnersEdges(array $package_phids) {
+ $src_phid = $this->getPHID();
+ $edge_type = DiffusionCommitHasPackageEdgeType::EDGECONST;
+
+ $editor = new PhabricatorEdgeEditor();
+
+ $dst_phids = PhabricatorEdgeQuery::loadDestinationPHIDs(
+ $src_phid,
+ $edge_type);
+
+ foreach ($dst_phids as $dst_phid) {
+ $editor->removeEdge($src_phid, $edge_type, $dst_phid);
+ }
+
+ foreach ($package_phids as $package_phid) {
+ $editor->addEdge($src_phid, $edge_type, $package_phid);
+ }
+
+ $editor->save();
+
+ return $this;
+ }
+
public function getAuditorPHIDsForEdit() {
$audits = $this->getAudits();
return mpull($audits, 'getAuditorPHID');
diff --git a/src/applications/repository/worker/PhabricatorRepositoryCommitOwnersWorker.php b/src/applications/repository/worker/PhabricatorRepositoryCommitOwnersWorker.php
--- a/src/applications/repository/worker/PhabricatorRepositoryCommitOwnersWorker.php
+++ b/src/applications/repository/worker/PhabricatorRepositoryCommitOwnersWorker.php
@@ -42,6 +42,8 @@
$repository,
$affected_paths);
+ $commit->writeOwnersEdges(mpull($affected_packages, 'getPHID'));
+
if (!$affected_packages) {
return;
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Mar 8, 2:18 PM (3 d, 16 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7382716
Default Alt Text
D17264.diff (12 KB)
Attached To
Mode
D17264: Write an explicit edge for commit membership in packages
Attached
Detach File
Event Timeline
Log In to Comment