(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)})
  ]
)