Page MenuHomePhabricator

D19614.diff
No OneTemporary

D19614.diff

diff --git a/src/applications/differential/harbormaster/DifferentialBuildableEngine.php b/src/applications/differential/harbormaster/DifferentialBuildableEngine.php
--- a/src/applications/differential/harbormaster/DifferentialBuildableEngine.php
+++ b/src/applications/differential/harbormaster/DifferentialBuildableEngine.php
@@ -54,4 +54,28 @@
$this->applyTransactions(array($xaction));
}
+ public function getAuthorIdentity() {
+ $object = $this->getObject();
+
+ if ($object instanceof DifferentialRevision) {
+ $object = $object->loadActiveDiff();
+ }
+
+ $authorship = $object->getDiffAuthorshipDict();
+ if (!isset($authorship['authorName'])) {
+ return null;
+ }
+
+ $name = $authorship['authorName'];
+ $address = idx($authorship, 'authorEmail');
+
+ $full = id(new PhutilEmailAddress())
+ ->setDisplayName($name)
+ ->setAddress($address);
+
+ return id(new PhabricatorRepositoryIdentity())
+ ->setIdentityName((string)$full)
+ ->makeEphemeral();
+ }
+
}
diff --git a/src/applications/diffusion/harbormaster/DiffusionBuildableEngine.php b/src/applications/diffusion/harbormaster/DiffusionBuildableEngine.php
--- a/src/applications/diffusion/harbormaster/DiffusionBuildableEngine.php
+++ b/src/applications/diffusion/harbormaster/DiffusionBuildableEngine.php
@@ -34,4 +34,10 @@
$this->applyTransactions(array($xaction));
}
+ public function getAuthorIdentity() {
+ return $this->getObject()
+ ->loadIdentities($this->getViewer())
+ ->getAuthorIdentity();
+ }
+
}
diff --git a/src/applications/harbormaster/engine/HarbormasterBuildableEngine.php b/src/applications/harbormaster/engine/HarbormasterBuildableEngine.php
--- a/src/applications/harbormaster/engine/HarbormasterBuildableEngine.php
+++ b/src/applications/harbormaster/engine/HarbormasterBuildableEngine.php
@@ -101,5 +101,8 @@
$xactions);
}
+ public function getAuthorIdentity() {
+ return null;
+ }
}
diff --git a/src/applications/harbormaster/step/HarbormasterBuildkiteBuildStepImplementation.php b/src/applications/harbormaster/step/HarbormasterBuildkiteBuildStepImplementation.php
--- a/src/applications/harbormaster/step/HarbormasterBuildkiteBuildStepImplementation.php
+++ b/src/applications/harbormaster/step/HarbormasterBuildkiteBuildStepImplementation.php
@@ -117,6 +117,20 @@
),
);
+ $engine = HarbormasterBuildableEngine::newForObject(
+ $object,
+ $viewer);
+
+ $author_identity = $engine->getAuthorIdentity();
+ if ($author_identity) {
+ $data_structure += array(
+ 'author' => array(
+ 'name' => $author_identity->getIdentityDisplayName(),
+ 'email' => $author_identity->getIdentityEmailAddress(),
+ ),
+ );
+ }
+
$json_data = phutil_json_encode($data_structure);
$credential_phid = $this->getSetting('token');
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
@@ -200,6 +200,8 @@
$this->authorIdentity = $author;
$this->committerIdentity = $committer;
+
+ return $this;
}
public function getAuthorIdentity() {
@@ -485,6 +487,23 @@
return null;
}
+ public function loadIdentities(PhabricatorUser $viewer) {
+ if ($this->authorIdentity !== self::ATTACHABLE) {
+ return $this;
+ }
+
+ $commit = id(new DiffusionCommitQuery())
+ ->setViewer($viewer)
+ ->withIDs(array($this->getID()))
+ ->needIdentities(true)
+ ->executeOne();
+
+ $author_identity = $commit->getAuthorIdentity();
+ $committer_identity = $commit->getCommitterIdentity();
+
+ return $this->attachIdentities($author_identity, $committer_identity);
+ }
+
public function hasCommitterIdentity() {
return ($this->getCommitterIdentity() !== null);
}
diff --git a/src/applications/repository/storage/PhabricatorRepositoryIdentity.php b/src/applications/repository/storage/PhabricatorRepositoryIdentity.php
--- a/src/applications/repository/storage/PhabricatorRepositoryIdentity.php
+++ b/src/applications/repository/storage/PhabricatorRepositoryIdentity.php
@@ -65,6 +65,16 @@
$this->getIdentityNameEncoding());
}
+ public function getIdentityEmailAddress() {
+ $address = new PhutilEmailAddress($this->getIdentityName());
+ return $address->getAddress();
+ }
+
+ public function getIdentityDisplayName() {
+ $address = new PhutilEmailAddress($this->getIdentityName());
+ return $address->getDisplayName();
+ }
+
public function getIdentityShortName() {
// TODO
return $this->getIdentityName();

File Metadata

Mime Type
text/plain
Expires
Mon, Feb 3, 10:15 PM (19 h, 7 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7087937
Default Alt Text
D19614.diff (4 KB)

Event Timeline