(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:'clone --branch option' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShFunction
      name: check_HEAD
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [{(echo)} {(refs/heads/) (DQ ($ Id.VSub_Number '$1'))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:28)
                      fd: -1
                      arg_word: {(expect)}
                    )
                  ]
                )
                (command.Simple
                  words: [{(git)} {(symbolic-ref)} {(HEAD)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:40)
                      fd: -1
                      arg_word: {(actual)}
                    )
                  ]
                )
                (C {(test_cmp)} {(expect)} {(actual)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: check_file
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [{(echo)} {(DQ ($ Id.VSub_Number '$1'))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:68)
                      fd: -1
                      arg_word: {(expect)}
                    )
                  ]
                )
                (C {(test_cmp)} {(expect)} {(file)})
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:86))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:90) 
          (Token id:Id.Lit_Chars val:'\tmkdir parent &&\n' span_id:91) (Token id:Id.Lit_Chars val:'\t(cd parent && git init &&\n' span_id:92) 
          (Token
            id: Id.Lit_Chars
            val: '\t echo one >file && git add file && git commit -m one &&\n'
            span_id: 93
          ) (Token id:Id.Lit_Chars val:'\t git checkout -b two &&\n' span_id:94) 
          (Token
            id: Id.Lit_Chars
            val: '\t echo two >file && git add file && git commit -m two &&\n'
            span_id: 95
          ) (Token id:Id.Lit_Chars val:'\t git checkout master) &&\n' span_id:96) 
          (Token id:Id.Lit_Chars val:'\tmkdir empty &&\n' span_id:97) (Token id:Id.Lit_Chars val:'\t(cd empty && git init)\n' span_id:98)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'vanilla clone chooses HEAD' span_id:105))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:109) 
          (Token id:Id.Lit_Chars val:'\tgit clone parent clone &&\n' span_id:110) (Token id:Id.Lit_Chars val:'\t(cd clone &&\n' span_id:111) 
          (Token id:Id.Lit_Chars val:'\t check_HEAD master &&\n' span_id:112) (Token id:Id.Lit_Chars val:'\t check_file one\n' span_id:113) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:114)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'clone -b chooses specified branch' span_id:121))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:125) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit clone -b two parent clone-two &&\n'
            span_id: 126
          ) (Token id:Id.Lit_Chars val:'\t(cd clone-two &&\n' span_id:127) 
          (Token id:Id.Lit_Chars val:'\t check_HEAD two &&\n' span_id:128) (Token id:Id.Lit_Chars val:'\t check_file two\n' span_id:129) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:130)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'clone -b sets up tracking' span_id:137))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:141) 
          (Token id:Id.Lit_Chars val:'\t(cd clone-two &&\n' span_id:142) (Token id:Id.Lit_Chars val:'\t echo origin >expect &&\n' span_id:143) 
          (Token
            id: Id.Lit_Chars
            val: '\t git config branch.two.remote >actual &&\n'
            span_id: 144
          ) (Token id:Id.Lit_Chars val:'\t echo refs/heads/two >>expect &&\n' span_id:145) 
          (Token
            id: Id.Lit_Chars
            val: '\t git config branch.two.merge >>actual &&\n'
            span_id: 146
          ) (Token id:Id.Lit_Chars val:'\t test_cmp expect actual\n' span_id:147) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:148)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'clone -b does not munge remotes/origin/HEAD' span_id:155))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:159) 
          (Token id:Id.Lit_Chars val:'\t(cd clone-two &&\n' span_id:160) (Token id:Id.Lit_Chars val:'\t echo refs/remotes/origin/master >expect &&\n' span_id:161) 
          (Token
            id: Id.Lit_Chars
            val: '\t git symbolic-ref refs/remotes/origin/HEAD >actual &&\n'
            span_id: 162
          ) (Token id:Id.Lit_Chars val:'\t test_cmp expect actual\n' span_id:163) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:164)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'clone -b with bogus branch' span_id:171))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:175) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git clone -b bogus parent clone-bogus\n'
            span_id: 176
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'clone -b not allowed with empty repos' span_id:183))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:187) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git clone -b branch empty clone-branch-empty\n'
            span_id: 188
          )
        )
      }
    )
    (C {(test_done)})
  ]
)