7
8
This test covers the fact that if git clone fails, it should remove
9
the directory it created, to avoid the user having to manually
10
-remove the directory before attempting a clone again.'
10
+remove the directory before attempting a clone again.
11
+
12
+Unless the directory already exists, in which case we clean up only what we
13
+wrote.
14
+'
15
16
. ./test-lib.sh
17
18
+corrupt_repo () {
19
+ test_when_finished "rmdir foo/.git/objects.bak" &&
20
+ mkdir foo/.git/objects.bak/ &&
21
+ test_when_finished "mv foo/.git/objects.bak/* foo/.git/objects/" &&
22
+ mv foo/.git/objects/* foo/.git/objects.bak/
23
+}
24
+
25
test_expect_success 'clone of non-existent source should fail' '
26
test_must_fail git clone foo bar
27
'
53
'
54
55
test_expect_success 'failed clone --separate-git-dir should not leave any directories' '
45
- test_when_finished "rmdir foo/.git/objects.bak" &&
46
- mkdir foo/.git/objects.bak/ &&
47
- test_when_finished "mv foo/.git/objects.bak/* foo/.git/objects/" &&
48
- mv foo/.git/objects/* foo/.git/objects.bak/ &&
56
+ corrupt_repo &&
57
test_must_fail git clone --separate-git-dir gitdir foo worktree &&
58
test_path_is_missing gitdir &&
59
test_path_is_missing worktree
60
'
61
62
+test_expect_success 'failed clone into empty leaves directory (vanilla)' '
63
+ mkdir -p empty &&
64
+ corrupt_repo &&
65
+ test_must_fail git clone foo empty &&
66
+ test_dir_is_empty empty
67
+'
68
+
69
+test_expect_success 'failed clone into empty leaves directory (bare)' '
70
+ mkdir -p empty &&
71
+ corrupt_repo &&
72
+ test_must_fail git clone --bare foo empty &&
73
+ test_dir_is_empty empty
74
+'
75
+
76
+test_expect_success 'failed clone into empty leaves directory (separate)' '
77
+ mkdir -p empty-git empty-wt &&
78
+ corrupt_repo &&
79
+ test_must_fail git clone --separate-git-dir empty-git foo empty-wt &&
80
+ test_dir_is_empty empty-git &&
81
+ test_dir_is_empty empty-wt
82
+'
83
+
84
+test_expect_success 'failed clone into empty leaves directory (separate, git)' '
85
+ mkdir -p empty-git &&
86
+ corrupt_repo &&
87
+ test_must_fail git clone --separate-git-dir empty-git foo no-wt &&
88
+ test_dir_is_empty empty-git &&
89
+ test_path_is_missing no-wt
90
+'
91
+
92
+test_expect_success 'failed clone into empty leaves directory (separate, wt)' '
93
+ mkdir -p empty-wt &&
94
+ corrupt_repo &&
95
+ test_must_fail git clone --separate-git-dir no-git foo empty-wt &&
96
+ test_path_is_missing no-git &&
97
+ test_dir_is_empty empty-wt
98
+'
99
+
100
test_done