blob: 4a1a912e032983383a3449d60753ced741680153 [file] [log] [blame]
Carl Worth5508a612006-02-17 13:33:28 -08001#!/bin/sh
2#
3# Copyright (C) 2006 Carl D. Worth <cworth@cworth.org>
4#
5
Nanako Shiraishi3604e7c2008-09-03 17:59:29 +09006test_description='test git clone to cleanup after failure
Carl Worth5508a612006-02-17 13:33:28 -08007
Nanako Shiraishi3604e7c2008-09-03 17:59:29 +09008This test covers the fact that if git clone fails, it should remove
Carl Worth5508a612006-02-17 13:33:28 -08009the directory it created, to avoid the user having to manually
Jeff Kingd45420c2018-01-02 16:11:39 -050010remove the directory before attempting a clone again.
11
12Unless the directory already exists, in which case we clean up only what we
13wrote.
14'
Carl Worth5508a612006-02-17 13:33:28 -080015
16. ./test-lib.sh
17
Jeff Kingd45420c2018-01-02 16:11:39 -050018corrupt_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
Jeff King8486b842018-01-02 16:09:00 -050025test_expect_success 'clone of non-existent source should fail' '
26 test_must_fail git clone foo bar
27'
Carl Worth5508a612006-02-17 13:33:28 -080028
Jeff King8486b842018-01-02 16:09:00 -050029test_expect_success 'failed clone should not leave a directory' '
30 test_path_is_missing bar
31'
Carl Worth5508a612006-02-17 13:33:28 -080032
Jeff King8486b842018-01-02 16:09:00 -050033test_expect_success 'create a repo to clone' '
34 test_create_repo foo
35'
Carl Worth5508a612006-02-17 13:33:28 -080036
Jeff King8486b842018-01-02 16:09:00 -050037test_expect_success 'create objects in repo for later corruption' '
38 test_commit -C foo file
39'
Carl Worth5508a612006-02-17 13:33:28 -080040
Nanako Shiraishi3604e7c2008-09-03 17:59:29 +090041# source repository given to git clone should be relative to the
Yasushi SHOJIced78b32006-10-14 21:02:51 +090042# current path not to the target dir
Jeff King8486b842018-01-02 16:09:00 -050043test_expect_success 'clone of non-existent (relative to $PWD) source should fail' '
44 test_must_fail git clone ../foo baz
45'
Yasushi SHOJIced78b32006-10-14 21:02:51 +090046
Jeff King8486b842018-01-02 16:09:00 -050047test_expect_success 'clone should work now that source exists' '
48 git clone foo bar
49'
Carl Worth5508a612006-02-17 13:33:28 -080050
Jeff King8486b842018-01-02 16:09:00 -050051test_expect_success 'successful clone must leave the directory' '
52 test_path_is_dir bar
53'
Jens Lehmann9be19802013-01-05 21:17:04 +010054
55test_expect_success 'failed clone --separate-git-dir should not leave any directories' '
Jeff Kingd45420c2018-01-02 16:11:39 -050056 corrupt_repo &&
Jens Lehmann9be19802013-01-05 21:17:04 +010057 test_must_fail git clone --separate-git-dir gitdir foo worktree &&
Jeff King8486b842018-01-02 16:09:00 -050058 test_path_is_missing gitdir &&
59 test_path_is_missing worktree
Jens Lehmann9be19802013-01-05 21:17:04 +010060'
Carl Worth5508a612006-02-17 13:33:28 -080061
Jeff Kingd45420c2018-01-02 16:11:39 -050062test_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
Carl Worth5508a612006-02-17 13:33:28 -0800100test_done