(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)})
  ]
)