(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'test local clone' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShFunction
      name: repo_is_hardlinked
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [
                    {(find)}
                    {(DQ ($ Id.VSub_Number '$1') (/objects))}
                    {(-type)}
                    {(f)}
                    {(-links)}
                    {(1)}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:36)
                      fd: -1
                      arg_word: {(output)}
                    )
                  ]
                )
                (C {(test_line_count)} {(Id.Lit_Equals '=')} {(0)} {(output)})
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'preparing origin repository' span_id:56))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:60) 
          (Token
            id: Id.Lit_Chars
            val: '\t: >file && git add . && git commit -m1 &&\n'
            span_id: 61
          ) (Token id:Id.Lit_Chars val:'\tgit clone --bare . a.git &&\n' span_id:62) 
          (Token id:Id.Lit_Chars val:'\tgit clone --bare . x &&\n' span_id:63) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(cd a.git && git config --bool core.bare)" = true &&\n'
            span_id: 64
          ) (Token id:Id.Lit_Chars val:'\ttest "$(cd x && git config --bool core.bare)" = true &&\n' span_id:65) 
          (Token id:Id.Lit_Chars val:'\tgit bundle create b1.bundle --all &&\n' span_id:66) (Token id:Id.Lit_Chars val:'\tgit bundle create b2.bundle master &&\n' span_id:67) 
          (Token id:Id.Lit_Chars val:'\tmkdir dir &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\tcp b1.bundle dir/b3 &&\n' span_id:69) 
          (Token id:Id.Lit_Chars val:'\tcp b1.bundle b4\n' span_id:70)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'local clone without .git suffix' span_id:77))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:81) 
          (Token id:Id.Lit_Chars val:'\tgit clone -l -s a b &&\n' span_id:82) (Token id:Id.Lit_Chars val:'\t(cd b &&\n' span_id:83) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git config --bool core.bare)" = false &&\n'
            span_id: 84
          ) (Token id:Id.Lit_Chars val:'\tgit fetch)\n' span_id:85)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'local clone with .git suffix' span_id:92))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:96) 
          (Token id:Id.Lit_Chars val:'\tgit clone -l -s a.git c &&\n' span_id:97) (Token id:Id.Lit_Chars val:'\t(cd c && git fetch)\n' span_id:98)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'local clone from x' span_id:105))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:109) 
          (Token id:Id.Lit_Chars val:'\tgit clone -l -s x y &&\n' span_id:110) (Token id:Id.Lit_Chars val:'\t(cd y && git fetch)\n' span_id:111)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'local clone from x.git that does not exist' span_id:118))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:122) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git clone -l -s x.git z\n'
            span_id: 123
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'With -no-hardlinks, local will make a copy' span_id:130))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:134) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit clone --bare --no-hardlinks x w &&\n'
            span_id: 135
          ) (Token id:Id.Lit_Chars val:'\t! repo_is_hardlinked w\n' span_id:136)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Even without -l, local will make a hardlink' span_id:143))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:147) 
          (Token id:Id.Lit_Chars val:'\trm -fr w &&\n' span_id:148) (Token id:Id.Lit_Chars val:'\tgit clone -l --bare x w &&\n' span_id:149) 
          (Token id:Id.Lit_Chars val:'\trepo_is_hardlinked w\n' span_id:150)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'local clone of repo with nonexistent ref in HEAD'
            span_id: 157
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:161) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "ref: refs/heads/nonexistent" > a.git/HEAD &&\n'
            span_id: 162
          ) (Token id:Id.Lit_Chars val:'\tgit clone a d &&\n' span_id:163) 
          (Token id:Id.Lit_Chars val:'\t(cd d &&\n' span_id:164) (Token id:Id.Lit_Chars val:'\tgit fetch &&\n' span_id:165) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest ! -e .git/refs/remotes/origin/HEAD)\n'
            span_id: 166
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'bundle clone without .bundle suffix' span_id:173))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:177) 
          (Token id:Id.Lit_Chars val:'\tgit clone dir/b3 &&\n' span_id:178) (Token id:Id.Lit_Chars val:'\t(cd b3 && git fetch)\n' span_id:179)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'bundle clone with .bundle suffix' span_id:186))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:190) 
          (Token id:Id.Lit_Chars val:'\tgit clone b1.bundle &&\n' span_id:191) (Token id:Id.Lit_Chars val:'\t(cd b1 && git fetch)\n' span_id:192)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bundle clone from b4' span_id:199))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:203) 
          (Token id:Id.Lit_Chars val:'\tgit clone b4 bdl &&\n' span_id:204) (Token id:Id.Lit_Chars val:'\t(cd bdl && git fetch)\n' span_id:205)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'bundle clone from b4.bundle that does not exist' span_id:212))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:216) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git clone b4.bundle bb\n'
            span_id: 217
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'bundle clone with nonexistent HEAD' span_id:224))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:228) 
          (Token id:Id.Lit_Chars val:'\tgit clone b2.bundle b2 &&\n' span_id:229) (Token id:Id.Lit_Chars val:'\t(cd b2 &&\n' span_id:230) 
          (Token id:Id.Lit_Chars val:'\tgit fetch &&\n' span_id:231) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git rev-parse --verify refs/heads/master)\n'
            span_id: 232
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'clone empty repository' span_id:239))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:243) 
          (Token id:Id.Lit_Chars val:'\tmkdir empty &&\n' span_id:244) (Token id:Id.Lit_Chars val:'\t(cd empty &&\n' span_id:245) 
          (Token id:Id.Lit_Chars val:'\t git init &&\n' span_id:246) (Token id:Id.Lit_Chars val:'\t git config receive.denyCurrentBranch warn) &&\n' span_id:247) 
          (Token id:Id.Lit_Chars val:'\tgit clone empty empty-clone &&\n' span_id:248) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:249) 
          (Token id:Id.Lit_Chars val:'\t(cd empty-clone\n' span_id:250) (Token id:Id.Lit_Chars val:'\t echo "content" >> foo &&\n' span_id:251) 
          (Token id:Id.Lit_Chars val:'\t git add foo &&\n' span_id:252) (Token id:Id.Lit_Chars val:'\t git commit -m "Initial commit" &&\n' span_id:253) 
          (Token id:Id.Lit_Chars val:'\t git push origin master &&\n' span_id:254) (Token id:Id.Lit_Chars val:'\t expected=$(git rev-parse master) &&\n' span_id:255) 
          (Token
            id: Id.Lit_Chars
            val: '\t actual=$(git --git-dir=../empty/.git rev-parse master) &&\n'
            span_id: 256
          ) (Token id:Id.Lit_Chars val:'\t test $actual = $expected)\n' span_id:257)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'clone empty repository, and then push should not segfault.'
            span_id: 264
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:268) 
          (Token id:Id.Lit_Chars val:'\trm -fr empty/ empty-clone/ &&\n' span_id:269) (Token id:Id.Lit_Chars val:'\tmkdir empty &&\n' span_id:270) 
          (Token id:Id.Lit_Chars val:'\t(cd empty && git init) &&\n' span_id:271) (Token id:Id.Lit_Chars val:'\tgit clone empty empty-clone &&\n' span_id:272) 
          (Token id:Id.Lit_Chars val:'\t(cd empty-clone &&\n' span_id:273) (Token id:Id.Lit_Chars val:'\ttest_must_fail git push)\n' span_id:274)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cloning non-existent directory fails' span_id:281))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:285) 
          (Token id:Id.Lit_Chars val:'\trm -rf does-not-exist &&\n' span_id:286) (Token id:Id.Lit_Chars val:'\ttest_must_fail git clone does-not-exist\n' span_id:287)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cloning non-git directory fails' span_id:294))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:298) 
          (Token
            id: Id.Lit_Chars
            val: '\trm -rf not-a-git-repo not-a-git-repo-clone &&\n'
            span_id: 299
          ) (Token id:Id.Lit_Chars val:'\tmkdir not-a-git-repo &&\n' span_id:300) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git clone not-a-git-repo not-a-git-repo-clone\n'
            span_id: 301
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cloning file:// does not hardlink' span_id:308))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:312) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit clone --bare file://"$(pwd)"/a non-local &&\n'
            span_id: 313
          ) (Token id:Id.Lit_Chars val:'\t! repo_is_hardlinked non-local\n' span_id:314)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'cloning a local path with --no-local does not hardlink'
            span_id: 321
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:325) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit clone --bare --no-local a force-nonlocal &&\n'
            span_id: 326
          ) (Token id:Id.Lit_Chars val:'\t! repo_is_hardlinked force-nonlocal\n' span_id:327)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cloning locally respects "-u" for fetching refs' span_id:334))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:338) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git clone --bare -u false a should_not_work.git\n'
            span_id: 339
          )
        )
      }
    )
    (C {(test_done)})
  ]
)