summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2013-01-10 21:47:30 (GMT)
committerJunio C Hamano <gitster@pobox.com>2013-01-10 21:47:30 (GMT)
commit63d1cf6526a51d72f5c14cf9f8c72d3cc37762bb (patch)
treeda5660e66f54263a4230352e620e896551c41cf2
parentd912b0e44f82dc430a4aac8566a8217b60629638 (diff)
parent9be1980bb966cb1bc187b62803e6b76087fd5aac (diff)
downloadgit-63d1cf6526a51d72f5c14cf9f8c72d3cc37762bb.zip
git-63d1cf6526a51d72f5c14cf9f8c72d3cc37762bb.tar.gz
git-63d1cf6526a51d72f5c14cf9f8c72d3cc37762bb.tar.bz2
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.c4
-rwxr-xr-xt/t5600-clone-fail-cleanup.sh12
2 files changed, 14 insertions, 2 deletions
diff --git a/builtin/clone.c b/builtin/clone.c
index ec2f75b..8d23a62 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 ee06d28..4435693 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