From a933c23e66265eedf822535ac56fcdb4ecb07a8c Mon Sep 17 00:00:00 2001 From: Michael Haggerty Date: Tue, 17 Feb 2015 18:00:18 +0100 Subject: commit: avoid race when creating orphan commits If HEAD doesn't point at anything during the initial check, then we should make sure that it *still* doesn't point at anything when we are ready to update the reference. Otherwise, another process might commit while we are working (e.g., while we are waiting for the user to edit the commit message) and we will silently overwrite it. This fixes a failing test in t7516. Signed-off-by: Michael Haggerty Reviewed-by: Stefan Beller Signed-off-by: Junio C Hamano diff --git a/builtin/commit.c b/builtin/commit.c index 8afb0ff..682f922 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -1766,7 +1766,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix) if (!transaction || ref_transaction_update(transaction, "HEAD", sha1, current_head - ? current_head->object.sha1 : NULL, + ? current_head->object.sha1 : null_sha1, 0, sb.buf, &err) || ref_transaction_commit(transaction, &err)) { rollback_index_files(); diff --git a/t/t7516-commit-races.sh b/t/t7516-commit-races.sh index ed04d1c..f2ce14e 100755 --- a/t/t7516-commit-races.sh +++ b/t/t7516-commit-races.sh @@ -3,7 +3,7 @@ test_description='git commit races' . ./test-lib.sh -test_expect_failure 'race to create orphan commit' ' +test_expect_success 'race to create orphan commit' ' write_script hare-editor <<-\EOF && git commit --allow-empty -m hare EOF -- cgit v0.10.2-6-g49f6