#!/bin/sh # # Copyright (C) 2006 Carl D. Worth # global test_description := ''test git clone to cleanup after failure This test covers the fact that if git clone fails, it should remove the directory it created, to avoid the user having to manually remove the directory before attempting a clone again.'' source ./test-lib.sh test_expect_success \ 'clone of non-existent source should fail' \ 'test_must_fail git clone foo bar' test_expect_success \ 'failed clone should not leave a directory' \ '! test -d bar' # Need a repo to clone test_create_repo foo # clone doesn't like it if there is no HEAD. Is that a bug? shell {cd foo && touch file && git add file && git commit -m 'add file' >/dev/null !2 > !1} # source repository given to git clone should be relative to the # current path not to the target dir test_expect_success \ 'clone of non-existent (relative to $PWD) source should fail' \ 'test_must_fail git clone ../foo baz' test_expect_success \ 'clone should work now that source exists' \ 'git clone foo bar' test_expect_success \ 'successful clone must leave the directory' \ 'test -d bar' test_expect_success 'failed clone --separate-git-dir should not leave any directories' ' mkdir foo/.git/objects.bak/ && mv foo/.git/objects/* foo/.git/objects.bak/ && test_must_fail git clone --separate-git-dir gitdir foo worktree && test_must_fail test -e gitdir && test_must_fail test -e worktree && mv foo/.git/objects.bak/* foo/.git/objects/ && rmdir foo/.git/objects.bak ' test_done (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: { (SQ <"test git clone to cleanup after failure\n"> <"\n"> <"This test covers the fact that if git clone fails, it should remove\n"> <"the directory it created, to avoid the user having to manually\n"> <"remove the directory before attempting a clone again."> ) } spids: [13] ) ] spids: [13] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ <"clone of non-existent source should fail">)} {(SQ <"test_must_fail git clone foo bar">)} ) (C {(test_expect_success)} {(SQ <"failed clone should not leave a directory">)} {(SQ <"! test -d bar">)} ) (C {(test_create_repo)} {(foo)}) (Subshell child: (AndOr children: [ (C {(cd)} {(foo)}) (AndOr children: [ (C {(touch)} {(file)}) (AndOr children: [ (C {(git)} {(add)} {(file)}) (SimpleCommand words: [{(git)} {(commit)} {(-m)} {(SQ <"add file">)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(/dev/null)} spids: [100] ) (Redir op_id: Redir_GreatAnd fd: 2 arg_word: {(1)} spids: [103] ) ] ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) spids: [69 105] ) (C {(test_expect_success)} {(SQ <"clone of non-existent (relative to $PWD) source should fail">)} {(SQ <"test_must_fail git clone ../foo baz">)} ) (C {(test_expect_success)} {(SQ <"clone should work now that source exists">)} {(SQ <"git clone foo bar">)} ) (C {(test_expect_success)} {(SQ <"successful clone must leave the directory">)} {(SQ <"test -d bar">)} ) (C {(test_expect_success)} {(SQ <"failed clone --separate-git-dir should not leave any directories">)} { (SQ <"\n"> <"\tmkdir foo/.git/objects.bak/ &&\n"> <"\tmv foo/.git/objects/* foo/.git/objects.bak/ &&\n"> <"\ttest_must_fail git clone --separate-git-dir gitdir foo worktree &&\n"> <"\ttest_must_fail test -e gitdir &&\n"> <"\ttest_must_fail test -e worktree &&\n"> <"\tmv foo/.git/objects.bak/* foo/.git/objects/ &&\n"> <"\trmdir foo/.git/objects.bak\n"> ) } ) (C {(test_done)}) ] )