mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-22 14:52:40 +01:00
Fix race condition inside git diff-files
Summary: There's some sort of race inside `git` here, where the `git diff-files` command exits with different results some of the time when run in parallel with `git ls-files` or `git diff` (running either command was sufficient to trigger the race). Run it separately to avoid the race. I poked around the `git` source a little bit but quickly lost interest given that the issue seems fixed and this workaround is essentially reasonable. Test Plan: Ran test 20x in a row without failures. Reviewers: hach-que Reviewed By: hach-que Subscribers: epriestley Differential Revision: https://secure.phabricator.com/D9616
This commit is contained in:
parent
9257f1bc85
commit
dd1f93d77b
1 changed files with 7 additions and 1 deletions
|
@ -600,11 +600,17 @@ final class ArcanistGitAPI extends ArcanistRepositoryAPI {
|
||||||
$futures = array(
|
$futures = array(
|
||||||
$uncommitted_future,
|
$uncommitted_future,
|
||||||
$untracked_future,
|
$untracked_future,
|
||||||
$unstaged_future,
|
// NOTE: `git diff-files` races with each of these other commands
|
||||||
|
// internally, and resolves with inconsistent results if executed
|
||||||
|
// in parallel. To work around this, DO NOT run it at the same time.
|
||||||
|
// After the other commands exit, we can start the `diff-files` command.
|
||||||
);
|
);
|
||||||
|
|
||||||
Futures($futures)->resolveAll();
|
Futures($futures)->resolveAll();
|
||||||
|
|
||||||
|
// We're clear to start the `git diff-files` now.
|
||||||
|
$unstaged_future->start();
|
||||||
|
|
||||||
$result = new PhutilArrayWithDefaultValue();
|
$result = new PhutilArrayWithDefaultValue();
|
||||||
|
|
||||||
list($stdout) = $uncommitted_future->resolvex();
|
list($stdout) = $uncommitted_future->resolvex();
|
||||||
|
|
Loading…
Reference in a new issue