(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_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] ) ] ) (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>}) (command.Subshell child: (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (C {<cd>} {<foo>}) (C {<touch>} {<file>}) (C {<git>} {<add>} {<file>}) (command.Simple words: [{<git>} {<commit>} {<-m>} {(SQ <'add file'>)}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) (redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>}) ] do_fork: T ) ] ) ) (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>}) ] )