(command.CommandList
  children: [
    (command.ShAssignment
      left: <Id.Lit_VarLike 'test_description='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'test_description='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'test_description='> name:test_description)
          op: assign_op.Equal
          rhs: 
            {
              (SQ <'git rebase assorted tests\n'> <'\n'> 
                <'This test runs git rebase and checks that the author information is not lost\n'> <'among other things.\n'>
              )
            }
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {<'./test-lib.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'GIT_AUTHOR_NAME='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'GIT_AUTHOR_NAME='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'GIT_AUTHOR_NAME='> name:GIT_AUTHOR_NAME)
          op: assign_op.Equal
          rhs: {<author> <Id.Lit_Splice '@name'>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'GIT_AUTHOR_EMAIL='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'GIT_AUTHOR_EMAIL='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'GIT_AUTHOR_EMAIL='> name:GIT_AUTHOR_EMAIL)
          op: assign_op.Equal
          rhs: {<bogus> <Id.Lit_Splice '@email'> <Id.Lit_Splice '@address'>}
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <export>
      more_env: []
      words: [{<export>} {<GIT_AUTHOR_NAME>} {<GIT_AUTHOR_EMAIL>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'prepare repository with topic branches'>)}
        {
          (SQ <'\n'> <'\tgit config core.logAllRefUpdates true &&\n'> <'\techo First >A &&\n'> 
            <'\tgit update-index --add A &&\n'> <'\tgit commit -m "Add A." &&\n'> <'\tgit checkout -b force-3way &&\n'> <'\techo Dummy >Y &&\n'> 
            <'\tgit update-index --add Y &&\n'> <'\tgit commit -m "Add Y." &&\n'> <'\tgit checkout -b filemove &&\n'> 
            <'\tgit reset --soft master &&\n'> <'\tmkdir D &&\n'> <'\tgit mv A D/A &&\n'> <'\tgit commit -m "Move A." &&\n'> 
            <'\tgit checkout -b my-topic-branch master &&\n'> <'\techo Second >B &&\n'> <'\tgit update-index --add B &&\n'> <'\tgit commit -m "Add B." &&\n'> 
            <'\tgit checkout -f master &&\n'> <'\techo Third >>A &&\n'> <'\tgit update-index A &&\n'> <'\tgit commit -m "Modify A." &&\n'> 
            <'\tgit checkout -b side my-topic-branch &&\n'> <'\techo Side >>C &&\n'> <'\tgit add C &&\n'> <'\tgit commit -m "Add C" &&\n'> 
            <'\tgit checkout -f my-topic-branch &&\n'> <'\tgit tag topic\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'rebase on dirty worktree'>)}
        {(SQ <'\n'> <'\techo dirty >>A &&\n'> <'\ttest_must_fail git rebase master\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'rebase on dirty cache'>)}
        {(SQ <'\n'> <'\tgit add A &&\n'> <'\ttest_must_fail git rebase master\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'rebase against master'>)}
        {(SQ <'\n'> <'\tgit reset --hard HEAD &&\n'> <'\tgit rebase master\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'rebase, with <onto> and <upstream> specified as :/quuxery'>)}
        {
          (SQ <'\n'> <'\ttest_when_finished "git branch -D torebase" &&\n'> 
            <'\tgit checkout -b torebase my-topic-branch^ &&\n'> <'\tupstream=$(git rev-parse ":/Add B") &&\n'> <'\tonto=$(git rev-parse ":/Add A") &&\n'> 
            <'\tgit rebase --onto $onto $upstream &&\n'> <'\tgit reset --hard my-topic-branch^ &&\n'> <'\tgit rebase --onto ":/Add A" ":/Add B" &&\n'> 
            <'\tgit checkout my-topic-branch\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'the rebase operation should not have destroyed author information'>)}
        {(SQ <'\n'> <'\t! (git log | grep "Author:" | grep "<>")\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'the rebase operation should not have destroyed author information (2)'>)}
        {
          (DQ <'\n'> <'\tgit log -1 |\n'> <'\tgrep \'Author: '> ($ Id.VSub_DollarName GIT_AUTHOR_NAME) 
            <' <'> ($ Id.VSub_DollarName GIT_AUTHOR_EMAIL) <'>\'\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'HEAD was detached during rebase'>)}
        {(SQ <'\n'> <'\ttest $(git rev-parse HEAD@{1}) != $(git rev-parse my-topic-branch@{1})\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'rebase from ambiguous branch name'>)}
        {(SQ <'\n'> <'\tgit checkout -b topic side &&\n'> <'\tgit rebase master\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'rebase off of the previous branch using "-"'>)}
        {
          (SQ <'\n'> <'\tgit checkout master &&\n'> <'\tgit checkout HEAD^ &&\n'> 
            <'\tgit rebase @{-1} >expect.messages &&\n'> <'\tgit merge-base master HEAD >expect.forkpoint &&\n'> <'\n'> <'\tgit checkout master &&\n'> 
            <'\tgit checkout HEAD^ &&\n'> <'\tgit rebase - >actual.messages &&\n'> <'\tgit merge-base master HEAD >actual.forkpoint &&\n'> <'\n'> 
            <'\ttest_cmp expect.forkpoint actual.forkpoint &&\n'> <'\t# the next one is dubious---we may want to say "-",\n'> <'\t# instead of @{-1}, in the message\n'> 
            <'\ttest_i18ncmp expect.messages actual.messages\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'rebase a single mode change'>)}
        {
          (SQ <'\n'> <'\tgit checkout master &&\n'> <'\tgit branch -D topic &&\n'> <'\techo 1 >X &&\n'> 
            <'\tgit add X &&\n'> <'\ttest_tick &&\n'> <'\tgit commit -m prepare &&\n'> <'\tgit checkout -b modechange HEAD^ &&\n'> 
            <'\techo 1 >X &&\n'> <'\tgit add X &&\n'> <'\ttest_chmod +x A &&\n'> <'\ttest_tick &&\n'> <'\tgit commit -m modechange &&\n'> 
            <'\tGIT_TRACE=1 git rebase master\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'rebase is not broken by diff.renames'>)}
        {
          (SQ <'\n'> <'\ttest_config diff.renames copies &&\n'> <'\tgit checkout filemove &&\n'> 
            <'\tGIT_TRACE=1 git rebase force-3way\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'setup: recover'>)}
        {
          (SQ <'\n'> <'\ttest_might_fail git rebase --abort &&\n'> <'\tgit reset --hard &&\n'> 
            <'\tgit checkout modechange\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'Show verbose error when HEAD could not be detached'>)}
        {
          (SQ <'\n'> <'\t>B &&\n'> <'\ttest_must_fail git rebase topic 2>output.err >output.out &&\n'> 
            <
'\ttest_i18ngrep "The following untracked working tree files would be overwritten by checkout:" output.err &&\n'
            > <'\ttest_i18ngrep B output.err\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <rm>
      more_env: []
      words: [{<rm>} {<-f>} {<B>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'fail when upstream arg is missing and not on branch'>)}
        {(SQ <'\n'> <'\tgit checkout topic &&\n'> <'\ttest_must_fail git rebase\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'fail when upstream arg is missing and not configured'>)}
        {(SQ <'\n'> <'\tgit checkout -b no-config topic &&\n'> <'\ttest_must_fail git rebase\n'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'default to common base in @{upstream}s reflog if no upstream arg'>)}
        {
          (SQ <'\n'> <'\tgit checkout -b default-base master &&\n'> 
            <'\tgit checkout -b default topic &&\n'> <'\tgit config branch.default.remote . &&\n'> 
            <'\tgit config branch.default.merge refs/heads/default-base &&\n'> <'\tgit rebase &&\n'> <'\tgit rev-parse --verify default-base >expect &&\n'> 
            <'\tgit rev-parse default~1 >actual &&\n'> <'\ttest_cmp expect actual &&\n'> <'\tgit checkout default-base &&\n'> 
            <'\tgit reset --hard HEAD^ &&\n'> <'\tgit checkout default &&\n'> <'\tgit rebase &&\n'> 
            <'\tgit rev-parse --verify default-base >expect &&\n'> <'\tgit rev-parse default~1 >actual &&\n'> <'\ttest_cmp expect actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'cherry-picked commits and fork-point work together'>)}
        {
          (SQ <'\n'> <'\tgit checkout default-base &&\n'> <'\techo Amended >A &&\n'> 
            <'\tgit commit -a --no-edit --amend &&\n'> <'\ttest_commit B B &&\n'> <'\ttest_commit new_B B "New B" &&\n'> <'\ttest_commit C C &&\n'> 
            <'\tgit checkout default &&\n'> <'\tgit reset --hard default-base@{4} &&\n'> <'\ttest_commit D D &&\n'> 
            <'\tgit cherry-pick -2 default-base^ &&\n'> <'\ttest_commit final_B B "Final B" &&\n'> <'\tgit rebase &&\n'> <'\techo Amended >expect &&\n'> 
            <'\ttest_cmp A expect &&\n'> <'\techo "Final B" >expect &&\n'> <'\ttest_cmp B expect &&\n'> <'\techo C >expect &&\n'> 
            <'\ttest_cmp C expect &&\n'> <'\techo D >expect &&\n'> <'\ttest_cmp D expect\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'rebase -q is quiet'>)}
        {
          (SQ <'\n'> <'\tgit checkout -b quiet topic &&\n'> 
            <'\tgit rebase -q master >output.out 2>&1 &&\n'> <'\ttest_must_be_empty output.out\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'Rebase a commit that sprinkles CRs in'>)}
        {
          (SQ <'\n'> <'\t(\n'> <'\t\techo "One"\n'> <'\t\techo "TwoQ"\n'> <'\t\techo "Three"\n'> 
            <'\t\techo "FQur"\n'> <'\t\techo "Five"\n'> <'\t) | q_to_cr >CR &&\n'> <'\tgit add CR &&\n'> <'\ttest_tick &&\n'> 
            <'\tgit commit -a -m "A file with a line with CR" &&\n'> <'\tgit tag file-with-cr &&\n'> <'\tgit checkout HEAD^0 &&\n'> 
            <'\tgit rebase --onto HEAD^^ HEAD^ &&\n'> <'\tgit diff --exit-code file-with-cr:CR HEAD:CR\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'rebase can copy notes'>)}
        {
          (SQ <'\n'> <'\tgit config notes.rewrite.rebase true &&\n'> 
            <'\tgit config notes.rewriteRef "refs/notes/*" &&\n'> <'\ttest_commit n1 &&\n'> <'\ttest_commit n2 &&\n'> <'\ttest_commit n3 &&\n'> 
            <'\tgit notes add -m"a note" n3 &&\n'> <'\tgit rebase --onto n1 n2 &&\n'> <'\ttest "a note" = "$(git notes show HEAD)"\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'rebase -m can copy notes'>)}
        {
          (SQ <'\n'> <'\tgit reset --hard n3 &&\n'> <'\tgit rebase -m --onto n1 n2 &&\n'> 
            <'\ttest "a note" = "$(git notes show HEAD)"\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'rebase commit with an ancient timestamp'>)}
        {
          (SQ <'\n'> <'\tgit reset --hard &&\n'> <'\n'> 
            <'\t>old.one && git add old.one && test_tick &&\n'> <'\tgit commit --date="@12345 +0400" -m "Old one" &&\n'> 
            <'\t>old.two && git add old.two && test_tick &&\n'> <'\tgit commit --date="@23456 +0500" -m "Old two" &&\n'> 
            <'\t>old.three && git add old.three && test_tick &&\n'> <'\tgit commit --date="@34567 +0600" -m "Old three" &&\n'> <'\n'> 
            <'\tgit cat-file commit HEAD^^ >actual &&\n'> <'\tgrep "author .* 12345 +0400$" actual &&\n'> <'\tgit cat-file commit HEAD^ >actual &&\n'> 
            <'\tgrep "author .* 23456 +0500$" actual &&\n'> <'\tgit cat-file commit HEAD >actual &&\n'> <'\tgrep "author .* 34567 +0600$" actual &&\n'> <'\n'> 
            <'\tgit rebase --onto HEAD^^ HEAD^ &&\n'> <'\n'> <'\tgit cat-file commit HEAD >actual &&\n'> <'\tgrep "author .* 34567 +0600$" actual\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_done>
      more_env: []
      words: [{<test_done>}]
      redirects: []
      do_fork: T
    )
  ]
)