diff options
author | Junio C Hamano <gitster@pobox.com> | 2013-01-10 13:47:30 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-01-10 13:47:30 -0800 |
commit | 63d1cf6526a51d72f5c14cf9f8c72d3cc37762bb (patch) | |
tree | da5660e66f54263a4230352e620e896551c41cf2 | |
parent | Merge branch 'as/dir-c-cleanup' (diff) | |
parent | clone: support atomic operation with --separate-git-dir (diff) | |
download | tgif-63d1cf6526a51d72f5c14cf9f8c72d3cc37762bb.tar.xz |
Merge branch 'jl/interrupt-clone-remove-separate-git-dir'
When "git clone --separate-git-dir" is interrupted, we failed to
remove the real location we created the repository.
* jl/interrupt-clone-remove-separate-git-dir:
clone: support atomic operation with --separate-git-dir
-rw-r--r-- | builtin/clone.c | 4 | ||||
-rwxr-xr-x | t/t5600-clone-fail-cleanup.sh | 12 |
2 files changed, 14 insertions, 2 deletions
diff --git a/builtin/clone.c b/builtin/clone.c index ec2f75b4f3..8d23a62e8a 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -771,8 +771,10 @@ int cmd_clone(int argc, const char **argv, const char *prefix) die(_("could not create leading directories of '%s'"), git_dir); set_git_dir_init(git_dir, real_git_dir, 0); - if (real_git_dir) + if (real_git_dir) { git_dir = real_git_dir; + junk_git_dir = real_git_dir; + } if (0 <= option_verbosity) { if (option_bare) diff --git a/t/t5600-clone-fail-cleanup.sh b/t/t5600-clone-fail-cleanup.sh index ee06d28649..4435693bb2 100755 --- a/t/t5600-clone-fail-cleanup.sh +++ b/t/t5600-clone-fail-cleanup.sh @@ -37,6 +37,16 @@ test_expect_success \ test_expect_success \ 'successful clone must leave the directory' \ - 'cd bar' + 'test -d bar' + +test_expect_success 'failed clone --separate-git-dir should not leave any directories' ' + mkdir foo/.git/objects.bak/ && + mv foo/.git/objects/* foo/.git/objects.bak/ && + test_must_fail git clone --separate-git-dir gitdir foo worktree && + test_must_fail test -e gitdir && + test_must_fail test -e worktree && + mv foo/.git/objects.bak/* foo/.git/objects/ && + rmdir foo/.git/objects.bak +' test_done |