Differential D19386 Diff 46376 src/applications/differential/engineextension/DifferentialCommitsSearchEngineAttachment.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/differential/engineextension/DifferentialCommitsSearchEngineAttachment.php
- This file was added.
<?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, | |||||
); | |||||
} | |||||
} |