(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:'Tests replace refs functionality' span_id:14))}
          spids: [12]
        )
      ]
    )
    (command.Simple
      words: [{(exec)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Less val:'<' span_id:20)
          fd: -1
          arg_word: {(/dev/null)}
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY') (/lib-gpg.sh))})
    (command.ShFunction
      name: add_and_commit_file
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_file)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                  spids: [44]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_msg)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$2'))}
                  spids: [50]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(git)} {(add)} {($ Id.VSub_DollarName '$_file')})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:65)
                  arg_word: {($ Id.VSub_QMark '$?')}
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (C {(test_tick)})
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Return val:return span_id:74)
                  arg_word: {($ Id.VSub_QMark '$?')}
                )
              ]
            )
            (C {(git)} {(commit)} {(--quiet)} {(-m)} 
              {(DQ ($ Id.VSub_DollarName '$_file') (': ') ($ Id.VSub_DollarName '$_msg'))}
            )
          ]
        )
    )
    (command.ShFunction
      name: commit_buffer_contains_parents
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [{(git)} {(cat-file)} {(commit)} {(DQ ($ Id.VSub_Number '$1'))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:114)
                      fd: -1
                      arg_word: {(payload)}
                    )
                  ]
                )
                (command.Simple
                  words: [
                    {(sed)}
                    {(-n)}
                    {(-e)}
                    {(SQ (Token id:Id.Lit_Chars val:'/^$/q' span_id:127))}
                    {(-e)}
                    {(SQ (Token id:Id.Lit_Chars val:'/^parent /p' span_id:133))}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:136)
                      fd: -1
                      arg_word: {(payload)}
                    )
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:139)
                      fd: -1
                      arg_word: {(actual)}
                    )
                  ]
                )
                (C {(shift)})
                (command.ForEach
                  iter_name: _parent
                  do_arg_iter: T
                  body: 
                    (command.DoGroup
                      children: [(C {(echo)} {(DQ ('parent ') ($ Id.VSub_DollarName '$_parent'))})]
                    )
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:168)
                      fd: -1
                      arg_word: {(expected)}
                    )
                  ]
                )
                (C {(test_cmp)} {(expected)} {(actual)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: commit_peeling_shows_parents
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_parent_number)
                  op: assign_op.Equal
                  rhs: {(1)}
                  spids: [191]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_commit)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                  spids: [195]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {(shift)})
                (command.ForEach
                  iter_name: _parent
                  do_arg_iter: T
                  body: 
                    (command.DoGroup
                      children: [
                        (command.AndOr
                          ops: [Id.Op_DPipe]
                          children: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:_found)
                                  op: assign_op.Equal
                                  rhs: 
                                    {
                                      (command_sub
                                        left_token: 
                                          (Token
                                            id: Id.Left_DollarParen
                                            val: '$('
                                            span_id: 215
                                          )
                                        command_list: 
                                          (command.CommandList
                                            children: [
                                              (C {(git)} {(rev-parse)} {(--verify)} 
                                                {($ Id.VSub_DollarName '$_commit') (Id.Lit_Other '^') 
                                                  ($ Id.VSub_DollarName '$_parent_number')
                                                }
                                              )
                                            ]
                                          )
                                      )
                                    }
                                  spids: [214]
                                )
                              ]
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:229)
                              arg_word: {(1)}
                            )
                          ]
                        )
                        (command.AndOr
                          ops: [Id.Op_DPipe]
                          children: [
                            (C {(test)} {(DQ ($ Id.VSub_DollarName '$_found'))} {(Id.Lit_Equals '=')} 
                              {(DQ ($ Id.VSub_DollarName '$_parent'))}
                            )
                            (command.ControlFlow
                              token: (Token id:Id.ControlFlow_Return val:return span_id:248)
                              arg_word: {(1)}
                            )
                          ]
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:_parent_number)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (word_part.ArithSub
                                    anode: 
                                      (arith_expr.Binary
                                        op_id: Id.Arith_Plus
                                        left: 
                                          (arith_expr.ArithWord
                                            w: {($ Id.VSub_DollarName '$_parent_number')}
                                          )
                                        right: (arith_expr.ArithWord w:{(Id.Lit_Digits 1)})
                                      )
                                  )
                                }
                              spids: [253]
                            )
                          ]
                        )
                      ]
                    )
                )
                (C {(test_must_fail)} {(git)} {(rev-parse)} {(--verify)} 
                  {($ Id.VSub_DollarName '$_commit') (Id.Lit_Other '^') 
                    ($ Id.VSub_DollarName '$_parent_number')
                  }
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: commit_has_parents
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(commit_buffer_contains_parents)} {(DQ ($ Id.VSub_At '$@'))})
                (C {(commit_peeling_shows_parents)} {(DQ ($ Id.VSub_At '$@'))})
              ]
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:HASH1)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [312]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:HASH2)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [314]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:HASH3)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [316]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:HASH4)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [318]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:HASH5)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [320]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:HASH6)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [322]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:HASH7)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [324]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'set up buggy branch' span_id:330))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:334) 
          (Token id:Id.Lit_Chars val:'     echo "line 1" >>hello &&\n' span_id:335) (Token id:Id.Lit_Chars val:'     echo "line 2" >>hello &&\n' span_id:336) 
          (Token id:Id.Lit_Chars val:'     echo "line 3" >>hello &&\n' span_id:337) (Token id:Id.Lit_Chars val:'     echo "line 4" >>hello &&\n' span_id:338) 
          (Token
            id: Id.Lit_Chars
            val: '     add_and_commit_file hello "4 lines" &&\n'
            span_id: 339
          ) (Token id:Id.Lit_Chars val:'     HASH1=$(git rev-parse --verify HEAD) &&\n' span_id:340) 
          (Token id:Id.Lit_Chars val:'     echo "line BUG" >>hello &&\n' span_id:341) (Token id:Id.Lit_Chars val:'     echo "line 6" >>hello &&\n' span_id:342) 
          (Token id:Id.Lit_Chars val:'     echo "line 7" >>hello &&\n' span_id:343) (Token id:Id.Lit_Chars val:'     echo "line 8" >>hello &&\n' span_id:344) 
          (Token
            id: Id.Lit_Chars
            val: '     add_and_commit_file hello "4 more lines with a BUG" &&\n'
            span_id: 345
          ) (Token id:Id.Lit_Chars val:'     HASH2=$(git rev-parse --verify HEAD) &&\n' span_id:346) 
          (Token id:Id.Lit_Chars val:'     echo "line 9" >>hello &&\n' span_id:347) (Token id:Id.Lit_Chars val:'     echo "line 10" >>hello &&\n' span_id:348) 
          (Token
            id: Id.Lit_Chars
            val: '     add_and_commit_file hello "2 more lines" &&\n'
            span_id: 349
          ) (Token id:Id.Lit_Chars val:'     HASH3=$(git rev-parse --verify HEAD) &&\n' span_id:350) 
          (Token id:Id.Lit_Chars val:'     echo "line 11" >>hello &&\n' span_id:351) (Token id:Id.Lit_Chars val:'     add_and_commit_file hello "1 more line" &&\n' span_id:352) 
          (Token
            id: Id.Lit_Chars
            val: '     HASH4=$(git rev-parse --verify HEAD) &&\n'
            span_id: 353
          ) (Token id:Id.Lit_Chars val:'     sed -e "s/BUG/5/" hello >hello.new &&\n' span_id:354) 
          (Token id:Id.Lit_Chars val:'     mv hello.new hello &&\n' span_id:355) (Token id:Id.Lit_Chars val:'     add_and_commit_file hello "BUG fixed" &&\n' span_id:356) 
          (Token
            id: Id.Lit_Chars
            val: '     HASH5=$(git rev-parse --verify HEAD) &&\n'
            span_id: 357
          ) (Token id:Id.Lit_Chars val:'     echo "line 12" >>hello &&\n' span_id:358) 
          (Token id:Id.Lit_Chars val:'     echo "line 13" >>hello &&\n' span_id:359) (Token id:Id.Lit_Chars val:'     add_and_commit_file hello "2 more lines" &&\n' span_id:360) 
          (Token
            id: Id.Lit_Chars
            val: '     HASH6=$(git rev-parse --verify HEAD) &&\n'
            span_id: 361
          ) (Token id:Id.Lit_Chars val:'     echo "line 14" >>hello &&\n' span_id:362) 
          (Token id:Id.Lit_Chars val:'     echo "line 15" >>hello &&\n' span_id:363) (Token id:Id.Lit_Chars val:'     echo "line 16" >>hello &&\n' span_id:364) 
          (Token
            id: Id.Lit_Chars
            val: '     add_and_commit_file hello "again 3 more lines" &&\n'
            span_id: 365
          ) (Token id:Id.Lit_Chars val:'     HASH7=$(git rev-parse --verify HEAD)\n' span_id:366)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'replace the author' span_id:373))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:377) 
          (Token
            id: Id.Lit_Chars
            val: '     git cat-file commit $HASH2 | grep "author A U Thor" &&\n'
            span_id: 378
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'     R=$(git cat-file commit $HASH2 | sed -e "s/A U/O/" | git hash-object -t commit --stdin -w) &&\n'
            span_id: 379
          ) (Token id:Id.Lit_Chars val:'     git cat-file commit $R | grep "author O Thor" &&\n' span_id:380) 
          (Token
            id: Id.Lit_Chars
            val: '     git update-ref refs/replace/$HASH2 $R &&\n'
            span_id: 381
          ) (Token id:Id.Lit_Chars val:'     git show HEAD~5 | grep "O Thor" &&\n' span_id:382) 
          (Token id:Id.Lit_Chars val:'     git show $HASH2 | grep "O Thor"\n' span_id:383)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'test --no-replace-objects option' span_id:390))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:394) 
          (Token
            id: Id.Lit_Chars
            val: '     git cat-file commit $HASH2 | grep "author O Thor" &&\n'
            span_id: 395
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'     git --no-replace-objects cat-file commit $HASH2 | grep "author A U Thor" &&\n'
            span_id: 396
          ) (Token id:Id.Lit_Chars val:'     git show $HASH2 | grep "O Thor" &&\n' span_id:397) 
          (Token
            id: Id.Lit_Chars
            val: '     git --no-replace-objects show $HASH2 | grep "A U Thor"\n'
            span_id: 398
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'test GIT_NO_REPLACE_OBJECTS env variable' span_id:405))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:409) 
          (Token
            id: Id.Lit_Chars
            val: 
'     GIT_NO_REPLACE_OBJECTS=1 git cat-file commit $HASH2 | grep "author A U Thor" &&\n'
            span_id: 410
          ) 
          (Token
            id: Id.Lit_Chars
            val: '     GIT_NO_REPLACE_OBJECTS=1 git show $HASH2 | grep "A U Thor"\n'
            span_id: 411
          )
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:417)
          fd: -1
          arg_word: {(tag.sig)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:420)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 431
          stdin_parts: [
            ('object ')
            ($ Id.VSub_DollarName '$HASH2')
            ('\n')
            ('type commit\n')
            ('tag mytag\n')
            ('tagger T A Gger <> 0 +0000\n')
            ('\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'tag replaced commit' span_id:436))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:440) 
          (Token
            id: Id.Lit_Chars
            val: '     git mktag <tag.sig >.git/refs/tags/mytag 2>message\n'
            span_id: 441
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'"git fsck" works' span_id:448))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:452) 
          (Token
            id: Id.Lit_Chars
            val: '     git fsck master >fsck_master.out &&\n'
            span_id: 453
          ) (Token id:Id.Lit_Chars val:'     grep "dangling commit $R" fsck_master.out &&\n' span_id:454) 
          (Token
            id: Id.Lit_Chars
            val: '     grep "dangling tag $(cat .git/refs/tags/mytag)" fsck_master.out &&\n'
            span_id: 455
          ) (Token id:Id.Lit_Chars val:'     test -z "$(git fsck)"\n' span_id:456)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'repack, clone and fetch work' span_id:463))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:467) 
          (Token id:Id.Lit_Chars val:'     git repack -a -d &&\n' span_id:468) (Token id:Id.Lit_Chars val:'     git clone --no-hardlinks . clone_dir &&\n' span_id:469) 
          (Token id:Id.Lit_Chars val:'     (\n' span_id:470) (Token id:Id.Lit_Chars val:'\t  cd clone_dir &&\n' span_id:471) 
          (Token
            id: Id.Lit_Chars
            val: '\t  git show HEAD~5 | grep "A U Thor" &&\n'
            span_id: 472
          ) (Token id:Id.Lit_Chars val:'\t  git show $HASH2 | grep "A U Thor" &&\n' span_id:473) 
          (Token id:Id.Lit_Chars val:'\t  git cat-file commit $R &&\n' span_id:474) (Token id:Id.Lit_Chars val:'\t  git repack -a -d &&\n' span_id:475) 
          (Token
            id: Id.Lit_Chars
            val: '\t  test_must_fail git cat-file commit $R &&\n'
            span_id: 476
          ) (Token id:Id.Lit_Chars val:'\t  git fetch ../ "refs/replace/*:refs/replace/*" &&\n' span_id:477) 
          (Token
            id: Id.Lit_Chars
            val: '\t  git show HEAD~5 | grep "O Thor" &&\n'
            span_id: 478
          ) (Token id:Id.Lit_Chars val:'\t  git show $HASH2 | grep "O Thor" &&\n' span_id:479) 
          (Token id:Id.Lit_Chars val:'\t  git cat-file commit $R\n' span_id:480) (Token id:Id.Lit_Chars val:'     )\n' span_id:481)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'"git replace" listing and deleting' span_id:488))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:492) 
          (Token
            id: Id.Lit_Chars
            val: '     test "$HASH2" = "$(git replace -l)" &&\n'
            span_id: 493
          ) (Token id:Id.Lit_Chars val:'     test "$HASH2" = "$(git replace)" &&\n' span_id:494) 
          (Token
            id: Id.Lit_Chars
            val: '     aa=${HASH2%??????????????????????????????????????} &&\n'
            span_id: 495
          ) (Token id:Id.Lit_Chars val:'     test "$HASH2" = "$(git replace --list "$aa*")" &&\n' span_id:496) 
          (Token
            id: Id.Lit_Chars
            val: '     test_must_fail git replace -d $R &&\n'
            span_id: 497
          ) (Token id:Id.Lit_Chars val:'     test_must_fail git replace --delete &&\n' span_id:498) 
          (Token
            id: Id.Lit_Chars
            val: '     test_must_fail git replace -l -d $HASH2 &&\n'
            span_id: 499
          ) (Token id:Id.Lit_Chars val:'     git replace -d $HASH2 &&\n' span_id:500) 
          (Token
            id: Id.Lit_Chars
            val: '     git show $HASH2 | grep "A U Thor" &&\n'
            span_id: 501
          ) (Token id:Id.Lit_Chars val:'     test -z "$(git replace -l)"\n' span_id:502)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'"git replace" replacing' span_id:509))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:513) 
          (Token id:Id.Lit_Chars val:'     git replace $HASH2 $R &&\n' span_id:514) (Token id:Id.Lit_Chars val:'     git show $HASH2 | grep "O Thor" &&\n' span_id:515) 
          (Token
            id: Id.Lit_Chars
            val: '     test_must_fail git replace $HASH2 $R &&\n'
            span_id: 516
          ) (Token id:Id.Lit_Chars val:'     git replace -f $HASH2 $R &&\n' span_id:517) 
          (Token id:Id.Lit_Chars val:'     test_must_fail git replace -f &&\n' span_id:518) (Token id:Id.Lit_Chars val:'     test "$HASH2" = "$(git replace)"\n' span_id:519)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'"git replace" resolves sha1' span_id:526))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:530) 
          (Token
            id: Id.Lit_Chars
            val: '     SHORTHASH2=$(git rev-parse --short=8 $HASH2) &&\n'
            span_id: 531
          ) (Token id:Id.Lit_Chars val:'     git replace -d $SHORTHASH2 &&\n' span_id:532) 
          (Token id:Id.Lit_Chars val:'     git replace $SHORTHASH2 $R &&\n' span_id:533) (Token id:Id.Lit_Chars val:'     git show $HASH2 | grep "O Thor" &&\n' span_id:534) 
          (Token
            id: Id.Lit_Chars
            val: '     test_must_fail git replace $HASH2 $R &&\n'
            span_id: 535
          ) (Token id:Id.Lit_Chars val:'     git replace -f $HASH2 $R &&\n' span_id:536) 
          (Token
            id: Id.Lit_Chars
            val: '     test_must_fail git replace --force &&\n'
            span_id: 537
          ) (Token id:Id.Lit_Chars val:'     test "$HASH2" = "$(git replace)"\n' span_id:538)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'create parallel branch without the bug' span_id:587))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:591) 
          (Token id:Id.Lit_Chars val:'     git replace -d $HASH2 &&\n' span_id:592) (Token id:Id.Lit_Chars val:'     git show $HASH2 | grep "A U Thor" &&\n' span_id:593) 
          (Token id:Id.Lit_Chars val:'     git checkout $HASH1 &&\n' span_id:594) (Token id:Id.Lit_Chars val:'     git cherry-pick $HASH2 &&\n' span_id:595) 
          (Token id:Id.Lit_Chars val:'     git show $HASH5 | git apply &&\n' span_id:596) 
          (Token
            id: Id.Lit_Chars
            val: '     git commit --amend -m "hello: 4 more lines WITHOUT the bug" hello &&\n'
            span_id: 597
          ) (Token id:Id.Lit_Chars val:'     PARA2=$(git rev-parse --verify HEAD) &&\n' span_id:598) 
          (Token id:Id.Lit_Chars val:'     git cherry-pick $HASH3 &&\n' span_id:599) (Token id:Id.Lit_Chars val:'     PARA3=$(git rev-parse --verify HEAD) &&\n' span_id:600) 
          (Token id:Id.Lit_Chars val:'     git cherry-pick $HASH4 &&\n' span_id:601) (Token id:Id.Lit_Chars val:'     PARA4=$(git rev-parse --verify HEAD) &&\n' span_id:602) 
          (Token id:Id.Lit_Chars val:'     git cherry-pick $HASH6 &&\n' span_id:603) (Token id:Id.Lit_Chars val:'     PARA6=$(git rev-parse --verify HEAD) &&\n' span_id:604) 
          (Token id:Id.Lit_Chars val:'     git replace $HASH6 $PARA6 &&\n' span_id:605) (Token id:Id.Lit_Chars val:'     git checkout master &&\n' span_id:606) 
          (Token
            id: Id.Lit_Chars
            val: '     cur=$(git rev-parse --verify HEAD) &&\n'
            span_id: 607
          ) (Token id:Id.Lit_Chars val:'     test "$cur" = "$HASH7" &&\n' span_id:608) 
          (Token
            id: Id.Lit_Chars
            val: '     git log --pretty=oneline | grep $PARA2 &&\n'
            span_id: 609
          ) (Token id:Id.Lit_Chars val:'     git remote add cloned ./clone_dir\n' span_id:610)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'push to cloned repo' span_id:617))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:621) 
          (Token
            id: Id.Lit_Chars
            val: '     git push cloned $HASH6^:refs/heads/parallel &&\n'
            span_id: 622
          ) (Token id:Id.Lit_Chars val:'     (\n' span_id:623) 
          (Token id:Id.Lit_Chars val:'\t  cd clone_dir &&\n' span_id:624) (Token id:Id.Lit_Chars val:'\t  git checkout parallel &&\n' span_id:625) 
          (Token
            id: Id.Lit_Chars
            val: '\t  git log --pretty=oneline | grep $PARA2\n'
            span_id: 626
          ) (Token id:Id.Lit_Chars val:'     )\n' span_id:627)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'push branch with replacement' span_id:634))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:638) 
          (Token
            id: Id.Lit_Chars
            val: '     git cat-file commit $PARA3 | grep "author A U Thor" &&\n'
            span_id: 639
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'     S=$(git cat-file commit $PARA3 | sed -e "s/A U/O/" | git hash-object -t commit --stdin -w) &&\n'
            span_id: 640
          ) (Token id:Id.Lit_Chars val:'     git cat-file commit $S | grep "author O Thor" &&\n' span_id:641) 
          (Token id:Id.Lit_Chars val:'     git replace $PARA3 $S &&\n' span_id:642) (Token id:Id.Lit_Chars val:'     git show $HASH6~2 | grep "O Thor" &&\n' span_id:643) 
          (Token
            id: Id.Lit_Chars
            val: '     git show $PARA3 | grep "O Thor" &&\n'
            span_id: 644
          ) (Token id:Id.Lit_Chars val:'     git push cloned $HASH6^:refs/heads/parallel2 &&\n' span_id:645) 
          (Token id:Id.Lit_Chars val:'     (\n' span_id:646) (Token id:Id.Lit_Chars val:'\t  cd clone_dir &&\n' span_id:647) 
          (Token id:Id.Lit_Chars val:'\t  git checkout parallel2 &&\n' span_id:648) (Token id:Id.Lit_Chars val:'\t  git log --pretty=oneline | grep $PARA3 &&\n' span_id:649) 
          (Token id:Id.Lit_Chars val:'\t  git show $PARA3 | grep "A U Thor"\n' span_id:650) (Token id:Id.Lit_Chars val:'     )\n' span_id:651)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fetch branch with replacement' span_id:658))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:662) 
          (Token id:Id.Lit_Chars val:'     git branch tofetch $HASH6 &&\n' span_id:663) (Token id:Id.Lit_Chars val:'     (\n' span_id:664) 
          (Token id:Id.Lit_Chars val:'\t  cd clone_dir &&\n' span_id:665) 
          (Token
            id: Id.Lit_Chars
            val: '\t  git fetch origin refs/heads/tofetch:refs/heads/parallel3 &&\n'
            span_id: 666
          ) (Token id:Id.Lit_Chars val:'\t  git log --pretty=oneline parallel3 >output.txt &&\n' span_id:667) 
          (Token id:Id.Lit_Chars val:'\t  ! grep $PARA3 output.txt &&\n' span_id:668) (Token id:Id.Lit_Chars val:'\t  git show $PARA3 >para3.txt &&\n' span_id:669) 
          (Token id:Id.Lit_Chars val:'\t  grep "A U Thor" para3.txt &&\n' span_id:670) (Token id:Id.Lit_Chars val:'\t  git fetch origin "refs/replace/*:refs/replace/*" &&\n' span_id:671) 
          (Token
            id: Id.Lit_Chars
            val: '\t  git log --pretty=oneline parallel3 >output.txt &&\n'
            span_id: 672
          ) (Token id:Id.Lit_Chars val:'\t  grep $PARA3 output.txt &&\n' span_id:673) 
          (Token id:Id.Lit_Chars val:'\t  git show $PARA3 >para3.txt &&\n' span_id:674) (Token id:Id.Lit_Chars val:'\t  grep "O Thor" para3.txt\n' span_id:675) 
          (Token id:Id.Lit_Chars val:'     )\n' span_id:676)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect and replacements' span_id:683))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:687) 
          (Token
            id: Id.Lit_Chars
            val: '     git bisect start $HASH7 $HASH1 &&\n'
            span_id: 688
          ) (Token id:Id.Lit_Chars val:'     test "$PARA3" = "$(git rev-parse --verify HEAD)" &&\n' span_id:689) 
          (Token id:Id.Lit_Chars val:'     git bisect reset &&\n' span_id:690) 
          (Token
            id: Id.Lit_Chars
            val: '     GIT_NO_REPLACE_OBJECTS=1 git bisect start $HASH7 $HASH1 &&\n'
            span_id: 691
          ) (Token id:Id.Lit_Chars val:'     test "$HASH4" = "$(git rev-parse --verify HEAD)" &&\n' span_id:692) 
          (Token id:Id.Lit_Chars val:'     git bisect reset &&\n' span_id:693) 
          (Token
            id: Id.Lit_Chars
            val: '     git --no-replace-objects bisect start $HASH7 $HASH1 &&\n'
            span_id: 694
          ) (Token id:Id.Lit_Chars val:'     test "$HASH4" = "$(git rev-parse --verify HEAD)" &&\n' span_id:695) 
          (Token id:Id.Lit_Chars val:'     git bisect reset\n' span_id:696)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'index-pack and replacements' span_id:703))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:707) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --no-replace-objects rev-list --objects HEAD |\n'
            span_id: 708
          ) (Token id:Id.Lit_Chars val:'\tgit --no-replace-objects pack-objects test- &&\n' span_id:709) 
          (Token id:Id.Lit_Chars val:'\tgit index-pack test-*.pack\n' span_id:710)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'not just commits' span_id:717))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:721) 
          (Token id:Id.Lit_Chars val:'\techo replaced >file &&\n' span_id:722) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:723) 
          (Token id:Id.Lit_Chars val:'\tREPLACED=$(git rev-parse :file) &&\n' span_id:724) (Token id:Id.Lit_Chars val:'\tmv file file.replaced &&\n' span_id:725) 
          (Token id:Id.Lit_Chars val:'\n' span_id:726) (Token id:Id.Lit_Chars val:'\techo original >file &&\n' span_id:727) 
          (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:728) (Token id:Id.Lit_Chars val:'\tORIGINAL=$(git rev-parse :file) &&\n' span_id:729) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref refs/replace/$ORIGINAL $REPLACED &&\n'
            span_id: 730
          ) (Token id:Id.Lit_Chars val:'\tmv file file.original &&\n' span_id:731) 
          (Token id:Id.Lit_Chars val:'\n' span_id:732) (Token id:Id.Lit_Chars val:'\tgit checkout file &&\n' span_id:733) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp file.replaced file\n' span_id:734)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'replaced and replacement objects must be of the same type'
            span_id: 741
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:745) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git replace mytag $HASH1 &&\n'
            span_id: 746
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git replace HEAD^{tree} HEAD~1 &&\n' span_id:747) 
          (Token id:Id.Lit_Chars val:'\tBLOB=$(git rev-parse :file) &&\n' span_id:748) (Token id:Id.Lit_Chars val:'\ttest_must_fail git replace HEAD^ $BLOB\n' span_id:749)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'-f option bypasses the type check' span_id:756))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:760) 
          (Token id:Id.Lit_Chars val:'\tgit replace -f mytag $HASH1 &&\n' span_id:761) (Token id:Id.Lit_Chars val:'\tgit replace --force HEAD^{tree} HEAD~1 &&\n' span_id:762) 
          (Token id:Id.Lit_Chars val:'\tgit replace -f HEAD^ $BLOB\n' span_id:763)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git cat-file --batch works on replace objects' span_id:770))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:774) 
          (Token id:Id.Lit_Chars val:'\tgit replace | grep $PARA3 &&\n' span_id:775) (Token id:Id.Lit_Chars val:'\techo $PARA3 | git cat-file --batch\n' span_id:776)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'test --format bogus' span_id:783))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:787) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git replace --format bogus >/dev/null 2>&1\n'
            span_id: 788
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'test --format short' span_id:795))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:799) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit replace --format=short >actual &&\n'
            span_id: 800
          ) (Token id:Id.Lit_Chars val:'\tgit replace >expected &&\n' span_id:801) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:802)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'test --format medium' span_id:809))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:813) 
          (Token
            id: Id.Lit_Chars
            val: '\tH1=$(git --no-replace-objects rev-parse HEAD~1) &&\n'
            span_id: 814
          ) (Token id:Id.Lit_Chars val:'\tHT=$(git --no-replace-objects rev-parse HEAD^{tree}) &&\n' span_id:815) 
          (Token
            id: Id.Lit_Chars
            val: '\tMYTAG=$(git --no-replace-objects rev-parse mytag) &&\n'
            span_id: 816
          ) (Token id:Id.Lit_Chars val:'\t{\n' span_id:817) 
          (Token id:Id.Lit_Chars val:'\t\techo "$H1 -> $BLOB" &&\n' span_id:818) (Token id:Id.Lit_Chars val:'\t\techo "$BLOB -> $REPLACED" &&\n' span_id:819) 
          (Token id:Id.Lit_Chars val:'\t\techo "$HT -> $H1" &&\n' span_id:820) (Token id:Id.Lit_Chars val:'\t\techo "$PARA3 -> $S" &&\n' span_id:821) 
          (Token id:Id.Lit_Chars val:'\t\techo "$MYTAG -> $HASH1"\n' span_id:822) (Token id:Id.Lit_Chars val:'\t} | sort >expected &&\n' span_id:823) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit replace -l --format medium | sort >actual &&\n'
            span_id: 824
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:825)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'test --format long' span_id:832))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:836) 
          (Token id:Id.Lit_Chars val:'\t{\n' span_id:837) (Token id:Id.Lit_Chars val:'\t\techo "$H1 (commit) -> $BLOB (blob)" &&\n' span_id:838) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "$BLOB (blob) -> $REPLACED (blob)" &&\n'
            span_id: 839
          ) (Token id:Id.Lit_Chars val:'\t\techo "$HT (tree) -> $H1 (commit)" &&\n' span_id:840) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "$PARA3 (commit) -> $S (commit)" &&\n'
            span_id: 841
          ) (Token id:Id.Lit_Chars val:'\t\techo "$MYTAG (tag) -> $HASH1 (commit)"\n' span_id:842) 
          (Token id:Id.Lit_Chars val:'\t} | sort >expected &&\n' span_id:843) (Token id:Id.Lit_Chars val:'\tgit replace --format=long | sort >actual &&\n' span_id:844) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:845)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup fake editors' span_id:852))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:856) 
          (Token id:Id.Lit_Chars val:'\twrite_script fakeeditor <<-\\EOF &&\n' span_id:857) (Token id:Id.Lit_Chars val:'\t\tsed -e "s/A U Thor/A fake Thor/" "$1" >"$1.new"\n' span_id:858) 
          (Token id:Id.Lit_Chars val:'\t\tmv "$1.new" "$1"\n' span_id:859) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:860) 
          (Token
            id: Id.Lit_Chars
            val: '\twrite_script failingfakeeditor <<-\\EOF\n'
            span_id: 861
          ) (Token id:Id.Lit_Chars val:'\t\t./fakeeditor "$@"\n' span_id:862) 
          (Token id:Id.Lit_Chars val:'\t\tfalse\n' span_id:863) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:864)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--edit with and without already replaced object' span_id:871))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:875) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail env GIT_EDITOR=./fakeeditor git replace --edit "$PARA3" &&\n'
            span_id: 876
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tGIT_EDITOR=./fakeeditor git replace --force --edit "$PARA3" &&\n'
            span_id: 877
          ) (Token id:Id.Lit_Chars val:'\tgit replace -l | grep "$PARA3" &&\n' span_id:878) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file commit "$PARA3" | grep "A fake Thor" &&\n'
            span_id: 879
          ) (Token id:Id.Lit_Chars val:'\tgit replace -d "$PARA3" &&\n' span_id:880) 
          (Token
            id: Id.Lit_Chars
            val: '\tGIT_EDITOR=./fakeeditor git replace --edit "$PARA3" &&\n'
            span_id: 881
          ) (Token id:Id.Lit_Chars val:'\tgit replace -l | grep "$PARA3" &&\n' span_id:882) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file commit "$PARA3" | grep "A fake Thor"\n'
            span_id: 883
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--edit and change nothing or command failed' span_id:890))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:894) 
          (Token id:Id.Lit_Chars val:'\tgit replace -d "$PARA3" &&\n' span_id:895) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail env GIT_EDITOR=true git replace --edit "$PARA3" &&\n'
            span_id: 896
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest_must_fail env GIT_EDITOR="./failingfakeeditor" git replace --edit "$PARA3" &&\n'
            span_id: 897
          ) (Token id:Id.Lit_Chars val:'\tGIT_EDITOR=./fakeeditor git replace --edit "$PARA3" &&\n' span_id:898) 
          (Token id:Id.Lit_Chars val:'\tgit replace -l | grep "$PARA3" &&\n' span_id:899) (Token id:Id.Lit_Chars val:'\tgit cat-file commit "$PARA3" | grep "A fake Thor"\n' span_id:900)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'replace ref cleanup' span_id:907))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:911) 
          (Token id:Id.Lit_Chars val:'\ttest -n "$(git replace)" &&\n' span_id:912) (Token id:Id.Lit_Chars val:'\tgit replace -d $(git replace) &&\n' span_id:913) 
          (Token id:Id.Lit_Chars val:'\ttest -z "$(git replace)"\n' span_id:914)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '--graft with and without already replaced object'
            span_id: 921
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:925) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(git log --oneline | wc -l) = 7 &&\n'
            span_id: 926
          ) (Token id:Id.Lit_Chars val:'\tgit replace --graft $HASH5 &&\n' span_id:927) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(git log --oneline | wc -l) = 3 &&\n'
            span_id: 928
          ) (Token id:Id.Lit_Chars val:'\tcommit_has_parents $HASH5 &&\n' span_id:929) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git replace --graft $HASH5 $HASH4 $HASH3 &&\n'
            span_id: 930
          ) (Token id:Id.Lit_Chars val:'\tgit replace --force -g $HASH5 $HASH4 $HASH3 &&\n' span_id:931) 
          (Token
            id: Id.Lit_Chars
            val: '\tcommit_has_parents $HASH5 $HASH4 $HASH3 &&\n'
            span_id: 932
          ) (Token id:Id.Lit_Chars val:'\tgit replace -d $HASH5\n' span_id:933)
        )
      }
    )
    (C {(test_expect_success)} {(GPG)} 
      {(SQ (Token id:Id.Lit_Chars val:'set up a signed commit' span_id:942))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:946) 
          (Token id:Id.Lit_Chars val:'\techo "line 17" >>hello &&\n' span_id:947) (Token id:Id.Lit_Chars val:'\techo "line 18" >>hello &&\n' span_id:948) 
          (Token id:Id.Lit_Chars val:'\tgit add hello &&\n' span_id:949) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:950) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit --quiet -S -m "hello: 2 more lines in a signed commit" &&\n'
            span_id: 951
          ) (Token id:Id.Lit_Chars val:'\tHASH8=$(git rev-parse --verify HEAD) &&\n' span_id:952) 
          (Token id:Id.Lit_Chars val:'\tgit verify-commit $HASH8\n' span_id:953)
        )
      }
    )
    (C {(test_expect_success)} {(GPG)} 
      {(SQ (Token id:Id.Lit_Chars val:'--graft with a signed commit' span_id:962))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:966) 
          (Token id:Id.Lit_Chars val:'\tgit cat-file commit $HASH8 >orig &&\n' span_id:967) (Token id:Id.Lit_Chars val:'\tgit replace --graft $HASH8 &&\n' span_id:968) 
          (Token id:Id.Lit_Chars val:'\tgit cat-file commit $HASH8 >repl &&\n' span_id:969) (Token id:Id.Lit_Chars val:'\tcommit_has_parents $HASH8 &&\n' span_id:970) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git verify-commit $HASH8 &&\n'
            span_id: 971
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -n -e "/^tree /p" -e "/^author /p" -e "/^committer /p" orig >expected &&\n'
            span_id: 972
          ) (Token id:Id.Lit_Chars val:'\techo >>expected &&\n' span_id:973) 
          (Token id:Id.Lit_Chars val:'\tsed -e "/^$/q" repl >actual &&\n' span_id:974) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual &&\n' span_id:975) 
          (Token id:Id.Lit_Chars val:'\tgit replace -d $HASH8\n' span_id:976)
        )
      }
    )
    (C {(test_expect_success)} {(GPG)} 
      {(SQ (Token id:Id.Lit_Chars val:'set up a merge commit with a mergetag' span_id:985))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:989) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD &&\n' span_id:990) (Token id:Id.Lit_Chars val:'\tgit checkout -b test_branch HEAD~2 &&\n' span_id:991) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "line 1 from test branch" >>hello &&\n'
            span_id: 992
          ) (Token id:Id.Lit_Chars val:'\techo "line 2 from test branch" >>hello &&\n' span_id:993) 
          (Token id:Id.Lit_Chars val:'\tgit add hello &&\n' span_id:994) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:995) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m "hello: 2 more lines from a test branch" &&\n'
            span_id: 996
          ) (Token id:Id.Lit_Chars val:'\tHASH9=$(git rev-parse --verify HEAD) &&\n' span_id:997) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit tag -s -m "tag for testing with a mergetag" test_tag HEAD &&\n'
            span_id: 998
          ) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:999) 
          (Token id:Id.Lit_Chars val:'\tgit merge -s ours test_tag &&\n' span_id:1000) (Token id:Id.Lit_Chars val:'\tHASH10=$(git rev-parse --verify HEAD) &&\n' span_id:1001) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file commit $HASH10 | grep "^mergetag object"\n'
            span_id: 1002
          )
        )
      }
    )
    (C {(test_expect_success)} {(GPG)} 
      {(SQ (Token id:Id.Lit_Chars val:'--graft on a commit with a mergetag' span_id:1011))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1015) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git replace --graft $HASH10 $HASH8^1 &&\n'
            span_id: 1016
          ) (Token id:Id.Lit_Chars val:'\tgit replace --graft $HASH10 $HASH8^1 $HASH9 &&\n' span_id:1017) 
          (Token id:Id.Lit_Chars val:'\tgit replace -d $HASH10\n' span_id:1018)
        )
      }
    )
    (C {(test_done)})
  ]
)