(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: 
            {
              (SQ <'checkout <branch>\n'> <'\n'> 
                <'Ensures that checkout on an unborn branch does what the user expects'>
              )
            }
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (FuncDef
      name: test_branch
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (SimpleCommand
                  words: [
                    {(printf)}
                    {(DQ ('%s') (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>))}
                    {(DQ (refs/heads/) ($ VSub_Number '$1'))}
                  ]
                  redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(expect.HEAD)} spids:[40])]
                )
                (AndOr
                  children: [
                    (SimpleCommand
                      words: [{(git)} {(symbolic-ref)} {(HEAD)}]
                      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(actual.HEAD)} spids:[52])]
                    )
                    (C {(test_cmp)} {(expect.HEAD)} {(actual.HEAD)})
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [25]
        )
      spids: [20 24]
    )
    (FuncDef
      name: test_branch_upstream
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (SimpleCommand
                  words: [
                    {(printf)}
                    {(DQ ('%s') (EscapedLiteralPart token:<Lit_EscapedChar '\\n'>))}
                    {(DQ ($ VSub_Number '$2'))}
                    {(DQ (refs/heads/) ($ VSub_Number '$3'))}
                  ]
                  redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(expect.upstream)} spids:[94])]
                )
                (AndOr
                  children: [
                    (BraceGroup
                      children: [
                        (AndOr
                          children: [
                            (C {(git)} {(config)} {(DQ (branch.) ($ VSub_Number '$1') (.remote))})
                            (C {(git)} {(config)} {(DQ (branch.) ($ VSub_Number '$1') (.merge))})
                          ]
                          op_id: Op_DAmp
                        )
                      ]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: -1
                          arg_word: {(actual.upstream)}
                          spids: [129]
                        )
                      ]
                      spids: [100]
                    )
                    (C {(test_cmp)} {(expect.upstream)} {(actual.upstream)})
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [75]
        )
      spids: [70 74]
    )
    (C {(test_expect_success)} {(SQ <setup>)} 
      {
        (SQ <'\n'> <'\ttest_commit my_master &&\n'> <'\tgit init repo_a &&\n'> <'\t(\n'> 
          <'\t\tcd repo_a &&\n'> <'\t\ttest_commit a_master &&\n'> <'\t\tgit checkout -b foo &&\n'> <'\t\ttest_commit a_foo &&\n'> 
          <'\t\tgit checkout -b bar &&\n'> <'\t\ttest_commit a_bar\n'> <'\t) &&\n'> <'\tgit init repo_b &&\n'> <'\t(\n'> <'\t\tcd repo_b &&\n'> 
          <'\t\ttest_commit b_master &&\n'> <'\t\tgit checkout -b foo &&\n'> <'\t\ttest_commit b_foo &&\n'> <'\t\tgit checkout -b baz &&\n'> 
          <'\t\ttest_commit b_baz\n'> <'\t) &&\n'> <'\tgit remote add repo_a repo_a &&\n'> <'\tgit remote add repo_b repo_b &&\n'> 
          <'\tgit config remote.repo_b.fetch \\\n'> <'\t\t"+refs/heads/*:refs/remotes/other_b/*" &&\n'> <'\tgit fetch --all\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'checkout of non-existing branch fails'>)} 
      {
        (SQ <'\n'> <'\tgit checkout -B master &&\n'> <'\ttest_might_fail git branch -D xyzzy &&\n'> 
          <'\n'> <'\ttest_must_fail git checkout xyzzy &&\n'> 
          <'\ttest_must_fail git rev-parse --verify refs/heads/xyzzy &&\n'> <'\ttest_branch master\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'checkout of branch from multiple remotes fails #1'>)} 
      {
        (SQ <'\n'> <'\tgit checkout -B master &&\n'> <'\ttest_might_fail git branch -D foo &&\n'> <'\n'> 
          <'\ttest_must_fail git checkout foo &&\n'> <'\ttest_must_fail git rev-parse --verify refs/heads/foo &&\n'> <'\ttest_branch master\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'checkout of branch from a single remote succeeds #1'>)} 
      {
        (SQ <'\n'> <'\tgit checkout -B master &&\n'> <'\ttest_might_fail git branch -D bar &&\n'> <'\n'> 
          <'\tgit checkout bar &&\n'> <'\ttest_branch bar &&\n'> <'\ttest_cmp_rev remotes/repo_a/bar HEAD &&\n'> 
          <'\ttest_branch_upstream bar repo_a bar\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'checkout of branch from a single remote succeeds #2'>)} 
      {
        (SQ <'\n'> <'\tgit checkout -B master &&\n'> <'\ttest_might_fail git branch -D baz &&\n'> <'\n'> 
          <'\tgit checkout baz &&\n'> <'\ttest_branch baz &&\n'> <'\ttest_cmp_rev remotes/other_b/baz HEAD &&\n'> 
          <'\ttest_branch_upstream baz repo_b baz\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'--no-guess suppresses branch auto-vivification'>)} 
      {
        (SQ <'\n'> <'\tgit checkout -B master &&\n'> <'\ttest_might_fail git branch -D bar &&\n'> <'\n'> 
          <'\ttest_must_fail git checkout --no-guess bar &&\n'> <'\ttest_must_fail git rev-parse --verify refs/heads/bar &&\n'> <'\ttest_branch master\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'setup more remotes with unconventional refspecs'>)} 
      {
        (SQ <'\n'> <'\tgit checkout -B master &&\n'> <'\tgit init repo_c &&\n'> <'\t(\n'> 
          <'\t\tcd repo_c &&\n'> <'\t\ttest_commit c_master &&\n'> <'\t\tgit checkout -b bar &&\n'> <'\t\ttest_commit c_bar &&\n'> 
          <'\t\tgit checkout -b spam &&\n'> <'\t\ttest_commit c_spam\n'> <'\t) &&\n'> <'\tgit init repo_d &&\n'> <'\t(\n'> <'\t\tcd repo_d &&\n'> 
          <'\t\ttest_commit d_master &&\n'> <'\t\tgit checkout -b baz &&\n'> <'\t\ttest_commit d_baz &&\n'> <'\t\tgit checkout -b eggs &&\n'> 
          <'\t\ttest_commit d_eggs\n'> <'\t) &&\n'> <'\tgit remote add repo_c repo_c &&\n'> <'\tgit config remote.repo_c.fetch \\\n'> 
          <'\t\t"+refs/heads/*:refs/remotes/extra_dir/repo_c/extra_dir/*" &&\n'> <'\tgit remote add repo_d repo_d &&\n'> <'\tgit config remote.repo_d.fetch \\\n'> 
          <'\t\t"+refs/heads/*:refs/repo_d/*" &&\n'> <'\tgit fetch --all\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'checkout of branch from multiple remotes fails #2'>)} 
      {
        (SQ <'\n'> <'\tgit checkout -B master &&\n'> <'\ttest_might_fail git branch -D bar &&\n'> <'\n'> 
          <'\ttest_must_fail git checkout bar &&\n'> <'\ttest_must_fail git rev-parse --verify refs/heads/bar &&\n'> <'\ttest_branch master\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'checkout of branch from multiple remotes fails #3'>)} 
      {
        (SQ <'\n'> <'\tgit checkout -B master &&\n'> <'\ttest_might_fail git branch -D baz &&\n'> <'\n'> 
          <'\ttest_must_fail git checkout baz &&\n'> <'\ttest_must_fail git rev-parse --verify refs/heads/baz &&\n'> <'\ttest_branch master\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'checkout of branch from a single remote succeeds #3'>)} 
      {
        (SQ <'\n'> <'\tgit checkout -B master &&\n'> <'\ttest_might_fail git branch -D spam &&\n'> 
          <'\n'> <'\tgit checkout spam &&\n'> <'\ttest_branch spam &&\n'> 
          <'\ttest_cmp_rev refs/remotes/extra_dir/repo_c/extra_dir/spam HEAD &&\n'> <'\ttest_branch_upstream spam repo_c spam\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'checkout of branch from a single remote succeeds #4'>)} 
      {
        (SQ <'\n'> <'\tgit checkout -B master &&\n'> <'\ttest_might_fail git branch -D eggs &&\n'> 
          <'\n'> <'\tgit checkout eggs &&\n'> <'\ttest_branch eggs &&\n'> <'\ttest_cmp_rev refs/repo_d/eggs HEAD &&\n'> 
          <'\ttest_branch_upstream eggs repo_d eggs\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'checkout of branch with a file having the same name fails'>)} 
      {
        (SQ <'\n'> <'\tgit checkout -B master &&\n'> <'\ttest_might_fail git branch -D spam &&\n'> 
          <'\n'> <'\t>spam &&\n'> <'\ttest_must_fail git checkout spam &&\n'> 
          <'\ttest_must_fail git rev-parse --verify refs/heads/spam &&\n'> <'\ttest_branch master\n'>
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ <'checkout of branch with a file in subdir having the same name fails'>)} 
      {
        (SQ <'\n'> <'\tgit checkout -B master &&\n'> <'\ttest_might_fail git branch -D spam &&\n'> 
          <'\n'> <'\t>spam &&\n'> <'\tmkdir sub &&\n'> <'\tmv spam sub/spam &&\n'> 
          <'\ttest_must_fail git -C sub checkout spam &&\n'> <'\ttest_must_fail git rev-parse --verify refs/heads/spam &&\n'> <'\ttest_branch master\n'>
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ <'checkout <branch> -- succeeds, even if a file with the same name exists'>)} 
      {
        (SQ <'\n'> <'\tgit checkout -B master &&\n'> <'\ttest_might_fail git branch -D spam &&\n'> 
          <'\n'> <'\t>spam &&\n'> <'\tgit checkout spam -- &&\n'> <'\ttest_branch spam &&\n'> 
          <'\ttest_cmp_rev refs/remotes/extra_dir/repo_c/extra_dir/spam HEAD &&\n'> <'\ttest_branch_upstream spam repo_c spam\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'loosely defined local base branch is reported correctly'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit checkout master &&\n'> <'\tgit branch strict &&\n'> 
          <'\tgit branch loose &&\n'> <'\tgit commit --allow-empty -m "a bit more" &&\n'> <'\n'> 
          <'\ttest_config branch.strict.remote . &&\n'> <'\ttest_config branch.loose.remote . &&\n'> 
          <'\ttest_config branch.strict.merge refs/heads/master &&\n'> <'\ttest_config branch.loose.merge master &&\n'> <'\n'> 
          <'\tgit checkout strict | sed -e "s/strict/BRANCHNAME/g" >expect &&\n'> <'\tgit checkout loose | sed -e "s/loose/BRANCHNAME/g" >actual &&\n'> <'\n'> 
          <'\ttest_cmp expect actual\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)