]> git.ipfire.org Git - thirdparty/git.git/blame - t/t5600-clone-fail-cleanup.sh
hashmap: use *_entry APIs for iteration
[thirdparty/git.git] / t / t5600-clone-fail-cleanup.sh
CommitLineData
5508a616
CW
1#!/bin/sh
2#
3# Copyright (C) 2006 Carl D. Worth <cworth@cworth.org>
4#
5
3604e7c5 6test_description='test git clone to cleanup after failure
5508a616 7
3604e7c5 8This test covers the fact that if git clone fails, it should remove
5508a616 9the directory it created, to avoid the user having to manually
d45420c1
JK
10remove the directory before attempting a clone again.
11
12Unless the directory already exists, in which case we clean up only what we
13wrote.
14'
5508a616
CW
15
16. ./test-lib.sh
17
d45420c1
JK
18corrupt_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
25test_expect_success 'clone of non-existent source should fail' '
26 test_must_fail git clone foo bar
27'
5508a616 28
8486b84f
JK
29test_expect_success 'failed clone should not leave a directory' '
30 test_path_is_missing bar
31'
5508a616 32
8486b84f
JK
33test_expect_success 'create a repo to clone' '
34 test_create_repo foo
35'
5508a616 36
8486b84f
JK
37test_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
43test_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
47test_expect_success 'clone should work now that source exists' '
48 git clone foo bar
49'
5508a616 50
8486b84f
JK
51test_expect_success 'successful clone must leave the directory' '
52 test_path_is_dir bar
53'
9be1980b
JL
54
55test_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
62test_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
69test_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
76test_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
84test_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
92test_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 100test_done