(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:'TREESAME and limiting' span_id:39))}
          spids: [37]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShFunction
      name: note
      body: (command.BraceGroup children:[(C {(git)} {(tag)} {(DQ ($ Id.VSub_Number '$1'))})])
    )
    (command.ShFunction
      name: unnote
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(git)} {(name-rev)} {(--tags)} {(--stdin)})
                (C {(sed)} {(-e)} 
                  {
                    (DQ ('s|') ($ Id.VSub_DollarName '$_x40') (' (tags/') (Id.Lit_Other '\\') ('([^)]*') 
                      (Id.Lit_Other '\\') ('))') (Id.Lit_Other '\\') ('([ \t]') (Id.Lit_Other '\\') (')|') (Id.Lit_Other '\\') (1) (Id.Lit_Other '\\') 
                      ('2|g')
                    )
                  }
                )
              ]
              negated: F
            )
          ]
        )
    )
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:115) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_commit "Initial file" file "Hi there" A &&\n'
            span_id: 116
          ) (Token id:Id.Lit_Chars val:'\tgit branch other-branch &&\n' span_id:117) 
          (Token id:Id.Lit_Chars val:'\n' span_id:118) (Token id:Id.Lit_Chars val:'\ttest_commit "file=Hello" file "Hello" B &&\n' span_id:119) 
          (Token id:Id.Lit_Chars val:'\tgit branch third-branch &&\n' span_id:120) (Token id:Id.Lit_Chars val:'\n' span_id:121) 
          (Token id:Id.Lit_Chars val:'\tgit checkout other-branch &&\n' span_id:122) (Token id:Id.Lit_Chars val:'\ttest_commit "Added other" other "Hello" C &&\n' span_id:123) 
          (Token id:Id.Lit_Chars val:'\n' span_id:124) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:125) 
          (Token id:Id.Lit_Chars val:'\ttest_merge D other-branch &&\n' span_id:126) (Token id:Id.Lit_Chars val:'\n' span_id:127) 
          (Token id:Id.Lit_Chars val:'\tgit checkout third-branch &&\n' span_id:128) (Token id:Id.Lit_Chars val:'\ttest_commit "Third file" third "Nothing" E &&\n' span_id:129) 
          (Token id:Id.Lit_Chars val:'\n' span_id:130) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:131) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_commit "file=Blah" file "Blah" F &&\n'
            span_id: 132
          ) (Token id:Id.Lit_Chars val:'\n' span_id:133) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_tick && git merge --no-commit third-branch &&\n'
            span_id: 134
          ) (Token id:Id.Lit_Chars val:'\tgit checkout third-branch file &&\n' span_id:135) 
          (Token id:Id.Lit_Chars val:'\tgit commit &&\n' span_id:136) (Token id:Id.Lit_Chars val:'\tnote G &&\n' span_id:137) 
          (Token id:Id.Lit_Chars val:'\tgit branch fiddler-branch &&\n' span_id:138) (Token id:Id.Lit_Chars val:'\n' span_id:139) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b part2-branch &&\n' span_id:140) (Token id:Id.Lit_Chars val:'\ttest_commit "file=Part 2" file "Part 2" H &&\n' span_id:141) 
          (Token id:Id.Lit_Chars val:'\n' span_id:142) (Token id:Id.Lit_Chars val:'\tgit checkout fiddler-branch &&\n' span_id:143) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_commit "Bad commit" file "Silly" I &&\n'
            span_id: 144
          ) (Token id:Id.Lit_Chars val:'\n' span_id:145) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_tick && git revert I && note J &&\n'
            span_id: 146
          ) (Token id:Id.Lit_Chars val:'\n' span_id:147) 
          (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:148) (Token id:Id.Lit_Chars val:'\ttest_tick && git merge --no-ff fiddler-branch &&\n' span_id:149) 
          (Token id:Id.Lit_Chars val:'\tnote K &&\n' span_id:150) (Token id:Id.Lit_Chars val:'\n' span_id:151) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_commit "file=Part 1" file "Part 1" L &&\n'
            span_id: 152
          ) (Token id:Id.Lit_Chars val:'\n' span_id:153) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_tick && test_must_fail git merge part2-branch &&\n'
            span_id: 154
          ) (Token id:Id.Lit_Chars val:'\ttest_commit M file "Parts 1+2"\n' span_id:155)
        )
      }
    )
    (command.ShFunction
      name: check_outcome
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:outcome)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Number '$1')}
                  spids: [167]
                )
              ]
            )
            (C {(shift)})
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Case
                  to_match: {(DQ ($ Id.VSub_Number '$1'))}
                  arms: [
                    (case_arm
                      pat_list: [{(Id.Lit_Star '*') (DQ ('(')) (Id.Lit_Star '*')}]
                      action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:FMT)
                              op: assign_op.Equal
                              rhs: {(DQ ('%P\t%H | %s'))}
                              spids: [192]
                            )
                          ]
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:munge_actual)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ ('\n') ('\t\t\ts/^') (Id.Lit_Other '\\') ('([^\t]*') 
                                    (Id.Lit_Other '\\') (')\t') (Id.Lit_Other '\\') ('([^ ]*') (Id.Lit_Other '\\') (') .*/(') (Id.Lit_Other '\\') ('1)') 
                                    (Id.Lit_Other '\\') ('2/\n') ('\t\t\ts/ //g\n') ('\t\t\ts/()//\n') ('\t\t')
                                  )
                                }
                              spids: [198]
                            )
                          ]
                        )
                      ]
                      spids: [184 189 220 -1]
                    )
                    (case_arm
                      pat_list: [{(Id.Lit_Star '*')}]
                      action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:FMT)
                              op: assign_op.Equal
                              rhs: {(DQ ('%H | %s'))}
                              spids: [227]
                            )
                          ]
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:munge_actual)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ ('s/^') (Id.Lit_Other '\\') ('([^ ]*') (Id.Lit_Other '\\') 
                                    (') .*/') (Id.Lit_Other '\\') (1/)
                                  )
                                }
                              spids: [233]
                            )
                          ]
                        )
                      ]
                      spids: [223 224 245 -1]
                    )
                  ]
                )
                (command.Simple
                  words: [{(printf)} {(DQ ('%s') (Id.Lit_Other '\\') (n))} {($ Id.VSub_Number '$1')}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:263)
                      fd: -1
                      arg_word: {(expect)}
                    )
                  ]
                )
                (C {(shift)})
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:param)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_Star '$*'))}
                      spids: [273]
                    )
                  ]
                )
                (C {(test_expect_) ($ Id.VSub_DollarName '$outcome')} 
                  {(DQ ('log ') ($ Id.VSub_DollarName '$param'))} 
                  {
                    (SQ (Token id:Id.Lit_Chars val:'\n' span_id:290) 
                      (Token
                        id: Id.Lit_Chars
                        val: '\t\tgit log --format="$FMT" $param |\n'
                        span_id: 291
                      ) (Token id:Id.Lit_Chars val:'\t\tunnote >actual &&\n' span_id:292) 
                      (Token
                        id: Id.Lit_Chars
                        val: '\t\tsed -e "$munge_actual" <actual >check &&\n'
                        span_id: 293
                      ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect check\n' span_id:294) 
                      (Token id:Id.Lit_Chars val:'\t' span_id:295)
                    )
                  }
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: check_result
      body: 
        (command.BraceGroup
          children: [(C {(check_outcome)} {(success)} {(DQ ($ Id.VSub_At '$@'))})]
        )
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L K J I H G F E D C B A' span_id:341))})
    (C {(check_result)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '(LH)M (K)L (GJ)K (I)J (G)I (G)H (FE)G (D)F (B)E (BC)D (A)C (A)B A'
            span_id: 347
          )
        )
      }
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M H L K J I G E F D C B A' span_id:353))} 
      {(--topo-order)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L H B A' span_id:361))} {(--)} {(file)})
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(LH)M (B)L (B)H (A)B A' span_id:371))} 
      {(--parents)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L J I H G F D B A' span_id:383))} 
      {(--full-history)} {(--)} {(file)}
    )
    (C {(check_result)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '(LH)M (K)L (GJ)K (I)J (G)I (G)H (FB)G (D)F (BA)D (A)B A'
            span_id: 395
          )
        )
      } {(--full-history)} {(--parents)} {(--)} {(file)}
    )
    (C {(check_result)} 
      {(SQ (Token id:Id.Lit_Chars val:'(LH)M (G)H (J)L (I)J (G)I (FB)G (B)F (A)B A' span_id:409))} {(--simplify-merges)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L K G F D B A' span_id:421))} 
      {(--first-parent)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L G F B A' span_id:429))} {(--first-parent)} 
      {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L K J I H G E' span_id:445))} {(F..M)})
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M H L K J I G E' span_id:453))} {(F..M)} 
      {(--topo-order)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L H' span_id:463))} {(F..M)} {(--)} {(file)})
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(LH)M (B)L (B)H' span_id:475))} {(--parents)} 
      {(F..M)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L J I H G' span_id:489))} {(F..M)} 
      {(--full-history)} {(--)} {(file)}
    )
    (C {(check_result)} 
      {(SQ (Token id:Id.Lit_Chars val:'(LH)M (K)L (GJ)K (I)J (G)I (G)H (FB)G' span_id:503))} {(F..M)} {(--full-history)} {(--parents)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(LH)M (G)H (J)L (I)J (G)I (FB)G' span_id:519))} 
      {(F..M)} {(--simplify-merges)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L K J I H G' span_id:533))} {(F..M)} 
      {(--ancestry-path)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L J I H G' span_id:543))} {(F..M)} 
      {(--ancestry-path)} {(--)} {(file)}
    )
    (C {(check_result)} 
      {(SQ (Token id:Id.Lit_Chars val:'(LH)M (K)L (GJ)K (I)J (G)I (G)H (FE)G' span_id:557))} {(F..M)} {(--ancestry-path)} {(--parents)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(LH)M (G)H (J)L (I)J (G)I (FE)G' span_id:573))} 
      {(F..M)} {(--ancestry-path)} {(--simplify-merges)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L K G' span_id:589))} {(F..M)} 
      {(--first-parent)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L G' span_id:599))} {(F..M)} 
      {(--first-parent)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L K J I H G' span_id:620))} {(E..M)} 
      {(--ancestry-path)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L J I H' span_id:630))} {(E..M)} 
      {(--ancestry-path)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(LH)M (K)L (EJ)K (I)J (E)I (E)H' span_id:644))} 
      {(E..M)} {(--ancestry-path)} {(--parents)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(LH)M (E)H (J)L (I)J (E)I' span_id:660))} 
      {(E..M)} {(--ancestry-path)} {(--simplify-merges)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L K J I H' span_id:683))} {(G..M)})
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M H L K J I' span_id:691))} {(G..M)} 
      {(--topo-order)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L H' span_id:701))} {(G..M)} {(--)} {(file)})
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(LH)M (G)L (G)H' span_id:713))} {(G..M)} 
      {(--parents)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L J I H' span_id:727))} {(G..M)} 
      {(--full-history)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L K J I H' span_id:741))} {(G..M)} 
      {(--full-history)} {(--parents)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M H L J I' span_id:757))} {(G..M)} 
      {(--simplify-merges)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L K J I H' span_id:771))} {(G..M)} 
      {(--ancestry-path)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L J I H' span_id:781))} {(G..M)} 
      {(--ancestry-path)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L K J I H' span_id:795))} {(G..M)} 
      {(--ancestry-path)} {(--parents)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M H L J I' span_id:811))} {(G..M)} 
      {(--ancestry-path)} {(--simplify-merges)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F D C' span_id:840))} {(B..F)})
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:F span_id:848))} {(B..F)} {(--)} {(file)})
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(B)F' span_id:860))} {(B..F)} {(--parents)} 
      {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F D' span_id:874))} {(B..F)} {(--full-history)} 
      {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(D)F (BA)D' span_id:888))} {(B..F)} 
      {(--full-history)} {(--parents)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(B)F' span_id:904))} {(B..F)} 
      {(--simplify-merges)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F D' span_id:918))} {(B..F)} {(--ancestry-path)})
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:F span_id:928))} {(B..F)} {(--ancestry-path)} 
      {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:F span_id:942))} {(B..F)} {(--ancestry-path)} 
      {(--parents)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:F span_id:958))} {(B..F)} {(--ancestry-path)} 
      {(--simplify-merges)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F D' span_id:974))} {(B..F)} {(--first-parent)})
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:F span_id:984))} {(B..F)} {(--first-parent)} 
      {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:F span_id:1002))} {(E)} {(F)} 
      {(Id.Lit_Other '^') (B)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:F span_id:1022))} {(E...F)} {(--)} {(file)})
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F D B' span_id:1044))} {(C..F)})
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F B' span_id:1052))} {(C..F)} {(--)} {(file)})
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(B)F (A)B' span_id:1064))} {(C..F)} 
      {(--parents)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F D B' span_id:1078))} {(C..F)} 
      {(--full-history)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(D)F (BC)D (A)B' span_id:1092))} {(C..F)} 
      {(--full-history)} {(--parents)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(D)F (BC)D (A)B' span_id:1108))} {(C..F)} 
      {(--simplify-merges)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F D' span_id:1122))} {(C..F)} 
      {(--ancestry-path)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F D' span_id:1132))} {(C..F)} 
      {(--ancestry-path)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F D' span_id:1146))} {(C..F)} 
      {(--ancestry-path)} {(--parents)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F D' span_id:1162))} {(C..F)} 
      {(--ancestry-path)} {(--simplify-merges)} {(--)} {(file)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F D B' span_id:1178))} {(C..F)} 
      {(--first-parent)}
    )
    (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F B' span_id:1188))} {(C..F)} {(--first-parent)} 
      {(--)} {(file)}
    )
    (C {(test_done)})
  ]
)