diff --git a/src/applications/diffusion/herald/DiffusionCommitAuthorHeraldField.php b/src/applications/diffusion/herald/DiffusionCommitAuthorHeraldField.php --- a/src/applications/diffusion/herald/DiffusionCommitAuthorHeraldField.php +++ b/src/applications/diffusion/herald/DiffusionCommitAuthorHeraldField.php @@ -10,7 +10,7 @@ } public function getHeraldFieldValue($object) { - return $object->getCommitData()->getCommitDetail('authorPHID'); + return $this->getAdapter()->getAuthorPHID(); } protected function getHeraldFieldStandardType() { diff --git a/src/applications/diffusion/herald/DiffusionCommitAuthorProjectsHeraldField.php b/src/applications/diffusion/herald/DiffusionCommitAuthorProjectsHeraldField.php --- a/src/applications/diffusion/herald/DiffusionCommitAuthorProjectsHeraldField.php +++ b/src/applications/diffusion/herald/DiffusionCommitAuthorProjectsHeraldField.php @@ -11,14 +11,13 @@ public function getHeraldFieldValue($object) { $adapter = $this->getAdapter(); + $viewer = $adapter->getViewer(); - $phid = $object->getCommitData()->getCommitDetail('authorPHID'); + $phid = $adapter->getAuthorPHID(); if (!$phid) { return array(); } - $viewer = $adapter->getViewer(); - $projects = id(new PhabricatorProjectQuery()) ->setViewer($viewer) ->withMemberPHIDs(array($phid)) diff --git a/src/applications/diffusion/herald/DiffusionCommitCommitterHeraldField.php b/src/applications/diffusion/herald/DiffusionCommitCommitterHeraldField.php --- a/src/applications/diffusion/herald/DiffusionCommitCommitterHeraldField.php +++ b/src/applications/diffusion/herald/DiffusionCommitCommitterHeraldField.php @@ -10,7 +10,7 @@ } public function getHeraldFieldValue($object) { - return $object->getCommitData()->getCommitDetail('committerPHID'); + return $this->getAdapter()->getCommitterPHID(); } protected function getHeraldFieldStandardType() { diff --git a/src/applications/diffusion/herald/DiffusionCommitCommitterProjectsHeraldField.php b/src/applications/diffusion/herald/DiffusionCommitCommitterProjectsHeraldField.php --- a/src/applications/diffusion/herald/DiffusionCommitCommitterProjectsHeraldField.php +++ b/src/applications/diffusion/herald/DiffusionCommitCommitterProjectsHeraldField.php @@ -11,8 +11,9 @@ public function getHeraldFieldValue($object) { $adapter = $this->getAdapter(); + $viewer = $adapter->getViewer(); - $phid = $object->getCommitData()->getCommitDetail('committerPHID'); + $phid = $adapter->getCommitterPHID(); if (!$phid) { return array(); } diff --git a/src/applications/diffusion/herald/HeraldCommitAdapter.php b/src/applications/diffusion/herald/HeraldCommitAdapter.php --- a/src/applications/diffusion/herald/HeraldCommitAdapter.php +++ b/src/applications/diffusion/herald/HeraldCommitAdapter.php @@ -35,18 +35,6 @@ } public function newTestAdapter(PhabricatorUser $viewer, $object) { - $object = id(new DiffusionCommitQuery()) - ->setViewer($viewer) - ->withPHIDs(array($object->getPHID())) - ->needCommitData(true) - ->executeOne(); - if (!$object) { - throw new Exception( - pht( - 'Failed to reload commit ("%s") to fetch commit data.', - $object->getPHID())); - } - return id(clone $this) ->setObject($object); } @@ -56,7 +44,23 @@ } public function setObject($object) { - $this->commit = $object; + $viewer = $this->getViewer(); + $commit_phid = $object->getPHID(); + + $commit = id(new DiffusionCommitQuery()) + ->setViewer($viewer) + ->withPHIDs(array($commit_phid)) + ->needCommitData(true) + ->needIdentities(true) + ->executeOne(); + if (!$commit) { + throw new Exception( + pht( + 'Failed to reload commit ("%s") to fetch commit data.', + $commit_phid)); + } + + $this->commit = $commit; return $this; } @@ -352,6 +356,22 @@ return $this->getObject()->getRepository(); } + public function getAuthorPHID() { + return $this->getObject()->getEffectiveAuthorPHID(); + } + + public function getCommitterPHID() { + $commit = $this->getObject(); + + if ($commit->hasCommitterIdentity()) { + $identity = $commit->getCommitterIdentity(); + return $identity->getCurrentEffectiveUserPHID(); + } + + return null; + } + + /* -( HarbormasterBuildableAdapterInterface )------------------------------ */