mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-26 07:20:57 +01:00
Use "git log ... --stdin" instead of "git log ... --not ..." to avoid oversized command lines
Summary: Depends on D20853. See PHI1474. If the list of "--not" refs is sufficiently long, we may exceed the maximum size of a command. Use "--stdin" instead, and swap "--not" for the slightly less readable but functionally equivalent "^hash", which has the advantage of actually working with "--stdin". Test Plan: Ran `bin/repository refs ...` with nothing to be done, and with something to be done. Differential Revision: https://secure.phabricator.com/D20854
This commit is contained in:
parent
6d74736a7e
commit
7badec23a7
1 changed files with 20 additions and 5 deletions
|
@ -469,11 +469,26 @@ final class PhabricatorRepositoryRefEngine
|
|||
return phutil_split_lines($stdout, $retain_newlines = false);
|
||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
|
||||
if ($all_closing_heads) {
|
||||
list($stdout) = $this->getRepository()->execxLocalCommand(
|
||||
'log --format=%s %s --not %Ls',
|
||||
'%H',
|
||||
$new_head,
|
||||
$all_closing_heads);
|
||||
|
||||
// See PHI1474. This length of list may exceed the maximum size of
|
||||
// a command line argument list, so pipe the list in using "--stdin"
|
||||
// instead.
|
||||
|
||||
$ref_list = array();
|
||||
$ref_list[] = $new_head;
|
||||
foreach ($all_closing_heads as $old_head) {
|
||||
$ref_list[] = '^'.$old_head;
|
||||
}
|
||||
$ref_list[] = '--';
|
||||
$ref_list = implode("\n", $ref_list)."\n";
|
||||
|
||||
$future = $this->getRepository()->getLocalCommandFuture(
|
||||
'log --format=%s --stdin',
|
||||
'%H');
|
||||
|
||||
list($stdout) = $future
|
||||
->write($ref_list)
|
||||
->resolvex();
|
||||
} else {
|
||||
list($stdout) = $this->getRepository()->execxLocalCommand(
|
||||
'log --format=%s %s',
|
||||
|
|
Loading…
Reference in a new issue