mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-25 16:22:43 +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);
|
return phutil_split_lines($stdout, $retain_newlines = false);
|
||||||
case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
|
case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
|
||||||
if ($all_closing_heads) {
|
if ($all_closing_heads) {
|
||||||
list($stdout) = $this->getRepository()->execxLocalCommand(
|
|
||||||
'log --format=%s %s --not %Ls',
|
// See PHI1474. This length of list may exceed the maximum size of
|
||||||
'%H',
|
// a command line argument list, so pipe the list in using "--stdin"
|
||||||
$new_head,
|
// instead.
|
||||||
$all_closing_heads);
|
|
||||||
|
$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 {
|
} else {
|
||||||
list($stdout) = $this->getRepository()->execxLocalCommand(
|
list($stdout) = $this->getRepository()->execxLocalCommand(
|
||||||
'log --format=%s %s',
|
'log --format=%s %s',
|
||||||
|
|
Loading…
Reference in a new issue