]>
Commit | Line | Data |
---|---|---|
5508a616 CW |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (C) 2006 Carl D. Worth <cworth@cworth.org> | |
4 | # | |
5 | ||
3604e7c5 | 6 | test_description='test git clone to cleanup after failure |
5508a616 | 7 | |
3604e7c5 | 8 | This test covers the fact that if git clone fails, it should remove |
5508a616 | 9 | the directory it created, to avoid the user having to manually |
d45420c1 JK |
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 | ' | |
5508a616 CW |
15 | |
16 | . ./test-lib.sh | |
17 | ||
d45420c1 JK |
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 | ||
8486b84f JK |
25 | test_expect_success 'clone of non-existent source should fail' ' |
26 | test_must_fail git clone foo bar | |
27 | ' | |
5508a616 | 28 | |
8486b84f JK |
29 | test_expect_success 'failed clone should not leave a directory' ' |
30 | test_path_is_missing bar | |
31 | ' | |
5508a616 | 32 | |
8486b84f JK |
33 | test_expect_success 'create a repo to clone' ' |
34 | test_create_repo foo | |
35 | ' | |
5508a616 | 36 | |
8486b84f JK |
37 | test_expect_success 'create objects in repo for later corruption' ' |
38 | test_commit -C foo file | |
39 | ' | |
5508a616 | 40 | |
3604e7c5 | 41 | # source repository given to git clone should be relative to the |
ced78b39 | 42 | # current path not to the target dir |
8486b84f JK |
43 | test_expect_success 'clone of non-existent (relative to $PWD) source should fail' ' |
44 | test_must_fail git clone ../foo baz | |
45 | ' | |
ced78b39 | 46 | |
8486b84f JK |
47 | test_expect_success 'clone should work now that source exists' ' |
48 | git clone foo bar | |
49 | ' | |
5508a616 | 50 | |
8486b84f JK |
51 | test_expect_success 'successful clone must leave the directory' ' |
52 | test_path_is_dir bar | |
53 | ' | |
9be1980b JL |
54 | |
55 | test_expect_success 'failed clone --separate-git-dir should not leave any directories' ' | |
d45420c1 | 56 | corrupt_repo && |
9be1980b | 57 | test_must_fail git clone --separate-git-dir gitdir foo worktree && |
8486b84f JK |
58 | test_path_is_missing gitdir && |
59 | test_path_is_missing worktree | |
9be1980b | 60 | ' |
5508a616 | 61 | |
d45420c1 JK |
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 | ||
5508a616 | 100 | test_done |