(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:'diff order' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShFunction
      name: create_files
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp 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:29)
                      fd: -1
                      arg_word: {(a.h)}
                    )
                  ]
                )
                (command.Simple
                  words: [{(echo)} {(DQ ($ Id.VSub_Number '$1'))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:41)
                      fd: -1
                      arg_word: {(b.c)}
                    )
                  ]
                )
                (command.Simple
                  words: [{(echo)} {(DQ ($ Id.VSub_Number '$1'))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:53)
                      fd: -1
                      arg_word: {(c/Makefile)}
                    )
                  ]
                )
                (command.Simple
                  words: [{(echo)} {(DQ ($ Id.VSub_Number '$1'))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:65)
                      fd: -1
                      arg_word: {(d.txt)}
                    )
                  ]
                )
                (C {(git)} {(add)} {(a.h)} {(b.c)} {(c/Makefile)} {(d.txt)})
                (C {(git)} {(commit)} {(-m) (DQ ($ Id.VSub_Number '$1'))})
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:101))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:105) 
          (Token id:Id.Lit_Chars val:'\tmkdir c &&\n' span_id:106) (Token id:Id.Lit_Chars val:'\tcreate_files 1 &&\n' span_id:107) 
          (Token id:Id.Lit_Chars val:'\tcreate_files 2 &&\n' span_id:108) (Token id:Id.Lit_Chars val:'\n' span_id:109) 
          (Token id:Id.Lit_Chars val:'\tcat >order_file_1 <<-\\EOF &&\n' span_id:110) (Token id:Id.Lit_Chars val:'\t*Makefile\n' span_id:111) 
          (Token id:Id.Lit_Chars val:'\t*.txt\n' span_id:112) (Token id:Id.Lit_Chars val:'\t*.h\n' span_id:113) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:114) 
          (Token id:Id.Lit_Chars val:'\n' span_id:115) (Token id:Id.Lit_Chars val:'\tcat >order_file_2 <<-\\EOF &&\n' span_id:116) 
          (Token id:Id.Lit_Chars val:'\t*Makefile\n' span_id:117) (Token id:Id.Lit_Chars val:'\t*.h\n' span_id:118) (Token id:Id.Lit_Chars val:'\t*.c\n' span_id:119) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:120) (Token id:Id.Lit_Chars val:'\n' span_id:121) 
          (Token id:Id.Lit_Chars val:'\tcat >expect_none <<-\\EOF &&\n' span_id:122) (Token id:Id.Lit_Chars val:'\ta.h\n' span_id:123) (Token id:Id.Lit_Chars val:'\tb.c\n' span_id:124) 
          (Token id:Id.Lit_Chars val:'\tc/Makefile\n' span_id:125) (Token id:Id.Lit_Chars val:'\td.txt\n' span_id:126) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:127) 
          (Token id:Id.Lit_Chars val:'\n' span_id:128) (Token id:Id.Lit_Chars val:'\tcat >expect_1 <<-\\EOF &&\n' span_id:129) 
          (Token id:Id.Lit_Chars val:'\tc/Makefile\n' span_id:130) (Token id:Id.Lit_Chars val:'\td.txt\n' span_id:131) (Token id:Id.Lit_Chars val:'\ta.h\n' span_id:132) 
          (Token id:Id.Lit_Chars val:'\tb.c\n' span_id:133) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:134) (Token id:Id.Lit_Chars val:'\n' span_id:135) 
          (Token id:Id.Lit_Chars val:'\tcat >expect_2 <<-\\EOF\n' span_id:136) (Token id:Id.Lit_Chars val:'\tc/Makefile\n' span_id:137) 
          (Token id:Id.Lit_Chars val:'\ta.h\n' span_id:138) (Token id:Id.Lit_Chars val:'\tb.c\n' span_id:139) (Token id:Id.Lit_Chars val:'\td.txt\n' span_id:140) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:141)
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('no order (=tree object order)'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:152) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --name-only HEAD^..HEAD >actual &&\n'
            span_id: 153
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect_none actual\n' span_id:154)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'missing orderfile' span_id:161))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:165) 
          (Token id:Id.Lit_Chars val:'\trm -f bogus_file &&\n' span_id:166) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git diff -Obogus_file --name-only HEAD^..HEAD\n'
            span_id: 167
          )
        )
      }
    )
    (C {(test_expect_success)} {(POSIXPERM) (Id.Lit_Comma ',') (SANITY)} 
      {(SQ (Token id:Id.Lit_Chars val:'unreadable orderfile' span_id:178))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:182) 
          (Token id:Id.Lit_Chars val:'\t>unreadable_file &&\n' span_id:183) (Token id:Id.Lit_Chars val:'\tchmod -r unreadable_file &&\n' span_id:184) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git diff -Ounreadable_file --name-only HEAD^..HEAD\n'
            span_id: 185
          )
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('orderfile using option from subdir with --output'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:196) 
          (Token id:Id.Lit_Chars val:'\tmkdir subdir &&\n' span_id:197) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit -C subdir diff -O../order_file_1 --output ../actual --name-only HEAD^..HEAD &&\n'
            span_id: 198
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect_1 actual\n' span_id:199)
        )
      }
    )
    (command.ForEach
      iter_name: i
      iter_words: [{(1)} {(2)}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {(test_expect_success)} 
              {(DQ ('orderfile using option (') ($ Id.VSub_DollarName '$i') (')'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:225) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit diff -Oorder_file_$i --name-only HEAD^..HEAD >actual &&\n'
                    span_id: 226
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect_$i actual\n' span_id:227) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:228)
                )
              }
            )
            (C {(test_expect_success)} {(PIPE)} 
              {(DQ ('orderfile is fifo (') ($ Id.VSub_DollarName '$i') (')'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:244) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\trm -f order_fifo &&\n'
                    span_id: 245
                  ) (Token id:Id.Lit_Chars val:'\t\tmkfifo order_fifo &&\n' span_id:246) 
                  (Token id:Id.Lit_Chars val:'\t\t{\n' span_id:247) (Token id:Id.Lit_Chars val:'\t\t\tcat order_file_$i >order_fifo &\n' span_id:248) 
                  (Token id:Id.Lit_Chars val:'\t\t} &&\n' span_id:249) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit diff -O order_fifo --name-only HEAD^..HEAD >actual &&\n'
                    span_id: 250
                  ) (Token id:Id.Lit_Chars val:'\t\twait &&\n' span_id:251) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest_cmp expect_$i actual\n'
                    span_id: 252
                  ) (Token id:Id.Lit_Chars val:'\t' span_id:253)
                )
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('orderfile using config (') ($ Id.VSub_DollarName '$i') (')'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:267) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\t\tgit -c diff.orderfile=order_file_$i diff --name-only HEAD^..HEAD >actual &&\n'
                    span_id: 268
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect_$i actual\n' span_id:269) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:270)
                )
              }
            )
            (C {(test_expect_success)} 
              {(DQ ('cancelling configured orderfile (') ($ Id.VSub_DollarName '$i') (')'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:284) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'\t\tgit -c diff.orderfile=order_file_$i diff -O/dev/null --name-only HEAD^..HEAD >actual &&\n'
                    span_id: 285
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect_none actual\n' span_id:286) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:287)
                )
              }
            )
          ]
        )
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'setup for testing combine-diff order' span_id:296))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:300) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b tmp HEAD~ &&\n' span_id:301) (Token id:Id.Lit_Chars val:'\tcreate_files 3 &&\n' span_id:302) 
          (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:303) (Token id:Id.Lit_Chars val:'\tgit merge --no-commit -s ours tmp &&\n' span_id:304) 
          (Token id:Id.Lit_Chars val:'\tcreate_files 5\n' span_id:305)
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('combine-diff: no order (=tree object order)'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:316) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --name-only HEAD HEAD^ HEAD^2 >actual &&\n'
            span_id: 317
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect_none actual\n' span_id:318)
        )
      }
    )
    (command.ForEach
      iter_name: i
      iter_words: [{(1)} {(2)}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {(test_expect_success)} 
              {(DQ ('combine-diff: orderfile using option (') ($ Id.VSub_DollarName '$i') (')'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:344) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\tgit diff -Oorder_file_$i --name-only HEAD HEAD^ HEAD^2 >actual &&\n'
                    span_id: 345
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect_$i actual\n' span_id:346) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:347)
                )
              }
            )
          ]
        )
    )
    (C {(test_done)})
  ]
)