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 <mhagger@alum.mit.edu> Reviewed-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
a908a31c34
commit
a933c23e66
@ -1766,7 +1766,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
|
|||||||
if (!transaction ||
|
if (!transaction ||
|
||||||
ref_transaction_update(transaction, "HEAD", sha1,
|
ref_transaction_update(transaction, "HEAD", sha1,
|
||||||
current_head
|
current_head
|
||||||
? current_head->object.sha1 : NULL,
|
? current_head->object.sha1 : null_sha1,
|
||||||
0, sb.buf, &err) ||
|
0, sb.buf, &err) ||
|
||||||
ref_transaction_commit(transaction, &err)) {
|
ref_transaction_commit(transaction, &err)) {
|
||||||
rollback_index_files();
|
rollback_index_files();
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
test_description='git commit races'
|
test_description='git commit races'
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
|
|
||||||
test_expect_failure 'race to create orphan commit' '
|
test_expect_success 'race to create orphan commit' '
|
||||||
write_script hare-editor <<-\EOF &&
|
write_script hare-editor <<-\EOF &&
|
||||||
git commit --allow-empty -m hare
|
git commit --allow-empty -m hare
|
||||||
EOF
|
EOF
|
||||||
|
Loading…
Reference in New Issue
Block a user