]>
Commit | Line | Data |
---|---|---|
1 | #!/bin/sh | |
2 | # | |
3 | # Copyright (C) 2006 Carl D. Worth <cworth@cworth.org> | |
4 | # | |
5 | ||
6 | test_description='test git clone to cleanup after failure | |
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. | |
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 | ' | |
28 | ||
29 | test_expect_success 'failed clone should not leave a directory' ' | |
30 | test_path_is_missing bar | |
31 | ' | |
32 | ||
33 | test_expect_success 'create a repo to clone' ' | |
34 | test_create_repo foo | |
35 | ' | |
36 | ||
37 | test_expect_success 'create objects in repo for later corruption' ' | |
38 | test_commit -C foo file | |
39 | ' | |
40 | ||
41 | # source repository given to git clone should be relative to the | |
42 | # current path not to the target dir | |
43 | test_expect_success 'clone of non-existent (relative to $PWD) source should fail' ' | |
44 | test_must_fail git clone ../foo baz | |
45 | ' | |
46 | ||
47 | test_expect_success 'clone should work now that source exists' ' | |
48 | git clone foo bar | |
49 | ' | |
50 | ||
51 | test_expect_success 'successful clone must leave the directory' ' | |
52 | test_path_is_dir bar | |
53 | ' | |
54 | ||
55 | test_expect_success 'failed clone --separate-git-dir should not leave any directories' ' | |
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 |