(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:'Merge base and parent list computation.\n' span_id:15))}
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:M)
          op: assign_op.Equal
          rhs: {(1130000000)}
          spids: [24]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:Z)
          op: assign_op.Equal
          rhs: {(Id.Lit_Other '+') (0000)}
          spids: [27]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_COMMITTER_EMAIL)
          op: assign_op.Equal
          rhs: {(git) (Id.Lit_Splice '@comm') (.iter.xz)}
          spids: [32]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_COMMITTER_NAME)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'C O Mmiter' span_id:39))}
          spids: [37]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_AUTHOR_NAME)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:'A U Thor' span_id:44))}
          spids: [42]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_AUTHOR_EMAIL)
          op: assign_op.Equal
          rhs: {(git) (Id.Lit_Splice '@au') (.thor.xz)}
          spids: [47]
        )
      ]
    )
    (C {(export)} {(GIT_COMMITTER_EMAIL)} {(GIT_COMMITTER_NAME)} {(GIT_AUTHOR_NAME)} {(GIT_AUTHOR_EMAIL)})
    (command.ShFunction
      name: doit
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
                Id.Op_DAmp
              ]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:OFFSET)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$1')}
                      spids: [71]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:NAME)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_Number '$2')}
                      spids: [77]
                    )
                  ]
                )
                (C {(shift)} {(2)})
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:PARENTS)
                      op: assign_op.Equal
                      rhs: (word.Empty)
                      spids: [91]
                    )
                  ]
                )
                (command.ForEach
                  iter_name: P
                  do_arg_iter: T
                  body: 
                    (command.DoGroup
                      children: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:PARENTS)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ (${ Id.VSub_Name PARENTS) ('-p ') ($ Id.VSub_DollarName '$P') 
                                    (' ')
                                  )
                                }
                              spids: [104]
                            )
                          ]
                        )
                      ]
                    )
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:GIT_COMMITTER_DATE)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ 
                            (word_part.ArithSub
                              anode: 
                                (arith_expr.Binary
                                  op_id: Id.Arith_Plus
                                  left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$M')})
                                  right: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$OFFSET')})
                                )
                            ) (' ') ($ Id.VSub_DollarName '$Z')
                          )
                        }
                      spids: [121]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:GIT_AUTHOR_DATE)
                      op: assign_op.Equal
                      rhs: {($ Id.VSub_DollarName '$GIT_COMMITTER_DATE')}
                      spids: [138]
                    )
                  ]
                )
                (C {(export)} {(GIT_COMMITTER_DATE)} {(GIT_AUTHOR_DATE)})
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:commit)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:155)
                            command_list: 
                              (command.CommandList
                                children: [
                                  (command.Pipeline
                                    children: [
                                      (C {(echo)} {($ Id.VSub_DollarName '$NAME')})
                                      (C {(git)} {(commit-tree)} {($ Id.VSub_DollarName '$T')} 
                                        {($ Id.VSub_DollarName '$PARENTS')}
                                      )
                                    ]
                                    negated: F
                                  )
                                ]
                              )
                          )
                        }
                      spids: [154]
                    )
                  ]
                )
                (command.Simple
                  words: [{(echo)} {($ Id.VSub_DollarName '$commit')}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:179)
                      fd: -1
                      arg_word: {(.git/refs/tags/) ($ Id.VSub_DollarName '$NAME')}
                    )
                  ]
                )
                (C {(echo)} {($ Id.VSub_DollarName '$commit')})
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:196))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:200) 
          (Token id:Id.Lit_Chars val:'\tT=$(git mktree </dev/null)\n' span_id:201)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'set up G and H' span_id:208))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:212) 
          (Token id:Id.Lit_Chars val:'\t# E---D---C---B---A\n' span_id:213) (Token id:Id.Lit_Chars val:'\t# \\"-_         \\   \\\n' span_id:214) 
          (Token id:Id.Lit_Chars val:'\t#  \\  `---------G   \\\n' span_id:215) (Token id:Id.Lit_Chars val:'\t#   \\                \\\n' span_id:216) 
          (Token id:Id.Lit_Chars val:'\t#    F----------------H\n' span_id:217) (Token id:Id.Lit_Chars val:'\tE=$(doit 5 E) &&\n' span_id:218) 
          (Token id:Id.Lit_Chars val:'\tD=$(doit 4 D $E) &&\n' span_id:219) (Token id:Id.Lit_Chars val:'\tF=$(doit 6 F $E) &&\n' span_id:220) 
          (Token id:Id.Lit_Chars val:'\tC=$(doit 3 C $D) &&\n' span_id:221) (Token id:Id.Lit_Chars val:'\tB=$(doit 2 B $C) &&\n' span_id:222) 
          (Token id:Id.Lit_Chars val:'\tA=$(doit 1 A $B) &&\n' span_id:223) (Token id:Id.Lit_Chars val:'\tG=$(doit 7 G $B $E) &&\n' span_id:224) 
          (Token id:Id.Lit_Chars val:'\tH=$(doit 8 H $A $F)\n' span_id:225)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge-base G H' span_id:232))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:236) 
          (Token id:Id.Lit_Chars val:'\tgit name-rev $B >expected &&\n' span_id:237) (Token id:Id.Lit_Chars val:'\n' span_id:238) 
          (Token id:Id.Lit_Chars val:'\tMB=$(git merge-base G H) &&\n' span_id:239) (Token id:Id.Lit_Chars val:'\tgit name-rev "$MB" >actual.single &&\n' span_id:240) 
          (Token id:Id.Lit_Chars val:'\n' span_id:241) (Token id:Id.Lit_Chars val:'\tMB=$(git merge-base --all G H) &&\n' span_id:242) 
          (Token id:Id.Lit_Chars val:'\tgit name-rev "$MB" >actual.all &&\n' span_id:243) (Token id:Id.Lit_Chars val:'\n' span_id:244) 
          (Token
            id: Id.Lit_Chars
            val: '\tMB=$(git show-branch --merge-base G H) &&\n'
            span_id: 245
          ) (Token id:Id.Lit_Chars val:'\tgit name-rev "$MB" >actual.sb &&\n' span_id:246) 
          (Token id:Id.Lit_Chars val:'\n' span_id:247) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual.single &&\n' span_id:248) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual.all &&\n' span_id:249) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual.sb\n' span_id:250)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge-base/show-branch --independent' span_id:257))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:261) 
          (Token id:Id.Lit_Chars val:'\tgit name-rev "$H" >expected1 &&\n' span_id:262) (Token id:Id.Lit_Chars val:'\tgit name-rev "$H" "$G" >expected2 &&\n' span_id:263) 
          (Token id:Id.Lit_Chars val:'\n' span_id:264) (Token id:Id.Lit_Chars val:'\tparents=$(git merge-base --independent H) &&\n' span_id:265) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit name-rev $parents >actual1.mb &&\n'
            span_id: 266
          ) (Token id:Id.Lit_Chars val:'\tparents=$(git merge-base --independent A H G) &&\n' span_id:267) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit name-rev $parents >actual2.mb &&\n'
            span_id: 268
          ) (Token id:Id.Lit_Chars val:'\n' span_id:269) 
          (Token
            id: Id.Lit_Chars
            val: '\tparents=$(git show-branch --independent H) &&\n'
            span_id: 270
          ) (Token id:Id.Lit_Chars val:'\tgit name-rev $parents >actual1.sb &&\n' span_id:271) 
          (Token
            id: Id.Lit_Chars
            val: '\tparents=$(git show-branch --independent A H G) &&\n'
            span_id: 272
          ) (Token id:Id.Lit_Chars val:'\tgit name-rev $parents >actual2.sb &&\n' span_id:273) 
          (Token id:Id.Lit_Chars val:'\n' span_id:274) (Token id:Id.Lit_Chars val:'\ttest_cmp expected1 actual1.mb &&\n' span_id:275) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected2 actual2.mb &&\n' span_id:276) (Token id:Id.Lit_Chars val:'\ttest_cmp expected1 actual1.sb &&\n' span_id:277) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected2 actual2.sb\n' span_id:278)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'unsynchronized clocks' span_id:285))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:289) 
          (Token
            id: Id.Lit_Chars
            val: '\t# This test is to demonstrate that relying on timestamps in a distributed\n'
            span_id: 290
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t# SCM to provide a _consistent_ partial ordering of commits leads to\n'
            span_id: 291
          ) (Token id:Id.Lit_Chars val:'\t# insanity.\n' span_id:292) 
          (Token id:Id.Lit_Chars val:'\t#\n' span_id:293) (Token id:Id.Lit_Chars val:'\t#               Relative\n' span_id:294) 
          (Token id:Id.Lit_Chars val:'\t# Structure     timestamps\n' span_id:295) (Token id:Id.Lit_Chars val:'\t#\n' span_id:296) 
          (Token id:Id.Lit_Chars val:'\t#   PL  PR        +4  +4\n' span_id:297) (Token id:Id.Lit_Chars val:'\t#  /  \\/  \\      /  \\/  \\\n' span_id:298) 
          (Token id:Id.Lit_Chars val:'\t# L2  C2  R2    +3  -1  +3\n' span_id:299) (Token id:Id.Lit_Chars val:'\t# |   |   |     |   |   |\n' span_id:300) 
          (Token id:Id.Lit_Chars val:'\t# L1  C1  R1    +2  -2  +2\n' span_id:301) (Token id:Id.Lit_Chars val:'\t# |   |   |     |   |   |\n' span_id:302) 
          (Token id:Id.Lit_Chars val:'\t# L0  C0  R0    +1  -3  +1\n' span_id:303) (Token id:Id.Lit_Chars val:'\t#   \\ |  /        \\ |  /\n' span_id:304) 
          (Token id:Id.Lit_Chars val:'\t#     S             0\n' span_id:305) (Token id:Id.Lit_Chars val:'\t#\n' span_id:306) 
          (Token
            id: Id.Lit_Chars
            val: '\t# The left and right chains of commits can be of any length and complexity as\n'
            span_id: 307
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t# long as all of the timestamps are greater than that of S.\n'
            span_id: 308
          ) (Token id:Id.Lit_Chars val:'\n' span_id:309) 
          (Token id:Id.Lit_Chars val:'\tS=$(doit  0 S) &&\n' span_id:310) (Token id:Id.Lit_Chars val:'\n' span_id:311) 
          (Token id:Id.Lit_Chars val:'\tC0=$(doit -3 C0 $S) &&\n' span_id:312) (Token id:Id.Lit_Chars val:'\tC1=$(doit -2 C1 $C0) &&\n' span_id:313) 
          (Token id:Id.Lit_Chars val:'\tC2=$(doit -1 C2 $C1) &&\n' span_id:314) (Token id:Id.Lit_Chars val:'\n' span_id:315) 
          (Token id:Id.Lit_Chars val:'\tL0=$(doit  1 L0 $S) &&\n' span_id:316) (Token id:Id.Lit_Chars val:'\tL1=$(doit  2 L1 $L0) &&\n' span_id:317) 
          (Token id:Id.Lit_Chars val:'\tL2=$(doit  3 L2 $L1) &&\n' span_id:318) (Token id:Id.Lit_Chars val:'\n' span_id:319) 
          (Token id:Id.Lit_Chars val:'\tR0=$(doit  1 R0 $S) &&\n' span_id:320) (Token id:Id.Lit_Chars val:'\tR1=$(doit  2 R1 $R0) &&\n' span_id:321) 
          (Token id:Id.Lit_Chars val:'\tR2=$(doit  3 R2 $R1) &&\n' span_id:322) (Token id:Id.Lit_Chars val:'\n' span_id:323) 
          (Token id:Id.Lit_Chars val:'\tPL=$(doit  4 PL $L2 $C2) &&\n' span_id:324) (Token id:Id.Lit_Chars val:'\tPR=$(doit  4 PR $C2 $R2) &&\n' span_id:325) 
          (Token id:Id.Lit_Chars val:'\n' span_id:326) (Token id:Id.Lit_Chars val:'\tgit name-rev $C2 >expected &&\n' span_id:327) 
          (Token id:Id.Lit_Chars val:'\n' span_id:328) (Token id:Id.Lit_Chars val:'\tMB=$(git merge-base PL PR) &&\n' span_id:329) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit name-rev "$MB" >actual.single &&\n'
            span_id: 330
          ) (Token id:Id.Lit_Chars val:'\n' span_id:331) 
          (Token id:Id.Lit_Chars val:'\tMB=$(git merge-base --all PL PR) &&\n' span_id:332) (Token id:Id.Lit_Chars val:'\tgit name-rev "$MB" >actual.all &&\n' span_id:333) 
          (Token id:Id.Lit_Chars val:'\n' span_id:334) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual.single &&\n' span_id:335) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual.all\n' span_id:336)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--independent with unsynchronized clocks' span_id:343))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:347) 
          (Token id:Id.Lit_Chars val:'\tIB=$(doit 0 IB) &&\n' span_id:348) (Token id:Id.Lit_Chars val:'\tI1=$(doit -10 I1 $IB) &&\n' span_id:349) 
          (Token id:Id.Lit_Chars val:'\tI2=$(doit  -9 I2 $I1) &&\n' span_id:350) (Token id:Id.Lit_Chars val:'\tI3=$(doit  -8 I3 $I2) &&\n' span_id:351) 
          (Token id:Id.Lit_Chars val:'\tI4=$(doit  -7 I4 $I3) &&\n' span_id:352) (Token id:Id.Lit_Chars val:'\tI5=$(doit  -6 I5 $I4) &&\n' span_id:353) 
          (Token id:Id.Lit_Chars val:'\tI6=$(doit  -5 I6 $I5) &&\n' span_id:354) (Token id:Id.Lit_Chars val:'\tI7=$(doit  -4 I7 $I6) &&\n' span_id:355) 
          (Token id:Id.Lit_Chars val:'\tI8=$(doit  -3 I8 $I7) &&\n' span_id:356) (Token id:Id.Lit_Chars val:'\tIH=$(doit  -2 IH $I8) &&\n' span_id:357) 
          (Token id:Id.Lit_Chars val:'\n' span_id:358) (Token id:Id.Lit_Chars val:'\techo $IH >expected &&\n' span_id:359) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit merge-base --independent IB IH >actual &&\n'
            span_id: 360
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:361)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge-base for octopus-step (setup)' span_id:368))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:372) 
          (Token
            id: Id.Lit_Chars
            val: '\t# Another set to demonstrate base between one commit and a merge\n'
            span_id: 373
          ) (Token id:Id.Lit_Chars val:'\t# in the documentation.\n' span_id:374) 
          (Token id:Id.Lit_Chars val:'\t#\n' span_id:375) (Token id:Id.Lit_Chars val:'\t# * C (MMC) * B (MMB) * A  (MMA)\n' span_id:376) 
          (Token id:Id.Lit_Chars val:'\t# * o       * o       * o\n' span_id:377) (Token id:Id.Lit_Chars val:'\t# * o       * o       * o\n' span_id:378) 
          (Token id:Id.Lit_Chars val:'\t# * o       * o       * o\n' span_id:379) (Token id:Id.Lit_Chars val:'\t# * o       | _______/\n' span_id:380) 
          (Token id:Id.Lit_Chars val:'\t# |         |/\n' span_id:381) (Token id:Id.Lit_Chars val:'\t# |         * 1 (MM1)\n' span_id:382) 
          (Token id:Id.Lit_Chars val:'\t# | _______/\n' span_id:383) (Token id:Id.Lit_Chars val:'\t# |/\n' span_id:384) 
          (Token id:Id.Lit_Chars val:'\t# * root (MMR)\n' span_id:385) (Token id:Id.Lit_Chars val:'\n' span_id:386) 
          (Token id:Id.Lit_Chars val:'\ttest_commit MMR &&\n' span_id:387) (Token id:Id.Lit_Chars val:'\ttest_commit MM1 &&\n' span_id:388) 
          (Token id:Id.Lit_Chars val:'\ttest_commit MM-o &&\n' span_id:389) (Token id:Id.Lit_Chars val:'\ttest_commit MM-p &&\n' span_id:390) 
          (Token id:Id.Lit_Chars val:'\ttest_commit MM-q &&\n' span_id:391) (Token id:Id.Lit_Chars val:'\ttest_commit MMA &&\n' span_id:392) 
          (Token id:Id.Lit_Chars val:'\tgit checkout MM1 &&\n' span_id:393) (Token id:Id.Lit_Chars val:'\ttest_commit MM-r &&\n' span_id:394) 
          (Token id:Id.Lit_Chars val:'\ttest_commit MM-s &&\n' span_id:395) (Token id:Id.Lit_Chars val:'\ttest_commit MM-t &&\n' span_id:396) 
          (Token id:Id.Lit_Chars val:'\ttest_commit MMB &&\n' span_id:397) (Token id:Id.Lit_Chars val:'\tgit checkout MMR &&\n' span_id:398) 
          (Token id:Id.Lit_Chars val:'\ttest_commit MM-u &&\n' span_id:399) (Token id:Id.Lit_Chars val:'\ttest_commit MM-v &&\n' span_id:400) 
          (Token id:Id.Lit_Chars val:'\ttest_commit MM-w &&\n' span_id:401) (Token id:Id.Lit_Chars val:'\ttest_commit MM-x &&\n' span_id:402) 
          (Token id:Id.Lit_Chars val:'\ttest_commit MMC\n' span_id:403)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge-base A B C' span_id:410))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:414) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse --verify MM1 >expected &&\n'
            span_id: 415
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify MMR >expected.sb &&\n' span_id:416) 
          (Token id:Id.Lit_Chars val:'\n' span_id:417) (Token id:Id.Lit_Chars val:'\tgit merge-base --all MMA MMB MMC >actual &&\n' span_id:418) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit merge-base --all --octopus MMA MMB MMC >actual.common &&\n'
            span_id: 419
          ) (Token id:Id.Lit_Chars val:'\tgit show-branch --merge-base MMA MMB MMC >actual.sb &&\n' span_id:420) 
          (Token id:Id.Lit_Chars val:'\n' span_id:421) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual &&\n' span_id:422) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp expected.sb actual.common &&\n'
            span_id: 423
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected.sb actual.sb\n' span_id:424)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'criss-cross merge-base for octopus-step' span_id:431))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:435) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard MMR &&\n' span_id:436) (Token id:Id.Lit_Chars val:'\ttest_commit CC1 &&\n' span_id:437) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard E &&\n' span_id:438) (Token id:Id.Lit_Chars val:'\ttest_commit CC2 &&\n' span_id:439) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:440) 
          (Token
            id: Id.Lit_Chars
            val: '\t# E is a root commit unrelated to MMR root on which CC1 is based\n'
            span_id: 441
          ) (Token id:Id.Lit_Chars val:'\tgit merge -s ours --allow-unrelated-histories CC1 &&\n' span_id:442) 
          (Token id:Id.Lit_Chars val:'\ttest_commit CC-o &&\n' span_id:443) (Token id:Id.Lit_Chars val:'\ttest_commit CCB &&\n' span_id:444) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard CC1 &&\n' span_id:445) 
          (Token
            id: Id.Lit_Chars
            val: '\t# E is a root commit unrelated to MMR root on which CC1 is based\n'
            span_id: 446
          ) (Token id:Id.Lit_Chars val:'\tgit merge -s ours --allow-unrelated-histories CC2 &&\n' span_id:447) 
          (Token id:Id.Lit_Chars val:'\ttest_commit CCA &&\n' span_id:448) (Token id:Id.Lit_Chars val:'\n' span_id:449) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse CC1 CC2 >expected &&\n' span_id:450) (Token id:Id.Lit_Chars val:'\tgit merge-base --all CCB CCA^^ CCA^^2 >actual &&\n' span_id:451) 
          (Token id:Id.Lit_Chars val:'\n' span_id:452) (Token id:Id.Lit_Chars val:'\tsort expected >expected.sorted &&\n' span_id:453) 
          (Token id:Id.Lit_Chars val:'\tsort actual >actual.sorted &&\n' span_id:454) (Token id:Id.Lit_Chars val:'\ttest_cmp expected.sorted actual.sorted\n' span_id:455)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'using reflog to find the fork point' span_id:462))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:466) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:467) (Token id:Id.Lit_Chars val:'\tgit checkout -b base $E &&\n' span_id:468) 
          (Token id:Id.Lit_Chars val:'\n' span_id:469) (Token id:Id.Lit_Chars val:'\t(\n' span_id:470) 
          (Token id:Id.Lit_Chars val:'\t\tfor count in 1 2 3\n' span_id:471) (Token id:Id.Lit_Chars val:'\t\tdo\n' span_id:472) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\tgit commit --allow-empty -m "Base commit #$count" &&\n'
            span_id: 473
          ) (Token id:Id.Lit_Chars val:'\t\t\tgit rev-parse HEAD >expect$count &&\n' span_id:474) 
          (Token id:Id.Lit_Chars val:'\t\t\tgit checkout -B derived &&\n' span_id:475) (Token id:Id.Lit_Chars val:'\t\t\tgit commit --allow-empty -m "Derived #$count" &&\n' span_id:476) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\tgit rev-parse HEAD >derived$count &&\n'
            span_id: 477
          ) (Token id:Id.Lit_Chars val:'\t\t\tgit checkout -B base $E || exit 1\n' span_id:478) 
          (Token id:Id.Lit_Chars val:'\t\tdone\n' span_id:479) (Token id:Id.Lit_Chars val:'\n' span_id:480) 
          (Token id:Id.Lit_Chars val:'\t\tfor count in 1 2 3\n' span_id:481) (Token id:Id.Lit_Chars val:'\t\tdo\n' span_id:482) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\tgit merge-base --fork-point base $(cat derived$count) >actual &&\n'
            span_id: 483
          ) (Token id:Id.Lit_Chars val:'\t\t\ttest_cmp expect$count actual || exit 1\n' span_id:484) 
          (Token id:Id.Lit_Chars val:'\t\tdone\n' span_id:485) (Token id:Id.Lit_Chars val:'\n' span_id:486) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:487) 
          (Token
            id: Id.Lit_Chars
            val: '\t# check that we correctly default to HEAD\n'
            span_id: 488
          ) (Token id:Id.Lit_Chars val:'\tgit checkout derived &&\n' span_id:489) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit merge-base --fork-point base >actual &&\n'
            span_id: 490
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect3 actual\n' span_id:491)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--fork-point works with empty reflog' span_id:498))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:502) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -c core.logallrefupdates=false branch no-reflog base &&\n'
            span_id: 503
          ) (Token id:Id.Lit_Chars val:'\tgit merge-base --fork-point no-reflog derived &&\n' span_id:504) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect3 actual\n' span_id:505)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge-base --octopus --all for complex tree' span_id:512))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:516) 
          (Token
            id: Id.Lit_Chars
            val: '\t# Best common ancestor for JE, JAA and JDD is JC\n'
            span_id: 517
          ) (Token id:Id.Lit_Chars val:'\t#             JE\n' span_id:518) 
          (Token id:Id.Lit_Chars val:'\t#            / |\n' span_id:519) (Token id:Id.Lit_Chars val:'\t#           /  |\n' span_id:520) 
          (Token id:Id.Lit_Chars val:'\t#          /   |\n' span_id:521) (Token id:Id.Lit_Chars val:'\t#  JAA    /    |\n' span_id:522) 
          (Token id:Id.Lit_Chars val:'\t#   |\\   /     |\n' span_id:523) (Token id:Id.Lit_Chars val:'\t#   | \\  | JDD |\n' span_id:524) 
          (Token id:Id.Lit_Chars val:'\t#   |  \\ |/ |  |\n' span_id:525) (Token id:Id.Lit_Chars val:'\t#   |   JC JD  |\n' span_id:526) 
          (Token id:Id.Lit_Chars val:'\t#   |    | /|  |\n' span_id:527) (Token id:Id.Lit_Chars val:'\t#   |    |/ |  |\n' span_id:528) 
          (Token id:Id.Lit_Chars val:'\t#  JA    |  |  |\n' span_id:529) (Token id:Id.Lit_Chars val:'\t#   |\\  /|  |  |\n' span_id:530) 
          (Token id:Id.Lit_Chars val:'\t#   X JB |  X  X\n' span_id:531) (Token id:Id.Lit_Chars val:'\t#   \\  \\ | /   /\n' span_id:532) 
          (Token id:Id.Lit_Chars val:'\t#    \\__\\|/___/\n' span_id:533) (Token id:Id.Lit_Chars val:'\t#        J\n' span_id:534) 
          (Token id:Id.Lit_Chars val:'\ttest_commit J &&\n' span_id:535) (Token id:Id.Lit_Chars val:'\ttest_commit JB &&\n' span_id:536) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard J &&\n' span_id:537) (Token id:Id.Lit_Chars val:'\ttest_commit JC &&\n' span_id:538) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard J &&\n' span_id:539) (Token id:Id.Lit_Chars val:'\ttest_commit JTEMP1 &&\n' span_id:540) 
          (Token id:Id.Lit_Chars val:'\ttest_merge JA JB &&\n' span_id:541) (Token id:Id.Lit_Chars val:'\ttest_merge JAA JC &&\n' span_id:542) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard J &&\n' span_id:543) (Token id:Id.Lit_Chars val:'\ttest_commit JTEMP2 &&\n' span_id:544) 
          (Token id:Id.Lit_Chars val:'\ttest_merge JD JB &&\n' span_id:545) (Token id:Id.Lit_Chars val:'\ttest_merge JDD JC &&\n' span_id:546) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard J &&\n' span_id:547) (Token id:Id.Lit_Chars val:'\ttest_commit JTEMP3 &&\n' span_id:548) 
          (Token id:Id.Lit_Chars val:'\ttest_merge JE JC &&\n' span_id:549) (Token id:Id.Lit_Chars val:'\tgit rev-parse JC >expected &&\n' span_id:550) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit merge-base --all --octopus JAA JDD JE >actual &&\n'
            span_id: 551
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:552)
        )
      }
    )
    (C {(test_done)})
  ]
)