From a27c824da67de2c802ab628f2872b7002026c768 Mon Sep 17 00:00:00 2001 From: epriestley Date: Wed, 11 Jan 2017 10:09:15 -0800 Subject: [PATCH] Draw project PHIDs from repositories when evaluating Herald object rules for commits Summary: Fixes T12097. In D16413, I simplified this code but caused us to load the //commit's// projects instead of the //repository's// projects, which is incorrect. Normally, commits don't have any project tags when Herald evaluates, so using the commit's projects is generally meaningless. Test Plan: - Tagged a repository with `#X`. - Created a Herald object rule for commits with `#X` as the object ("Always ... do nothing.") - Ran a commit from the repository. - Before patch: rule failed to evaluate. - After patch: rule evaluated and passed. Reviewers: chad Reviewed By: chad Maniphest Tasks: T12097 Differential Revision: https://secure.phabricator.com/D17179 --- .../diffusion/herald/HeraldCommitAdapter.php | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/applications/diffusion/herald/HeraldCommitAdapter.php b/src/applications/diffusion/herald/HeraldCommitAdapter.php index 7b4d26b77c..9d63b9db3d 100644 --- a/src/applications/diffusion/herald/HeraldCommitAdapter.php +++ b/src/applications/diffusion/herald/HeraldCommitAdapter.php @@ -104,12 +104,26 @@ final class HeraldCommitAdapter public function getTriggerObjectPHIDs() { $project_type = PhabricatorProjectObjectHasProjectEdgeType::EDGECONST; - return array_merge( - array( - $this->getRepository()->getPHID(), - $this->getPHID(), - ), - $this->loadEdgePHIDs($project_type)); + $repository_phid = $this->getRepository()->getPHID(); + $commit_phid = $this->getObject()->getPHID(); + + $phids = array(); + $phids[] = $commit_phid; + $phids[] = $repository_phid; + + // NOTE: This is projects for the repository, not for the commit. When + // Herald evalutes, commits normally can not have any project tags yet. + $repository_project_phids = PhabricatorEdgeQuery::loadDestinationPHIDs( + $repository_phid, + $project_type); + foreach ($repository_project_phids as $phid) { + $phids[] = $phid; + } + + $phids = array_unique($phids); + $phids = array_values($phids); + + return $phids; } public function explainValidTriggerObjects() {