Differential D21511 Diff 51201 src/applications/diffusion/conduit/DiffusionMergedCommitsQueryConduitAPIMethod.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/diffusion/conduit/DiffusionMergedCommitsQueryConduitAPIMethod.php
| Show All 29 Lines | final class DiffusionMergedCommitsQueryConduitAPIMethod | ||||
| protected function getGitResult(ConduitAPIRequest $request) { | protected function getGitResult(ConduitAPIRequest $request) { | ||||
| $drequest = $this->getDiffusionRequest(); | $drequest = $this->getDiffusionRequest(); | ||||
| $repository = $drequest->getRepository(); | $repository = $drequest->getRepository(); | ||||
| $commit = $request->getValue('commit'); | $commit = $request->getValue('commit'); | ||||
| $limit = $this->getLimit($request); | $limit = $this->getLimit($request); | ||||
| list($parents) = $repository->execxLocalCommand( | list($parents) = $repository->execxLocalCommand( | ||||
| 'log -n 1 --format=%s %s --', | 'log -n 1 %s %s --', | ||||
| '%P', | '--format=%P', | ||||
| gitsprintf('%s', $commit)); | gitsprintf('%s', $commit)); | ||||
| $parents = preg_split('/\s+/', trim($parents)); | $parents = preg_split('/\s+/', trim($parents)); | ||||
| if (count($parents) < 2) { | if (count($parents) < 2) { | ||||
| // This is not a merge commit, so it doesn't merge anything. | // This is not a merge commit, so it doesn't merge anything. | ||||
| return array(); | return array(); | ||||
| } | } | ||||
| // Get all of the commits which are not reachable from the first parent. | // Get all of the commits which are not reachable from the first parent. | ||||
| // These are the commits this change merges. | // These are the commits this change merges. | ||||
| $first_parent = head($parents); | $first_parent = head($parents); | ||||
| list($logs) = $repository->execxLocalCommand( | list($logs) = $repository->execxLocalCommand( | ||||
| 'log -n %d --format=%s %s %s --', | 'log -n %d %s %s %s --', | ||||
| // NOTE: "+ 1" accounts for the merge commit itself. | // NOTE: "+ 1" accounts for the merge commit itself. | ||||
| $limit + 1, | $limit + 1, | ||||
| '%H', | '--format=%H', | ||||
| gitsprintf('%s', $commit), | gitsprintf('%s', $commit), | ||||
| gitsprintf('%s', '^'.$first_parent)); | gitsprintf('%s', '^'.$first_parent)); | ||||
| $hashes = explode("\n", trim($logs)); | $hashes = explode("\n", trim($logs)); | ||||
| // Remove the merge commit. | // Remove the merge commit. | ||||
| $hashes = array_diff($hashes, array($commit)); | $hashes = array_diff($hashes, array($commit)); | ||||
| ▲ Show 20 Lines • Show All 47 Lines • Show Last 20 Lines | |||||