Page MenuHomePhabricator

D7802.diff

diff --git a/src/applications/diffusion/herald/HeraldPreCommitContentAdapter.php b/src/applications/diffusion/herald/HeraldPreCommitContentAdapter.php
--- a/src/applications/diffusion/herald/HeraldPreCommitContentAdapter.php
+++ b/src/applications/diffusion/herald/HeraldPreCommitContentAdapter.php
@@ -38,6 +38,8 @@
return array_merge(
array(
self::FIELD_BODY,
+ self::FIELD_AUTHOR,
+ self::FIELD_COMMITTER,
self::FIELD_DIFF_FILE,
self::FIELD_DIFF_CONTENT,
self::FIELD_DIFF_ADDED_CONTENT,
@@ -87,6 +89,10 @@
switch ($field) {
case self::FIELD_BODY:
return $this->getCommitRef()->getMessage();
+ case self::FIELD_AUTHOR:
+ return $this->getAuthorPHID();
+ case self::FIELD_COMMITTER:
+ return $this->getCommitterPHID();
case self::FIELD_DIFF_FILE:
return $this->getDiffContent('name');
case self::FIELD_DIFF_CONTENT:
@@ -190,4 +196,52 @@
return $this->commitRef;
}
+ private function getAuthorPHID() {
+ $repository = $this->hookEngine->getRepository();
+ $vcs = $repository->getVersionControlSystem();
+ switch ($vcs) {
+ case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
+ case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL:
+ $ref = $this->getCommitRef();
+ $author = $ref->getAuthor();
+ if (!strlen($author)) {
+ return null;
+ }
+ return $this->lookupUser($author);
+ case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
+ // In Subversion, the pusher is always the author.
+ return $this->hookEngine->getViewer()->getPHID();
+ }
+ }
+
+ private function getCommitterPHID() {
+ $repository = $this->hookEngine->getRepository();
+ $vcs = $repository->getVersionControlSystem();
+ switch ($vcs) {
+ case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
+ case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL:
+ // Here, if there's no committer, we're going to return the author
+ // instead.
+ $ref = $this->getCommitRef();
+ $committer = $ref->getCommitter();
+ if (!strlen($committer)) {
+ return $this->getAuthorPHID();
+ }
+ $phid = $this->lookupUser($committer);
+ if (!$phid) {
+ return $this->getAuthorPHID();
+ }
+ return $phid;
+ case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
+ // In Subversion, the pusher is always the committer.
+ return $this->hookEngine->getViewer()->getPHID();
+ }
+ }
+
+ private function lookupUser($author) {
+ return id(new DiffusionResolveUserQuery())
+ ->withName($author)
+ ->execute();
+ }
+
}

File Metadata

Mime Type
text/x-diff
Storage Engine
amazon-s3
Storage Format
Raw Data
Storage Handle
phabricator/6i/n2/4vle4qi5xl4rxcp4
Default Alt Text
D7802.diff (2 KB)

Event Timeline