1
0
Fork 0
mirror of https://we.phorge.it/source/arcanist.git synced 2024-12-22 13:30:54 +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:
epriestley 2014-06-18 05:33:05 -07:00
parent 9257f1bc85
commit dd1f93d77b

View file

@ -600,11 +600,17 @@ final class ArcanistGitAPI extends ArcanistRepositoryAPI {
$futures = array(
$uncommitted_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();
// We're clear to start the `git diff-files` now.
$unstaged_future->start();
$result = new PhutilArrayWithDefaultValue();
list($stdout) = $uncommitted_future->resolvex();