Files
phabricator/src/applications/diffusion/query/mergedcommits/DiffusionGitMergedCommitsQuery.php
Bob Trahan df50e380ca Diffusion - move history query to conduit
Summary: Ref T2784

Test Plan: for each flavor of VCS, I loaded up the repository home page. verified I saw some parent action where appropos. next, clicked through to 'view history' and verified it loaded up A-OK.

Reviewers: epriestley

Reviewed By: epriestley

CC: aran, Korvin

Maniphest Tasks: T2784

Differential Revision: https://secure.phabricator.com/D5960
2013-05-20 12:45:34 -07:00

42 lines
1.1 KiB
PHP

<?php
final class DiffusionGitMergedCommitsQuery extends DiffusionMergedCommitsQuery {
protected function executeQuery() {
$request = $this->getRequest();
$repository = $request->getRepository();
list($parents) = $repository->execxLocalCommand(
'log -n 1 --format=%s %s',
'%P',
$request->getCommit());
$parents = preg_split('/\s+/', trim($parents));
if (count($parents) < 2) {
// This is not a merge commit, so it doesn't merge anything.
return array();
}
// Get all of the commits which are not reachable from the first parent.
// These are the commits this change merges.
$first_parent = head($parents);
list($logs) = $repository->execxLocalCommand(
'log -n %d --format=%s %s %s --',
// NOTE: "+ 1" accounts for the merge commit itself.
$this->getLimit() + 1,
'%H',
$request->getCommit(),
'^'.$first_parent);
$hashes = explode("\n", trim($logs));
// Remove the merge commit.
$hashes = array_diff($hashes, array($request->getCommit()));
return DiffusionQuery::loadHistoryForCommitIdentifiers(
$hashes,
$request);
}
}