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', @@ -5733,6 +5734,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 @@ +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(), );