Commit 6628cd2b authored by epriestley's avatar epriestley
Browse files

In Herald "Commit" rules, use repository identities to identify authors and committers

Summary: Ref T13480. The Herald "Commit" rules still use raw commit data properties to identify authors and committers. Instead, use repository identities.

Test Plan: Wrote a Herald rule using all four fields, ran it against various commits with and without known authors. Checked transcript for sensible field values.

Maniphest Tasks: T13480

Differential Revision: https://secure.phabricator.com/D20955
parent 41f143f7
......@@ -10,7 +10,7 @@ final class DiffusionCommitAuthorHeraldField
}
public function getHeraldFieldValue($object) {
return $object->getCommitData()->getCommitDetail('authorPHID');
return $this->getAdapter()->getAuthorPHID();
}
protected function getHeraldFieldStandardType() {
......
......@@ -11,14 +11,13 @@ final class DiffusionCommitAuthorProjectsHeraldField
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))
......
......@@ -10,7 +10,7 @@ final class DiffusionCommitCommitterHeraldField
}
public function getHeraldFieldValue($object) {
return $object->getCommitData()->getCommitDetail('committerPHID');
return $this->getAdapter()->getCommitterPHID();
}
protected function getHeraldFieldStandardType() {
......
......@@ -11,8 +11,9 @@ final class DiffusionCommitCommitterProjectsHeraldField
public function getHeraldFieldValue($object) {
$adapter = $this->getAdapter();
$viewer = $adapter->getViewer();
$phid = $object->getCommitData()->getCommitDetail('committerPHID');
$phid = $adapter->getCommitterPHID();
if (!$phid) {
return array();
}
......
......@@ -35,18 +35,6 @@ final class HeraldCommitAdapter
}
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 @@ final class HeraldCommitAdapter
}
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 @@ final class HeraldCommitAdapter
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 )------------------------------ */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment