(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:'pulling into void' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShFunction
      name: modify
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [{(sed)} {(-e)} {(DQ ($ Id.VSub_Number '$1'))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:31)
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_Number '$2'))}
                    )
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:36)
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_Number '$2') (.x))}
                    )
                  ]
                )
                (C {(mv)} {(DQ ($ Id.VSub_Number '$2') (.x))} {(DQ ($ Id.VSub_Number '$2'))})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: test_pull_autostash
      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]
              children: [
                (C {(git)} {(reset)} {(--hard)} {(before-rebase)})
                (command.Simple
                  words: [{(echo)} {(dirty)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:82)
                      fd: -1
                      arg_word: {(new_file)}
                    )
                  ]
                )
                (C {(git)} {(add)} {(new_file)})
                (C {(git)} {(pull)} {(DQ ($ Id.VSub_At '$@'))} {(.)} {(copy)})
                (C {(test_cmp_rev)} {(HEAD) (Id.Lit_Other '^')} {(copy)})
                (C {(test)} 
                  {
                    (DQ 
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:125)
                        command_list: (command.CommandList children:[(C {(cat)} {(new_file)})])
                      )
                    )
                  } {(Id.Lit_Equals '=')} {(dirty)}
                )
                (C {(test)} 
                  {
                    (DQ 
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:142)
                        command_list: (command.CommandList children:[(C {(cat)} {(file)})])
                      )
                    )
                  } {(Id.Lit_Equals '=')} {(DQ ('modified again'))}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: test_pull_autostash_fail
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {(git)} {(reset)} {(--hard)} {(before-rebase)})
                (command.Simple
                  words: [{(echo)} {(dirty)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:181)
                      fd: -1
                      arg_word: {(new_file)}
                    )
                  ]
                )
                (C {(git)} {(add)} {(new_file)})
                (command.Simple
                  words: [{(test_must_fail)} {(git)} {(pull)} {(DQ ($ Id.VSub_At '$@'))} {(.)} {(copy)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'2>' span_id:210)
                      fd: 2
                      arg_word: {(err)}
                    )
                  ]
                )
                (C {(test_i18ngrep)} {(DQ ('uncommitted changes.'))} {(err)})
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:232) 
          (Token id:Id.Lit_Chars val:'\techo file >file &&\n' span_id:233) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:234) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m original\n' span_id:235)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'pulling into void' span_id:242))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:246) 
          (Token id:Id.Lit_Chars val:'\tgit init cloned &&\n' span_id:247) (Token id:Id.Lit_Chars val:'\t(\n' span_id:248) 
          (Token id:Id.Lit_Chars val:'\t\tcd cloned &&\n' span_id:249) (Token id:Id.Lit_Chars val:'\t\tgit pull ..\n' span_id:250) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:251) (Token id:Id.Lit_Chars val:'\ttest -f file &&\n' span_id:252) 
          (Token id:Id.Lit_Chars val:'\ttest -f cloned/file &&\n' span_id:253) (Token id:Id.Lit_Chars val:'\ttest_cmp file cloned/file\n' span_id:254)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'pulling into void using master:master' span_id:261))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:265) 
          (Token id:Id.Lit_Chars val:'\tgit init cloned-uho &&\n' span_id:266) (Token id:Id.Lit_Chars val:'\t(\n' span_id:267) 
          (Token id:Id.Lit_Chars val:'\t\tcd cloned-uho &&\n' span_id:268) (Token id:Id.Lit_Chars val:'\t\tgit pull .. master:master\n' span_id:269) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:270) (Token id:Id.Lit_Chars val:'\ttest -f file &&\n' span_id:271) 
          (Token id:Id.Lit_Chars val:'\ttest -f cloned-uho/file &&\n' span_id:272) (Token id:Id.Lit_Chars val:'\ttest_cmp file cloned-uho/file\n' span_id:273)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pulling into void does not overwrite untracked files'
            span_id: 280
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:284) 
          (Token id:Id.Lit_Chars val:'\tgit init cloned-untracked &&\n' span_id:285) (Token id:Id.Lit_Chars val:'\t(\n' span_id:286) 
          (Token id:Id.Lit_Chars val:'\t\tcd cloned-untracked &&\n' span_id:287) (Token id:Id.Lit_Chars val:'\t\techo untracked >file &&\n' span_id:288) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_must_fail git pull .. master &&\n'
            span_id: 289
          ) (Token id:Id.Lit_Chars val:'\t\techo untracked >expect &&\n' span_id:290) 
          (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect file\n' span_id:291) (Token id:Id.Lit_Chars val:'\t)\n' span_id:292)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pulling into void does not overwrite staged files'
            span_id: 299
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:303) 
          (Token id:Id.Lit_Chars val:'\tgit init cloned-staged-colliding &&\n' span_id:304) (Token id:Id.Lit_Chars val:'\t(\n' span_id:305) 
          (Token id:Id.Lit_Chars val:'\t\tcd cloned-staged-colliding &&\n' span_id:306) (Token id:Id.Lit_Chars val:'\t\techo "alternate content" >file &&\n' span_id:307) 
          (Token id:Id.Lit_Chars val:'\t\tgit add file &&\n' span_id:308) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git pull .. master &&\n' span_id:309) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "alternate content" >expect &&\n'
            span_id: 310
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect file &&\n' span_id:311) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit cat-file blob :file >file.index &&\n'
            span_id: 312
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect file.index\n' span_id:313) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:314)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pulling into void does not remove new staged files'
            span_id: 321
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:325) 
          (Token id:Id.Lit_Chars val:'\tgit init cloned-staged-new &&\n' span_id:326) (Token id:Id.Lit_Chars val:'\t(\n' span_id:327) 
          (Token id:Id.Lit_Chars val:'\t\tcd cloned-staged-new &&\n' span_id:328) (Token id:Id.Lit_Chars val:'\t\techo "new tracked file" >newfile &&\n' span_id:329) 
          (Token id:Id.Lit_Chars val:'\t\tgit add newfile &&\n' span_id:330) (Token id:Id.Lit_Chars val:'\t\tgit pull .. master &&\n' span_id:331) 
          (Token
            id: Id.Lit_Chars
            val: '\t\techo "new tracked file" >expect &&\n'
            span_id: 332
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect newfile &&\n' span_id:333) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit cat-file blob :newfile >newfile.index &&\n'
            span_id: 334
          ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect newfile.index\n' span_id:335) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:336)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'pulling into void must not create an octopus' span_id:343))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:347) 
          (Token id:Id.Lit_Chars val:'\tgit init cloned-octopus &&\n' span_id:348) (Token id:Id.Lit_Chars val:'\t(\n' span_id:349) 
          (Token id:Id.Lit_Chars val:'\t\tcd cloned-octopus &&\n' span_id:350) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git pull .. master master &&\n' span_id:351) 
          (Token id:Id.Lit_Chars val:'\t\t! test -f file\n' span_id:352) (Token id:Id.Lit_Chars val:'\t)\n' span_id:353)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'test . as a remote' span_id:360))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:364) 
          (Token id:Id.Lit_Chars val:'\tgit branch copy master &&\n' span_id:365) (Token id:Id.Lit_Chars val:'\tgit config branch.copy.remote . &&\n' span_id:366) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config branch.copy.merge refs/heads/master &&\n'
            span_id: 367
          ) (Token id:Id.Lit_Chars val:'\techo updated >file &&\n' span_id:368) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m updated &&\n' span_id:369) (Token id:Id.Lit_Chars val:'\tgit checkout copy &&\n' span_id:370) 
          (Token id:Id.Lit_Chars val:'\ttest "$(cat file)" = file &&\n' span_id:371) (Token id:Id.Lit_Chars val:'\tgit pull &&\n' span_id:372) 
          (Token id:Id.Lit_Chars val:'\ttest "$(cat file)" = updated &&\n' span_id:373) (Token id:Id.Lit_Chars val:'\tgit reflog -1 >reflog.actual &&\n' span_id:374) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed "s/^[0-9a-f][0-9a-f]*/OBJID/" reflog.actual >reflog.fuzzy &&\n'
            span_id: 375
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "OBJID HEAD@{0}: pull: Fast-forward" >reflog.expected &&\n'
            span_id: 376
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp reflog.expected reflog.fuzzy\n' span_id:377)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'the default remote . should not break explicit pull'
            span_id: 384
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:388) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b second master^ &&\n' span_id:389) (Token id:Id.Lit_Chars val:'\techo modified >file &&\n' span_id:390) 
          (Token id:Id.Lit_Chars val:'\tgit commit -a -m modified &&\n' span_id:391) (Token id:Id.Lit_Chars val:'\tgit checkout copy &&\n' span_id:392) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD^ &&\n' span_id:393) (Token id:Id.Lit_Chars val:'\ttest "$(cat file)" = file &&\n' span_id:394) 
          (Token id:Id.Lit_Chars val:'\tgit pull . second &&\n' span_id:395) (Token id:Id.Lit_Chars val:'\ttest "$(cat file)" = modified &&\n' span_id:396) 
          (Token id:Id.Lit_Chars val:'\tgit reflog -1 >reflog.actual &&\n' span_id:397) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed "s/^[0-9a-f][0-9a-f]*/OBJID/" reflog.actual >reflog.fuzzy &&\n'
            span_id: 398
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "OBJID HEAD@{0}: pull . second: Fast-forward" >reflog.expected &&\n'
            span_id: 399
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp reflog.expected reflog.fuzzy\n' span_id:400)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fail if wildcard spec does not match any refs' span_id:407))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:411) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b test copy^ &&\n' span_id:412) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git checkout -f copy && git branch -D test" &&\n'
            span_id: 413
          ) (Token id:Id.Lit_Chars val:'\ttest "$(cat file)" = file &&\n' span_id:414) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git pull . "refs/nonexisting1/*:refs/nonexisting2/*" 2>err &&\n'
            span_id: 415
          ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "no candidates for merging" err &&\n' span_id:416) 
          (Token id:Id.Lit_Chars val:'\ttest "$(cat file)" = file\n' span_id:417)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'fail if no branches specified with non-default remote'
            span_id: 424
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:428) 
          (Token id:Id.Lit_Chars val:'\tgit remote add test_remote . &&\n' span_id:429) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git remote remove test_remote" &&\n' span_id:430) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b test copy^ &&\n' span_id:431) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git checkout -f copy && git branch -D test" &&\n'
            span_id: 432
          ) (Token id:Id.Lit_Chars val:'\ttest "$(cat file)" = file &&\n' span_id:433) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config branch.test.remote origin &&\n'
            span_id: 434
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git pull test_remote 2>err &&\n' span_id:435) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep "specify a branch on the command line" err &&\n'
            span_id: 436
          ) (Token id:Id.Lit_Chars val:'\ttest "$(cat file)" = file\n' span_id:437)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'fail if not on a branch' span_id:444))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:448) 
          (Token id:Id.Lit_Chars val:'\tgit remote add origin . &&\n' span_id:449) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git remote remove origin" &&\n' span_id:450) 
          (Token id:Id.Lit_Chars val:'\tgit checkout HEAD^ &&\n' span_id:451) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git checkout -f copy" &&\n' span_id:452) 
          (Token id:Id.Lit_Chars val:'\ttest "$(cat file)" = file &&\n' span_id:453) (Token id:Id.Lit_Chars val:'\ttest_must_fail git pull 2>err &&\n' span_id:454) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep "not currently on a branch" err &&\n'
            span_id: 455
          ) (Token id:Id.Lit_Chars val:'\ttest "$(cat file)" = file\n' span_id:456)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fail if no configuration for current branch' span_id:463))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:467) 
          (Token id:Id.Lit_Chars val:'\tgit remote add test_remote . &&\n' span_id:468) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git remote remove test_remote" &&\n' span_id:469) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b test copy^ &&\n' span_id:470) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git checkout -f copy && git branch -D test" &&\n'
            span_id: 471
          ) (Token id:Id.Lit_Chars val:'\ttest_config branch.test.remote test_remote &&\n' span_id:472) 
          (Token id:Id.Lit_Chars val:'\ttest "$(cat file)" = file &&\n' span_id:473) (Token id:Id.Lit_Chars val:'\ttest_must_fail git pull 2>err &&\n' span_id:474) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep "no tracking information" err &&\n'
            span_id: 475
          ) (Token id:Id.Lit_Chars val:'\ttest "$(cat file)" = file\n' span_id:476)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pull --all: fail if no configuration for current branch'
            span_id: 483
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:487) 
          (Token id:Id.Lit_Chars val:'\tgit remote add test_remote . &&\n' span_id:488) (Token id:Id.Lit_Chars val:'\ttest_when_finished "git remote remove test_remote" &&\n' span_id:489) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b test copy^ &&\n' span_id:490) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git checkout -f copy && git branch -D test" &&\n'
            span_id: 491
          ) (Token id:Id.Lit_Chars val:'\ttest_config branch.test.remote test_remote &&\n' span_id:492) 
          (Token id:Id.Lit_Chars val:'\ttest "$(cat file)" = file &&\n' span_id:493) (Token id:Id.Lit_Chars val:'\ttest_must_fail git pull --all 2>err &&\n' span_id:494) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep "There is no tracking information" err &&\n'
            span_id: 495
          ) (Token id:Id.Lit_Chars val:'\ttest "$(cat file)" = file\n' span_id:496)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fail if upstream branch does not exist' span_id:503))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:507) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b test copy^ &&\n' span_id:508) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git checkout -f copy && git branch -D test" &&\n'
            span_id: 509
          ) (Token id:Id.Lit_Chars val:'\ttest_config branch.test.remote . &&\n' span_id:510) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config branch.test.merge refs/heads/nonexisting &&\n'
            span_id: 511
          ) (Token id:Id.Lit_Chars val:'\ttest "$(cat file)" = file &&\n' span_id:512) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git pull 2>err &&\n' span_id:513) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "no such ref was fetched" err &&\n' span_id:514) 
          (Token id:Id.Lit_Chars val:'\ttest "$(cat file)" = file\n' span_id:515)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fail if the index has unresolved entries' span_id:522))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:526) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b third second^ &&\n' span_id:527) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git checkout -f copy && git branch -D third" &&\n'
            span_id: 528
          ) (Token id:Id.Lit_Chars val:'\ttest "$(cat file)" = file &&\n' span_id:529) 
          (Token id:Id.Lit_Chars val:'\ttest_commit modified2 file &&\n' span_id:530) (Token id:Id.Lit_Chars val:'\ttest -z "$(git ls-files -u)" &&\n' span_id:531) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git pull . second &&\n' span_id:532) (Token id:Id.Lit_Chars val:'\ttest -n "$(git ls-files -u)" &&\n' span_id:533) 
          (Token id:Id.Lit_Chars val:'\tcp file expected &&\n' span_id:534) (Token id:Id.Lit_Chars val:'\ttest_must_fail git pull . second 2>err &&\n' span_id:535) 
          (Token
            id: Id.Lit_Chars
            val: 
'\ttest_i18ngrep "Pulling is not possible because you have unmerged files." err &&\n'
            span_id: 536
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected file &&\n' span_id:537) 
          (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:538) (Token id:Id.Lit_Chars val:'\ttest -z "$(git ls-files -u)" &&\n' span_id:539) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git pull . second 2>err &&\n'
            span_id: 540
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep "You have not concluded your merge" err &&\n'
            span_id: 541
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected file\n' span_id:542)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'fast-forwards working tree if branch head is updated'
            span_id: 549
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:553) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b third second^ &&\n' span_id:554) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git checkout -f copy && git branch -D third" &&\n'
            span_id: 555
          ) (Token id:Id.Lit_Chars val:'\ttest "$(cat file)" = file &&\n' span_id:556) 
          (Token id:Id.Lit_Chars val:'\tgit pull . second:third 2>err &&\n' span_id:557) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep "fetch updated the current branch head" err &&\n'
            span_id: 558
          ) (Token id:Id.Lit_Chars val:'\ttest "$(cat file)" = modified &&\n' span_id:559) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse third)" = "$(git rev-parse second)"\n'
            span_id: 560
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fast-forward fails with conflicting work tree' span_id:567))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:571) 
          (Token id:Id.Lit_Chars val:'\tgit checkout -b third second^ &&\n' span_id:572) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git checkout -f copy && git branch -D third" &&\n'
            span_id: 573
          ) (Token id:Id.Lit_Chars val:'\ttest "$(cat file)" = file &&\n' span_id:574) 
          (Token id:Id.Lit_Chars val:'\techo conflict >file &&\n' span_id:575) (Token id:Id.Lit_Chars val:'\ttest_must_fail git pull . second:third 2>err &&\n' span_id:576) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep "Cannot fast-forward your working tree" err &&\n'
            span_id: 577
          ) (Token id:Id.Lit_Chars val:'\ttest "$(cat file)" = conflict &&\n' span_id:578) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse third)" = "$(git rev-parse second)"\n'
            span_id: 579
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:--rebase span_id:586))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:590) 
          (Token id:Id.Lit_Chars val:'\tgit branch to-rebase &&\n' span_id:591) (Token id:Id.Lit_Chars val:'\techo modified again > file &&\n' span_id:592) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m file file &&\n' span_id:593) (Token id:Id.Lit_Chars val:'\tgit checkout to-rebase &&\n' span_id:594) 
          (Token id:Id.Lit_Chars val:'\techo new > file2 &&\n' span_id:595) (Token id:Id.Lit_Chars val:'\tgit add file2 &&\n' span_id:596) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m "new file" &&\n' span_id:597) (Token id:Id.Lit_Chars val:'\tgit tag before-rebase &&\n' span_id:598) 
          (Token id:Id.Lit_Chars val:'\tgit pull --rebase . copy &&\n' span_id:599) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse HEAD^)" = "$(git rev-parse copy)" &&\n'
            span_id: 600
          ) (Token id:Id.Lit_Chars val:'\ttest new = "$(git show HEAD:file2)"\n' span_id:601)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--rebase with conflicts shows advice' span_id:608))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:612) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git rebase --abort; git checkout -f to-rebase" &&\n'
            span_id: 613
          ) (Token id:Id.Lit_Chars val:'\tgit checkout -b seq &&\n' span_id:614) 
          (Token id:Id.Lit_Chars val:'\ttest_seq 5 >seq.txt &&\n' span_id:615) (Token id:Id.Lit_Chars val:'\tgit add seq.txt &&\n' span_id:616) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:617) (Token id:Id.Lit_Chars val:'\tgit commit -m "Add seq.txt" &&\n' span_id:618) 
          (Token id:Id.Lit_Chars val:'\techo 6 >>seq.txt &&\n' span_id:619) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:620) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m "Append to seq.txt" seq.txt &&\n'
            span_id: 621
          ) (Token id:Id.Lit_Chars val:'\tgit checkout -b with-conflicts HEAD^ &&\n' span_id:622) 
          (Token id:Id.Lit_Chars val:'\techo conflicting >>seq.txt &&\n' span_id:623) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:624) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m "Create conflict" seq.txt &&\n'
            span_id: 625
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git pull --rebase . seq 2>err >out &&\n' span_id:626) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep "When you have resolved this problem" out\n'
            span_id: 627
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'failed --rebase shows advice' span_id:634))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:638) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git rebase --abort; git checkout -f to-rebase" &&\n'
            span_id: 639
          ) (Token id:Id.Lit_Chars val:'\tgit checkout -b diverging &&\n' span_id:640) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_commit attributes .gitattributes "* text=auto" attrs &&\n'
            span_id: 641
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tsha1="$(printf "1\\\\r\\\\n" | git hash-object -w --stdin)" &&\n'
            span_id: 642
          ) (Token id:Id.Lit_Chars val:'\tgit update-index --cacheinfo 0644 $sha1 file &&\n' span_id:643) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m v1-with-cr &&\n' span_id:644) 
          (Token
            id: Id.Lit_Chars
            val: '\t# force checkout because `git reset --hard` will not leave clean `file`\n'
            span_id: 645
          ) (Token id:Id.Lit_Chars val:'\tgit checkout -f -b fails-to-rebase HEAD^ &&\n' span_id:646) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_commit v2-without-cr file "2" file2-lf &&\n'
            span_id: 647
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git pull --rebase . diverging 2>err >out &&\n'
            span_id: 648
          ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "When you have resolved this problem" out\n' span_id:649)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--rebase fails with multiple branches' span_id:656))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:660) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard before-rebase &&\n' span_id:661) (Token id:Id.Lit_Chars val:'\ttest_must_fail git pull --rebase . copy master 2>err &&\n' span_id:662) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse HEAD)" = "$(git rev-parse before-rebase)" &&\n'
            span_id: 663
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep "Cannot rebase onto multiple branches" err &&\n'
            span_id: 664
          ) (Token id:Id.Lit_Chars val:'\ttest modified = "$(git show HEAD:file)"\n' span_id:665)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pull --rebase succeeds with dirty working directory and rebase.autostash set'
            span_id: 672
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:676) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config rebase.autostash true &&\n'
            span_id: 677
          ) (Token id:Id.Lit_Chars val:'\ttest_pull_autostash --rebase\n' span_id:678)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pull --rebase --autostash & rebase.autostash=true'
            span_id: 685
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:689) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config rebase.autostash true &&\n'
            span_id: 690
          ) (Token id:Id.Lit_Chars val:'\ttest_pull_autostash --rebase --autostash\n' span_id:691)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pull --rebase --autostash & rebase.autostash=false'
            span_id: 698
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:702) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config rebase.autostash false &&\n'
            span_id: 703
          ) (Token id:Id.Lit_Chars val:'\ttest_pull_autostash --rebase --autostash\n' span_id:704)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pull --rebase --autostash & rebase.autostash unset'
            span_id: 711
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:715) 
          (Token id:Id.Lit_Chars val:'\ttest_unconfig rebase.autostash &&\n' span_id:716) (Token id:Id.Lit_Chars val:'\ttest_pull_autostash --rebase --autostash\n' span_id:717)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pull --rebase --no-autostash & rebase.autostash=true'
            span_id: 724
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:728) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config rebase.autostash true &&\n'
            span_id: 729
          ) (Token id:Id.Lit_Chars val:'\ttest_pull_autostash_fail --rebase --no-autostash\n' span_id:730)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pull --rebase --no-autostash & rebase.autostash=false'
            span_id: 737
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:741) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config rebase.autostash false &&\n'
            span_id: 742
          ) (Token id:Id.Lit_Chars val:'\ttest_pull_autostash_fail --rebase --no-autostash\n' span_id:743)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pull --rebase --no-autostash & rebase.autostash unset'
            span_id: 750
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:754) 
          (Token id:Id.Lit_Chars val:'\ttest_unconfig rebase.autostash &&\n' span_id:755) (Token id:Id.Lit_Chars val:'\ttest_pull_autostash_fail --rebase --no-autostash\n' span_id:756)
        )
      }
    )
    (command.ForEach
      iter_name: i
      iter_words: [{(--autostash)} {(--no-autostash)}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (C {(test_expect_success)} 
              {(DQ ('pull ') ($ Id.VSub_DollarName '$i') (' (without --rebase) is illegal'))} 
              {
                (SQ (Token id:Id.Lit_Chars val:'\n' span_id:782) 
                  (Token
                    id: Id.Lit_Chars
                    val: '\t\ttest_must_fail git pull $i . copy 2>err &&\n'
                    span_id: 783
                  ) (Token id:Id.Lit_Chars val:'\t\ttest_i18ngrep "only valid with --rebase" err\n' span_id:784) 
                  (Token id:Id.Lit_Chars val:'\t' span_id:785)
                )
              }
            )
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:pull.rebase span_id:794))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:798) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard before-rebase &&\n' span_id:799) (Token id:Id.Lit_Chars val:'\ttest_config pull.rebase true &&\n' span_id:800) 
          (Token id:Id.Lit_Chars val:'\tgit pull . copy &&\n' span_id:801) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse HEAD^)" = "$(git rev-parse copy)" &&\n'
            span_id: 802
          ) (Token id:Id.Lit_Chars val:'\ttest new = "$(git show HEAD:file2)"\n' span_id:803)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'pull --autostash & pull.rebase=true' span_id:810))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:814) 
          (Token id:Id.Lit_Chars val:'\ttest_config pull.rebase true &&\n' span_id:815) (Token id:Id.Lit_Chars val:'\ttest_pull_autostash --autostash\n' span_id:816)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'pull --no-autostash & pull.rebase=true' span_id:823))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:827) 
          (Token id:Id.Lit_Chars val:'\ttest_config pull.rebase true &&\n' span_id:828) (Token id:Id.Lit_Chars val:'\ttest_pull_autostash_fail --no-autostash\n' span_id:829)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:branch.to-rebase.rebase span_id:836))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:840) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard before-rebase &&\n' span_id:841) (Token id:Id.Lit_Chars val:'\ttest_config branch.to-rebase.rebase true &&\n' span_id:842) 
          (Token id:Id.Lit_Chars val:'\tgit pull . copy &&\n' span_id:843) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse HEAD^)" = "$(git rev-parse copy)" &&\n'
            span_id: 844
          ) (Token id:Id.Lit_Chars val:'\ttest new = "$(git show HEAD:file2)"\n' span_id:845)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'branch.to-rebase.rebase should override pull.rebase'
            span_id: 852
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:856) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard before-rebase &&\n' span_id:857) (Token id:Id.Lit_Chars val:'\ttest_config pull.rebase true &&\n' span_id:858) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config branch.to-rebase.rebase false &&\n'
            span_id: 859
          ) (Token id:Id.Lit_Chars val:'\tgit pull . copy &&\n' span_id:860) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse HEAD^)" != "$(git rev-parse copy)" &&\n'
            span_id: 861
          ) (Token id:Id.Lit_Chars val:'\ttest new = "$(git show HEAD:file2)"\n' span_id:862)
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('pull --rebase warns on --verify-signatures'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:873) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard before-rebase &&\n' span_id:874) (Token id:Id.Lit_Chars val:'\tgit pull --rebase --verify-signatures . copy 2>err &&\n' span_id:875) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse HEAD^)" = "$(git rev-parse copy)" &&\n'
            span_id: 876
          ) (Token id:Id.Lit_Chars val:'\ttest new = "$(git show HEAD:file2)" &&\n' span_id:877) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep "ignoring --verify-signatures for rebase" err\n'
            span_id: 878
          )
        )
      }
    )
    (C {(test_expect_success)} {(DQ ('pull --rebase does not warn on --no-verify-signatures'))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:889) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard before-rebase &&\n' span_id:890) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit pull --rebase --no-verify-signatures . copy 2>err &&\n'
            span_id: 891
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse HEAD^)" = "$(git rev-parse copy)" &&\n'
            span_id: 892
          ) (Token id:Id.Lit_Chars val:'\ttest new = "$(git show HEAD:file2)" &&\n' span_id:893) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_i18ngrep ! "verify-signatures" err\n'
            span_id: 894
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'preserve merge setup' span_id:910))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:914) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard before-rebase &&\n' span_id:915) (Token id:Id.Lit_Chars val:'\tgit checkout -b keep-merge second^ &&\n' span_id:916) 
          (Token id:Id.Lit_Chars val:'\ttest_commit file3 &&\n' span_id:917) (Token id:Id.Lit_Chars val:'\tgit checkout to-rebase &&\n' span_id:918) 
          (Token id:Id.Lit_Chars val:'\tgit merge keep-merge &&\n' span_id:919) (Token id:Id.Lit_Chars val:'\tgit tag before-preserve-rebase\n' span_id:920)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'pull.rebase=false create a new merge commit' span_id:927))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:931) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit reset --hard before-preserve-rebase &&\n'
            span_id: 932
          ) (Token id:Id.Lit_Chars val:'\ttest_config pull.rebase false &&\n' span_id:933) 
          (Token id:Id.Lit_Chars val:'\tgit pull . copy &&\n' span_id:934) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse HEAD^1)" = "$(git rev-parse before-preserve-rebase)" &&\n'
            span_id: 935
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse HEAD^2)" = "$(git rev-parse copy)" &&\n'
            span_id: 936
          ) (Token id:Id.Lit_Chars val:'\ttest file3 = "$(git show HEAD:file3.t)"\n' span_id:937)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'pull.rebase=true flattens keep-merge' span_id:944))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:948) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit reset --hard before-preserve-rebase &&\n'
            span_id: 949
          ) (Token id:Id.Lit_Chars val:'\ttest_config pull.rebase true &&\n' span_id:950) 
          (Token id:Id.Lit_Chars val:'\tgit pull . copy &&\n' span_id:951) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse HEAD^^)" = "$(git rev-parse copy)" &&\n'
            span_id: 952
          ) (Token id:Id.Lit_Chars val:'\ttest file3 = "$(git show HEAD:file3.t)"\n' span_id:953)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pull.rebase=1 is treated as true and flattens keep-merge'
            span_id: 960
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:964) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit reset --hard before-preserve-rebase &&\n'
            span_id: 965
          ) (Token id:Id.Lit_Chars val:'\ttest_config pull.rebase 1 &&\n' span_id:966) 
          (Token id:Id.Lit_Chars val:'\tgit pull . copy &&\n' span_id:967) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse HEAD^^)" = "$(git rev-parse copy)" &&\n'
            span_id: 968
          ) (Token id:Id.Lit_Chars val:'\ttest file3 = "$(git show HEAD:file3.t)"\n' span_id:969)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pull.rebase=preserve rebases and merges keep-merge'
            span_id: 976
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:980) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit reset --hard before-preserve-rebase &&\n'
            span_id: 981
          ) (Token id:Id.Lit_Chars val:'\ttest_config pull.rebase preserve &&\n' span_id:982) 
          (Token id:Id.Lit_Chars val:'\tgit pull . copy &&\n' span_id:983) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse HEAD^^)" = "$(git rev-parse copy)" &&\n'
            span_id: 984
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse HEAD^2)" = "$(git rev-parse keep-merge)"\n'
            span_id: 985
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'pull.rebase=interactive' span_id:992))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:996) 
          (Token
            id: Id.Lit_Chars
            val: '\twrite_script "$TRASH_DIRECTORY/fake-editor" <<-\\EOF &&\n'
            span_id: 997
          ) (Token id:Id.Lit_Chars val:'\techo I was here >fake.out &&\n' span_id:998) 
          (Token id:Id.Lit_Chars val:'\tfalse\n' span_id:999) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1000) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_set_editor "$TRASH_DIRECTORY/fake-editor" &&\n'
            span_id: 1001
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git pull --rebase=interactive . copy &&\n' span_id:1002) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "I was here" = "$(cat fake.out)"\n'
            span_id: 1003
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'pull.rebase=invalid fails' span_id:1010))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1014) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit reset --hard before-preserve-rebase &&\n'
            span_id: 1015
          ) (Token id:Id.Lit_Chars val:'\ttest_config pull.rebase invalid &&\n' span_id:1016) 
          (Token id:Id.Lit_Chars val:'\t! git pull . copy\n' span_id:1017)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--rebase=false create a new merge commit' span_id:1024))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1028) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit reset --hard before-preserve-rebase &&\n'
            span_id: 1029
          ) (Token id:Id.Lit_Chars val:'\ttest_config pull.rebase true &&\n' span_id:1030) 
          (Token id:Id.Lit_Chars val:'\tgit pull --rebase=false . copy &&\n' span_id:1031) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse HEAD^1)" = "$(git rev-parse before-preserve-rebase)" &&\n'
            span_id: 1032
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse HEAD^2)" = "$(git rev-parse copy)" &&\n'
            span_id: 1033
          ) (Token id:Id.Lit_Chars val:'\ttest file3 = "$(git show HEAD:file3.t)"\n' span_id:1034)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--rebase=true rebases and flattens keep-merge' span_id:1041))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1045) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit reset --hard before-preserve-rebase &&\n'
            span_id: 1046
          ) (Token id:Id.Lit_Chars val:'\ttest_config pull.rebase preserve &&\n' span_id:1047) 
          (Token id:Id.Lit_Chars val:'\tgit pull --rebase=true . copy &&\n' span_id:1048) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse HEAD^^)" = "$(git rev-parse copy)" &&\n'
            span_id: 1049
          ) (Token id:Id.Lit_Chars val:'\ttest file3 = "$(git show HEAD:file3.t)"\n' span_id:1050)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '--rebase=preserve rebases and merges keep-merge'
            span_id: 1057
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1061) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit reset --hard before-preserve-rebase &&\n'
            span_id: 1062
          ) (Token id:Id.Lit_Chars val:'\ttest_config pull.rebase true &&\n' span_id:1063) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit pull --rebase=preserve . copy &&\n'
            span_id: 1064
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse HEAD^^)" = "$(git rev-parse copy)" &&\n'
            span_id: 1065
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse HEAD^2)" = "$(git rev-parse keep-merge)"\n'
            span_id: 1066
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'--rebase=invalid fails' span_id:1073))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1077) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit reset --hard before-preserve-rebase &&\n'
            span_id: 1078
          ) (Token id:Id.Lit_Chars val:'\t! git pull --rebase=invalid . copy\n' span_id:1079)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '--rebase overrides pull.rebase=preserve and flattens keep-merge'
            span_id: 1086
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1090) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit reset --hard before-preserve-rebase &&\n'
            span_id: 1091
          ) (Token id:Id.Lit_Chars val:'\ttest_config pull.rebase preserve &&\n' span_id:1092) 
          (Token id:Id.Lit_Chars val:'\tgit pull --rebase . copy &&\n' span_id:1093) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$(git rev-parse HEAD^^)" = "$(git rev-parse copy)" &&\n'
            span_id: 1094
          ) (Token id:Id.Lit_Chars val:'\ttest file3 = "$(git show HEAD:file3.t)"\n' span_id:1095)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--rebase with rebased upstream' span_id:1102))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1106) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1107) (Token id:Id.Lit_Chars val:'\tgit remote add -f me . &&\n' span_id:1108) 
          (Token id:Id.Lit_Chars val:'\tgit checkout copy &&\n' span_id:1109) (Token id:Id.Lit_Chars val:'\tgit tag copy-orig &&\n' span_id:1110) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD^ &&\n' span_id:1111) (Token id:Id.Lit_Chars val:'\techo conflicting modification > file &&\n' span_id:1112) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m conflict file &&\n' span_id:1113) (Token id:Id.Lit_Chars val:'\tgit checkout to-rebase &&\n' span_id:1114) 
          (Token id:Id.Lit_Chars val:'\techo file > file2 &&\n' span_id:1115) (Token id:Id.Lit_Chars val:'\tgit commit -m to-rebase file2 &&\n' span_id:1116) 
          (Token id:Id.Lit_Chars val:'\tgit tag to-rebase-orig &&\n' span_id:1117) (Token id:Id.Lit_Chars val:'\tgit pull --rebase me copy &&\n' span_id:1118) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "conflicting modification" = "$(cat file)" &&\n'
            span_id: 1119
          ) (Token id:Id.Lit_Chars val:'\ttest file = "$(cat file2)"\n' span_id:1120) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1121)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--rebase -f with rebased upstream' span_id:1128))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1132) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "test_might_fail git rebase --abort" &&\n'
            span_id: 1133
          ) (Token id:Id.Lit_Chars val:'\tgit reset --hard to-rebase-orig &&\n' span_id:1134) 
          (Token id:Id.Lit_Chars val:'\tgit pull --rebase -f me copy &&\n' span_id:1135) (Token id:Id.Lit_Chars val:'\ttest "conflicting modification" = "$(cat file)" &&\n' span_id:1136) 
          (Token id:Id.Lit_Chars val:'\ttest file = "$(cat file2)"\n' span_id:1137)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'--rebase with rebased default upstream' span_id:1144))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1148) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1149) (Token id:Id.Lit_Chars val:'\tgit update-ref refs/remotes/me/copy copy-orig &&\n' span_id:1150) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout --track -b to-rebase2 me/copy &&\n'
            span_id: 1151
          ) (Token id:Id.Lit_Chars val:'\tgit reset --hard to-rebase-orig &&\n' span_id:1152) 
          (Token id:Id.Lit_Chars val:'\tgit pull --rebase &&\n' span_id:1153) (Token id:Id.Lit_Chars val:'\ttest "conflicting modification" = "$(cat file)" &&\n' span_id:1154) 
          (Token id:Id.Lit_Chars val:'\ttest file = "$(cat file2)"\n' span_id:1155) (Token id:Id.Lit_Chars val:'\n' span_id:1156)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'rebased upstream + fetch + pull --rebase' span_id:1163))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1167) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1168) (Token id:Id.Lit_Chars val:'\tgit update-ref refs/remotes/me/copy copy-orig &&\n' span_id:1169) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard to-rebase-orig &&\n' span_id:1170) (Token id:Id.Lit_Chars val:'\tgit checkout --track -b to-rebase3 me/copy &&\n' span_id:1171) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard to-rebase-orig &&\n' span_id:1172) (Token id:Id.Lit_Chars val:'\tgit fetch &&\n' span_id:1173) 
          (Token id:Id.Lit_Chars val:'\tgit pull --rebase &&\n' span_id:1174) (Token id:Id.Lit_Chars val:'\ttest "conflicting modification" = "$(cat file)" &&\n' span_id:1175) 
          (Token id:Id.Lit_Chars val:'\ttest file = "$(cat file2)"\n' span_id:1176) (Token id:Id.Lit_Chars val:'\n' span_id:1177)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pull --rebase dies early with dirty working directory'
            span_id: 1184
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1188) 
          (Token id:Id.Lit_Chars val:'\n' span_id:1189) (Token id:Id.Lit_Chars val:'\tgit checkout to-rebase &&\n' span_id:1190) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref refs/remotes/me/copy copy^ &&\n'
            span_id: 1191
          ) (Token id:Id.Lit_Chars val:'\tCOPY="$(git rev-parse --verify me/copy)" &&\n' span_id:1192) 
          (Token id:Id.Lit_Chars val:'\tgit rebase --onto $COPY copy &&\n' span_id:1193) (Token id:Id.Lit_Chars val:'\ttest_config branch.to-rebase.remote me &&\n' span_id:1194) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_config branch.to-rebase.merge refs/heads/copy &&\n'
            span_id: 1195
          ) (Token id:Id.Lit_Chars val:'\ttest_config branch.to-rebase.rebase true &&\n' span_id:1196) 
          (Token id:Id.Lit_Chars val:'\techo dirty >> file &&\n' span_id:1197) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:1198) 
          (Token id:Id.Lit_Chars val:'\ttest_must_fail git pull &&\n' span_id:1199) (Token id:Id.Lit_Chars val:'\ttest "$COPY" = "$(git rev-parse --verify me/copy)" &&\n' span_id:1200) 
          (Token id:Id.Lit_Chars val:'\tgit checkout HEAD -- file &&\n' span_id:1201) (Token id:Id.Lit_Chars val:'\tgit pull &&\n' span_id:1202) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "$COPY" != "$(git rev-parse --verify me/copy)"\n'
            span_id: 1203
          ) (Token id:Id.Lit_Chars val:'\n' span_id:1204)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'pull --rebase works on branch yet to be born' span_id:1211))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1215) 
          (Token id:Id.Lit_Chars val:'\tgit rev-parse master >expect &&\n' span_id:1216) (Token id:Id.Lit_Chars val:'\tmkdir empty_repo &&\n' span_id:1217) 
          (Token id:Id.Lit_Chars val:'\t(cd empty_repo &&\n' span_id:1218) (Token id:Id.Lit_Chars val:'\t git init &&\n' span_id:1219) 
          (Token id:Id.Lit_Chars val:'\t git pull --rebase .. master &&\n' span_id:1220) (Token id:Id.Lit_Chars val:'\t git rev-parse HEAD >../actual\n' span_id:1221) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1222) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:1223)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pull --rebase fails on unborn branch with staged changes'
            span_id: 1230
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1234) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "rm -rf empty_repo2" &&\n'
            span_id: 1235
          ) (Token id:Id.Lit_Chars val:'\tgit init empty_repo2 &&\n' span_id:1236) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:1237) (Token id:Id.Lit_Chars val:'\t\tcd empty_repo2 &&\n' span_id:1238) 
          (Token id:Id.Lit_Chars val:'\t\techo staged-file >staged-file &&\n' span_id:1239) (Token id:Id.Lit_Chars val:'\t\tgit add staged-file &&\n' span_id:1240) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest "$(git ls-files)" = staged-file &&\n'
            span_id: 1241
          ) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git pull --rebase .. master 2>err &&\n' span_id:1242) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest "$(git ls-files)" = staged-file &&\n'
            span_id: 1243
          ) (Token id:Id.Lit_Chars val:'\t\ttest "$(git show :staged-file)" = staged-file &&\n' span_id:1244) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_i18ngrep "unborn branch with changes added to the index" err\n'
            span_id: 1245
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1246)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'setup for detecting upstreamed changes' span_id:1253))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1257) 
          (Token id:Id.Lit_Chars val:'\tmkdir src &&\n' span_id:1258) (Token id:Id.Lit_Chars val:'\t(cd src &&\n' span_id:1259) 
          (Token id:Id.Lit_Chars val:'\t git init &&\n' span_id:1260) 
          (Token
            id: Id.Lit_Chars
            val: '\t printf "1\\n2\\n3\\n4\\n5\\n6\\n7\\n8\\n9\\n10\\n" > stuff &&\n'
            span_id: 1261
          ) (Token id:Id.Lit_Chars val:'\t git add stuff &&\n' span_id:1262) 
          (Token id:Id.Lit_Chars val:'\t git commit -m "Initial revision"\n' span_id:1263) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1264) 
          (Token id:Id.Lit_Chars val:'\tgit clone src dst &&\n' span_id:1265) (Token id:Id.Lit_Chars val:'\t(cd src &&\n' span_id:1266) 
          (Token id:Id.Lit_Chars val:'\t modify s/5/43/ stuff &&\n' span_id:1267) (Token id:Id.Lit_Chars val:'\t git commit -a -m "5->43" &&\n' span_id:1268) 
          (Token id:Id.Lit_Chars val:'\t modify s/6/42/ stuff &&\n' span_id:1269) (Token id:Id.Lit_Chars val:'\t git commit -a -m "Make it bigger"\n' span_id:1270) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1271) (Token id:Id.Lit_Chars val:'\t(cd dst &&\n' span_id:1272) 
          (Token id:Id.Lit_Chars val:'\t modify s/5/43/ stuff &&\n' span_id:1273) (Token id:Id.Lit_Chars val:'\t git commit -a -m "Independent discovery of 5->43"\n' span_id:1274) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:1275)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git pull --rebase detects upstreamed changes' span_id:1282))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1286) 
          (Token id:Id.Lit_Chars val:'\t(cd dst &&\n' span_id:1287) (Token id:Id.Lit_Chars val:'\t git pull --rebase &&\n' span_id:1288) 
          (Token id:Id.Lit_Chars val:'\t test -z "$(git ls-files -u)"\n' span_id:1289) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1290)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'setup for avoiding reapplying old patches' span_id:1297))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1301) 
          (Token id:Id.Lit_Chars val:'\t(cd dst &&\n' span_id:1302) (Token id:Id.Lit_Chars val:'\t test_might_fail git rebase --abort &&\n' span_id:1303) 
          (Token id:Id.Lit_Chars val:'\t git reset --hard origin/master\n' span_id:1304) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1305) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit clone --bare src src-replace.git &&\n'
            span_id: 1306
          ) (Token id:Id.Lit_Chars val:'\trm -rf src &&\n' span_id:1307) 
          (Token id:Id.Lit_Chars val:'\tmv src-replace.git src &&\n' span_id:1308) (Token id:Id.Lit_Chars val:'\t(cd dst &&\n' span_id:1309) 
          (Token id:Id.Lit_Chars val:'\t modify s/2/22/ stuff &&\n' span_id:1310) (Token id:Id.Lit_Chars val:'\t git commit -a -m "Change 2" &&\n' span_id:1311) 
          (Token id:Id.Lit_Chars val:'\t modify s/3/33/ stuff &&\n' span_id:1312) (Token id:Id.Lit_Chars val:'\t git commit -a -m "Change 3" &&\n' span_id:1313) 
          (Token id:Id.Lit_Chars val:'\t modify s/4/44/ stuff &&\n' span_id:1314) (Token id:Id.Lit_Chars val:'\t git commit -a -m "Change 4" &&\n' span_id:1315) 
          (Token id:Id.Lit_Chars val:'\t git push &&\n' span_id:1316) (Token id:Id.Lit_Chars val:'\n' span_id:1317) 
          (Token id:Id.Lit_Chars val:'\t modify s/44/55/ stuff &&\n' span_id:1318) (Token id:Id.Lit_Chars val:'\t git commit --amend -a -m "Modified Change 4"\n' span_id:1319) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:1320)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git pull --rebase does not reapply old patches' span_id:1327))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1331) 
          (Token id:Id.Lit_Chars val:'\t(cd dst &&\n' span_id:1332) (Token id:Id.Lit_Chars val:'\t test_must_fail git pull --rebase &&\n' span_id:1333) 
          (Token
            id: Id.Lit_Chars
            val: '\t test 1 = $(find .git/rebase-apply -name "000*" | wc -l)\n'
            span_id: 1334
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:1335)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'git pull --rebase against local branch' span_id:1342))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1346) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit checkout -b copy2 to-rebase-orig &&\n'
            span_id: 1347
          ) (Token id:Id.Lit_Chars val:'\tgit pull --rebase . to-rebase &&\n' span_id:1348) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest "conflicting modification" = "$(cat file)" &&\n'
            span_id: 1349
          ) (Token id:Id.Lit_Chars val:'\ttest file = "$(cat file2)"\n' span_id:1350)
        )
      }
    )
    (C {(test_done)})
  ]
)