(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: 'basic git merge-index / git-merge-one-file tests'
                  span_id: 6
                )
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup diverging branches' span_id:17))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:21) 
          (Token id:Id.Lit_Chars val:'\tfor i in 1 2 3 4 5 6 7 8 9 10; do\n' span_id:22) (Token id:Id.Lit_Chars val:'\t\techo $i\n' span_id:23) 
          (Token id:Id.Lit_Chars val:'\tdone >file &&\n' span_id:24) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:25) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m base &&\n' span_id:26) (Token id:Id.Lit_Chars val:'\tgit tag base &&\n' span_id:27) 
          (Token id:Id.Lit_Chars val:'\tsed s/2/two/ <file >tmp &&\n' span_id:28) (Token id:Id.Lit_Chars val:'\tmv tmp file &&\n' span_id:29) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m two &&\n' span_id:30) (Token id:Id.Lit_Chars val:'\tgit tag two &&\n' span_id:31) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b other HEAD^ &&\n' span_id:32) (Token id:Id.Lit_Chars val:'\tsed s/10/ten/ <file >tmp &&\n' span_id:33) 
          (Token id:Id.Lit_Chars val:'\tmv tmp file &&\n' span_id:34) (Token id:Id.Lit_Chars val:'\tgit commit -a -m ten &&\n' span_id:35) 
          (Token id:Id.Lit_Chars val:'\tgit tag ten\n' span_id:36)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:42)
          fd: -1
          arg_word: {(expect-merged)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:45)
          fd: -1
          here_begin: {(SQ (Token id:Id.Lit_Chars val:EOF span_id:47))}
          here_end_span_id: 60
          stdin_parts: [('1\n') ('two\n') ('3\n') ('4\n') ('5\n') ('6\n') ('7\n') ('8\n') ('9\n') ('ten\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'read-tree does not resolve content merge' span_id:65))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:69) 
          (Token id:Id.Lit_Chars val:'\tgit read-tree -i -m base ten two &&\n' span_id:70) (Token id:Id.Lit_Chars val:'\techo file >expect &&\n' span_id:71) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff-files --name-only --diff-filter=U >unmerged &&\n'
            span_id: 72
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect unmerged\n' span_id:73)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git merge-index git-merge-one-file resolves' span_id:80))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:84) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit merge-index git-merge-one-file -a &&\n'
            span_id: 85
          ) (Token id:Id.Lit_Chars val:'\tgit diff-files --name-only --diff-filter=U >unmerged &&\n' span_id:86) 
          (Token id:Id.Lit_Chars val:'\t>expect &&\n' span_id:87) (Token id:Id.Lit_Chars val:'\ttest_cmp expect unmerged &&\n' span_id:88) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect-merged file &&\n' span_id:89) (Token id:Id.Lit_Chars val:'\tgit cat-file blob :file >file-index &&\n' span_id:90) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect-merged file-index\n' span_id:91)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup bare merge' span_id:98))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:102) 
          (Token id:Id.Lit_Chars val:'\tgit clone --bare . bare.git &&\n' span_id:103) (Token id:Id.Lit_Chars val:'\t(cd bare.git &&\n' span_id:104) 
          (Token id:Id.Lit_Chars val:'\t GIT_INDEX_FILE=$PWD/merge.index &&\n' span_id:105) (Token id:Id.Lit_Chars val:'\t export GIT_INDEX_FILE &&\n' span_id:106) 
          (Token id:Id.Lit_Chars val:'\t git read-tree -i -m base ten two\n' span_id:107) (Token id:Id.Lit_Chars val:'\t)\n' span_id:108)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge-one-file fails without a work tree' span_id:115))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:119) 
          (Token id:Id.Lit_Chars val:'\t(cd bare.git &&\n' span_id:120) (Token id:Id.Lit_Chars val:'\t GIT_INDEX_FILE=$PWD/merge.index &&\n' span_id:121) 
          (Token id:Id.Lit_Chars val:'\t export GIT_INDEX_FILE &&\n' span_id:122) (Token id:Id.Lit_Chars val:'\t test_must_fail git merge-index git-merge-one-file -a\n' span_id:123) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:124)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge-one-file respects GIT_WORK_TREE' span_id:131))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:135) 
          (Token id:Id.Lit_Chars val:'\t(cd bare.git &&\n' span_id:136) (Token id:Id.Lit_Chars val:'\t mkdir work &&\n' span_id:137) 
          (Token id:Id.Lit_Chars val:'\t GIT_WORK_TREE=$PWD/work &&\n' span_id:138) (Token id:Id.Lit_Chars val:'\t export GIT_WORK_TREE &&\n' span_id:139) 
          (Token id:Id.Lit_Chars val:'\t GIT_INDEX_FILE=$PWD/merge.index &&\n' span_id:140) (Token id:Id.Lit_Chars val:'\t export GIT_INDEX_FILE &&\n' span_id:141) 
          (Token
            id: Id.Lit_Chars
            val: '\t git merge-index git-merge-one-file -a &&\n'
            span_id: 142
          ) (Token id:Id.Lit_Chars val:'\t git cat-file blob :file >work/file-index\n' span_id:143) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:144) (Token id:Id.Lit_Chars val:'\ttest_cmp expect-merged bare.git/work/file &&\n' span_id:145) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp expect-merged bare.git/work/file-index\n'
            span_id: 146
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge-one-file respects core.worktree' span_id:153))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:157) 
          (Token id:Id.Lit_Chars val:'\tmkdir subdir &&\n' span_id:158) (Token id:Id.Lit_Chars val:'\tgit clone . subdir/child &&\n' span_id:159) 
          (Token id:Id.Lit_Chars val:'\t(cd subdir &&\n' span_id:160) (Token id:Id.Lit_Chars val:'\t GIT_DIR=$PWD/child/.git &&\n' span_id:161) 
          (Token id:Id.Lit_Chars val:'\t export GIT_DIR &&\n' span_id:162) (Token id:Id.Lit_Chars val:'\t git config core.worktree "$PWD/child" &&\n' span_id:163) 
          (Token
            id: Id.Lit_Chars
            val: '\t git read-tree -i -m base ten two &&\n'
            span_id: 164
          ) (Token id:Id.Lit_Chars val:'\t git merge-index git-merge-one-file -a &&\n' span_id:165) 
          (Token
            id: Id.Lit_Chars
            val: '\t git cat-file blob :file >file-index\n'
            span_id: 166
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:167) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp expect-merged subdir/child/file &&\n'
            span_id: 168
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect-merged subdir/file-index\n' span_id:169)
        )
      }
    )
    (C {(test_done)})
  ]
)