(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"git rebase with its hook(s)">)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(setup)} 
      {
        (SQ <"\n"> <"\techo hello >file &&\n"> <"\tgit add file &&\n"> <"\ttest_tick &&\n"> 
          <"\tgit commit -m initial &&\n"> <"\techo goodbye >file &&\n"> <"\tgit add file &&\n"> <"\ttest_tick &&\n"> 
          <"\tgit commit -m second &&\n"> <"\tgit checkout -b side HEAD^ &&\n"> <"\techo world >git &&\n"> <"\tgit add git &&\n"> 
          <"\ttest_tick &&\n"> <"\tgit commit -m side &&\n"> <"\tgit checkout master &&\n"> 
          <"\tgit log --pretty=oneline --abbrev-commit --graph --all &&\n"> <"\tgit branch test side\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <rebase>)} 
      {
        (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> 
          <"\tgit rebase master &&\n"> <"\ttest \"z$(cat git)\" = zworld\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"rebase -i">)} 
      {
        (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> 
          <"\tEDITOR=true git rebase -i master &&\n"> <"\ttest \"z$(cat git)\" = zworld\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"setup pre-rebase hook">)} 
      {
        (SQ <"\n"> <"\tmkdir -p .git/hooks &&\n"> <"\tcat >.git/hooks/pre-rebase <<EOF &&\n"> 
          <"#!$SHELL_PATH\n"> <"echo \"\\$1,\\$2\" >.git/PRE-REBASE-INPUT\n"> <"EOF\n"> <"\tchmod +x .git/hooks/pre-rebase\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"pre-rebase hook gets correct input (1)">)} 
      {
        (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> 
          <"\tgit rebase master &&\n"> <"\ttest \"z$(cat git)\" = zworld &&\n"> <"\ttest \"z$(cat .git/PRE-REBASE-INPUT)\" = zmaster,\n"> 
          <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"pre-rebase hook gets correct input (2)">)} 
      {
        (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> 
          <"\tgit rebase master test &&\n"> <"\ttest \"z$(cat git)\" = zworld &&\n"> <"\ttest \"z$(cat .git/PRE-REBASE-INPUT)\" = zmaster,test\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"pre-rebase hook gets correct input (3)">)} 
      {
        (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> 
          <"\tgit checkout master &&\n"> <"\tgit rebase master test &&\n"> <"\ttest \"z$(cat git)\" = zworld &&\n"> 
          <"\ttest \"z$(cat .git/PRE-REBASE-INPUT)\" = zmaster,test\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"pre-rebase hook gets correct input (4)">)} 
      {
        (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> 
          <"\tEDITOR=true git rebase -i master &&\n"> <"\ttest \"z$(cat git)\" = zworld &&\n"> <"\ttest \"z$(cat .git/PRE-REBASE-INPUT)\" = zmaster,\n"> 
          <"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"pre-rebase hook gets correct input (5)">)} 
      {
        (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> 
          <"\tEDITOR=true git rebase -i master test &&\n"> <"\ttest \"z$(cat git)\" = zworld &&\n"> <"\ttest \"z$(cat .git/PRE-REBASE-INPUT)\" = zmaster,test\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"pre-rebase hook gets correct input (6)">)} 
      {
        (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> 
          <"\tgit checkout master &&\n"> <"\tEDITOR=true git rebase -i master test &&\n"> <"\ttest \"z$(cat git)\" = zworld &&\n"> 
          <"\ttest \"z$(cat .git/PRE-REBASE-INPUT)\" = zmaster,test\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"setup pre-rebase hook that fails">)} 
      {
        (SQ <"\n"> <"\tmkdir -p .git/hooks &&\n"> <"\tcat >.git/hooks/pre-rebase <<EOF &&\n"> 
          <"#!$SHELL_PATH\n"> <"false\n"> <"EOF\n"> <"\tchmod +x .git/hooks/pre-rebase\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"pre-rebase hook stops rebase (1)">)} 
      {
        (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> 
          <"\ttest_must_fail git rebase master &&\n"> <"\ttest \"z$(git symbolic-ref HEAD)\" = zrefs/heads/test &&\n"> 
          <"\ttest 0 = $(git rev-list HEAD...side | wc -l)\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"pre-rebase hook stops rebase (2)">)} 
      {
        (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> 
          <"\ttest_must_fail env EDITOR=: git rebase -i master &&\n"> <"\ttest \"z$(git symbolic-ref HEAD)\" = zrefs/heads/test &&\n"> 
          <"\ttest 0 = $(git rev-list HEAD...side | wc -l)\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"rebase --no-verify overrides pre-rebase (1)">)} 
      {
        (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> 
          <"\tgit rebase --no-verify master &&\n"> <"\ttest \"z$(git symbolic-ref HEAD)\" = zrefs/heads/test &&\n"> <"\ttest \"z$(cat git)\" = zworld\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"rebase --no-verify overrides pre-rebase (2)">)} 
      {
        (SQ <"\n"> <"\tgit checkout test &&\n"> <"\tgit reset --hard side &&\n"> 
          <"\tEDITOR=true git rebase --no-verify -i master &&\n"> <"\ttest \"z$(git symbolic-ref HEAD)\" = zrefs/heads/test &&\n"> <"\ttest \"z$(cat git)\" = zworld\n">
        )
      }
    )
    (C {(test_done)})
  ]
)