Page MenuHomePhabricator

D19386.id46369.diff
No OneTemporary

D19386.id46369.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -455,6 +455,7 @@
'DifferentialCommitMessageParser' => 'applications/differential/parser/DifferentialCommitMessageParser.php',
'DifferentialCommitMessageParserTestCase' => 'applications/differential/parser/__tests__/DifferentialCommitMessageParserTestCase.php',
'DifferentialCommitsField' => 'applications/differential/customfield/DifferentialCommitsField.php',
+ 'DifferentialCommitsSearchEngineAttachment' => 'applications/differential/engineextension/DifferentialCommitsSearchEngineAttachment.php',
'DifferentialConduitAPIMethod' => 'applications/differential/conduit/DifferentialConduitAPIMethod.php',
'DifferentialConflictsCommitMessageField' => 'applications/differential/field/DifferentialConflictsCommitMessageField.php',
'DifferentialController' => 'applications/differential/controller/DifferentialController.php',
@@ -5732,6 +5733,7 @@
'DifferentialCommitMessageParser' => 'Phobject',
'DifferentialCommitMessageParserTestCase' => 'PhabricatorTestCase',
'DifferentialCommitsField' => 'DifferentialCustomField',
+ 'DifferentialCommitsSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment',
'DifferentialConduitAPIMethod' => 'ConduitAPIMethod',
'DifferentialConflictsCommitMessageField' => 'DifferentialCommitMessageField',
'DifferentialController' => 'PhabricatorController',
diff --git a/src/applications/differential/engineextension/DifferentialCommitsSearchEngineAttachment.php b/src/applications/differential/engineextension/DifferentialCommitsSearchEngineAttachment.php
new file mode 100644
--- /dev/null
+++ b/src/applications/differential/engineextension/DifferentialCommitsSearchEngineAttachment.php
@@ -0,0 +1,77 @@
+<?php
+
+final class DifferentialCommitsSearchEngineAttachment
+ extends PhabricatorSearchEngineAttachment {
+
+ public function getAttachmentName() {
+ return pht('Diff Commits');
+ }
+
+ public function getAttachmentDescription() {
+ return pht('Get the local commits (if any) for each diff.');
+ }
+
+ public function loadAttachmentData(array $objects, $spec) {
+ $properties = id(new DifferentialDiffProperty())->loadAllWhere(
+ 'diffID IN (%Ld) AND name = %s',
+ mpull($objects, 'getID'),
+ 'local:commits');
+
+ $map = array();
+ foreach ($properties as $property) {
+ $map[$property->getDiffID()] = $property->getData();
+ }
+
+ return $map;
+ }
+
+ public function getAttachmentForObject($object, $data, $spec) {
+ $diff_id = $object->getID();
+ $info = idx($data, $diff_id, array());
+
+ // NOTE: This should be similar to the information returned about commits
+ // by "diffusion.commit.search".
+
+ $list = array();
+ foreach ($info as $commit) {
+ $author_epoch = idx($commit, 'time');
+ if ($author_epoch) {
+ $author_epoch = (int)$author_epoch;
+ }
+
+ // TODO: Currently, we don't upload the raw author string from "arc".
+ // Reconstruct a plausible version of it until we begin uploading this
+ // information.
+
+ $author_name = idx($commit, 'author');
+ $author_email = idx($commit, 'authorEmail');
+ if (strlen($author_name) && strlen($author_email)) {
+ $author_raw = (string)id(new PhutilEmailAddress())
+ ->setDisplayName($author_name)
+ ->setAddress($author_email);
+ } else if (strlen($author_email)) {
+ $author_raw = $author_email;
+ } else {
+ $author_raw = $author_name;
+ }
+
+ $list[] = array(
+ 'identifier' => $commit['commit'],
+ 'tree' => idx($commit, 'tree'),
+ 'parents' => idx($commit, 'parents', array()),
+ 'author' => array(
+ 'name' => $author_name,
+ 'email' => $author_email,
+ 'raw' => $author_raw,
+ 'epoch' => $author_epoch,
+ ),
+ 'message' => idx($commit, 'message'),
+ );
+ }
+
+ return array(
+ 'commits' => $list,
+ );
+ }
+
+}
diff --git a/src/applications/differential/storage/DifferentialDiff.php b/src/applications/differential/storage/DifferentialDiff.php
--- a/src/applications/differential/storage/DifferentialDiff.php
+++ b/src/applications/differential/storage/DifferentialDiff.php
@@ -815,7 +815,10 @@
}
public function getConduitSearchAttachments() {
- return array();
+ return array(
+ id(new DifferentialCommitsSearchEngineAttachment())
+ ->setAttachmentKey('commits'),
+ );
}
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
@@ -716,6 +716,10 @@
}
public function getFieldValuesForConduit() {
+
+ // NOTE: This data should be similar to the information returned about
+ // commmits by "differential.diff.search" with the "commits" attachment.
+
return array(
'identifier' => $this->getCommitIdentifier(),
);

File Metadata

Mime Type
text/plain
Expires
Fri, May 10, 8:01 AM (2 w, 4 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6281829
Default Alt Text
D19386.id46369.diff (5 KB)

Event Timeline