(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
      command_list: 
        (command.CommandList
          children: [
            (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.Redir
                      op: <Id.Redir_Great '>'>
                      fd: -1
                      arg_word: {</dev/null>}
                    )
                    (redir.Redir op:<Id.Redir_GreatAnd '2>&'> fd:2 arg_word:{<1>})
                  ]
                )
              ]
            )
          ]
        )
    )
    (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>})
  ]
)