(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:'Test the post-rewrite hook.' span_id:15))} spids: [13] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:26))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:30) (Token id:Id.Lit_Chars val:'\ttest_commit A foo A &&\n' span_id:31) (Token id:Id.Lit_Chars val:'\ttest_commit B foo B &&\n' span_id:32) (Token id:Id.Lit_Chars val:'\ttest_commit C foo C &&\n' span_id:33) (Token id:Id.Lit_Chars val:'\ttest_commit D foo D &&\n' span_id:34) (Token id:Id.Lit_Chars val:'\tgit checkout A^0 &&\n' span_id:35) (Token id:Id.Lit_Chars val:'\ttest_commit E bar E &&\n' span_id:36) (Token id:Id.Lit_Chars val:'\ttest_commit F foo F &&\n' span_id:37) (Token id:Id.Lit_Chars val:'\tgit checkout master\n' span_id:38) ) } ) (C {(mkdir)} {(.git/hooks)}) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:49) fd: -1 arg_word: {(.git/hooks/post-rewrite)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:52) fd: -1 here_begin: {(EOF)} here_end_span_id: 69 stdin_parts: [ ('#!/bin/sh\n') ('echo ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:57) ) ('@ > ') (Id.Right_DoubleQuote '"') ($ Id.VSub_DollarName '$TRASH_DIRECTORY') (Id.Right_DoubleQuote '"') ('/post-rewrite.args\n') ('cat > ') (Id.Right_DoubleQuote '"') ($ Id.VSub_DollarName '$TRASH_DIRECTORY') (Id.Right_DoubleQuote '"') ('/post-rewrite.data\n') ] ) ] ) (C {(chmod)} {(u) (Id.Lit_Other '+') (x)} {(.git/hooks/post-rewrite)}) (command.ShFunction name: clear_hook_input body: (command.BraceGroup children: [(C {(rm)} {(-f)} {(post-rewrite.args)} {(post-rewrite.data)})] ) ) (command.ShFunction name: verify_hook_input body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test_cmp)} {(expected.args)} {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY')) (/post-rewrite.args)} ) (C {(test_cmp)} {(expected.data)} {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY')) (/post-rewrite.data)} ) ] ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git commit --amend' span_id:133))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:137) (Token id:Id.Lit_Chars val:'\tclear_hook_input &&\n' span_id:138) (Token id:Id.Lit_Chars val:'\techo "D new message" > newmsg &&\n' span_id:139) (Token id:Id.Lit_Chars val:'\toldsha=$(git rev-parse HEAD^0) &&\n' span_id:140) (Token id:Id.Lit_Chars val:'\tgit commit -Fnewmsg --amend &&\n' span_id:141) (Token id:Id.Lit_Chars val:'\techo amend > expected.args &&\n' span_id:142) (Token id:Id.Lit_Chars val:'\techo $oldsha $(git rev-parse HEAD^0) > expected.data &&\n' span_id:143) (Token id:Id.Lit_Chars val:'\tverify_hook_input\n' span_id:144) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git commit --amend --no-post-rewrite' span_id:151))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:155) (Token id:Id.Lit_Chars val:'\tclear_hook_input &&\n' span_id:156) (Token id:Id.Lit_Chars val:'\techo "D new message again" > newmsg &&\n' span_id:157) (Token id: Id.Lit_Chars val: '\tgit commit --no-post-rewrite -Fnewmsg --amend &&\n' span_id: 158 ) (Token id:Id.Lit_Chars val:'\ttest ! -f post-rewrite.args &&\n' span_id:159) (Token id:Id.Lit_Chars val:'\ttest ! -f post-rewrite.data\n' span_id:160) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git rebase' span_id:167))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:171) (Token id:Id.Lit_Chars val:'\tgit reset --hard D &&\n' span_id:172) (Token id:Id.Lit_Chars val:'\tclear_hook_input &&\n' span_id:173) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rebase --onto A B &&\n' span_id: 174 ) (Token id:Id.Lit_Chars val:'\techo C > foo &&\n' span_id:175) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:176) (Token id:Id.Lit_Chars val:'\tgit rebase --continue &&\n' span_id:177) (Token id:Id.Lit_Chars val:'\techo rebase >expected.args &&\n' span_id:178) (Token id:Id.Lit_Chars val:'\tcat >expected.data <<-EOF &&\n' span_id:179) (Token id: Id.Lit_Chars val: '\t$(git rev-parse C) $(git rev-parse HEAD^)\n' span_id: 180 ) (Token id:Id.Lit_Chars val:'\t$(git rev-parse D) $(git rev-parse HEAD)\n' span_id:181) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:182) (Token id:Id.Lit_Chars val:'\tverify_hook_input\n' span_id:183) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git rebase --skip' span_id:190))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:194) (Token id:Id.Lit_Chars val:'\tgit reset --hard D &&\n' span_id:195) (Token id:Id.Lit_Chars val:'\tclear_hook_input &&\n' span_id:196) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rebase --onto A B &&\n' span_id: 197 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rebase --skip &&\n' span_id:198) (Token id:Id.Lit_Chars val:'\techo D > foo &&\n' span_id:199) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:200) (Token id:Id.Lit_Chars val:'\tgit rebase --continue &&\n' span_id:201) (Token id:Id.Lit_Chars val:'\techo rebase >expected.args &&\n' span_id:202) (Token id:Id.Lit_Chars val:'\tcat >expected.data <<-EOF &&\n' span_id:203) (Token id:Id.Lit_Chars val:'\t$(git rev-parse D) $(git rev-parse HEAD)\n' span_id:204) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:205) (Token id:Id.Lit_Chars val:'\tverify_hook_input\n' span_id:206) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git rebase --skip the last one' span_id:213))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:217) (Token id:Id.Lit_Chars val:'\tgit reset --hard F &&\n' span_id:218) (Token id:Id.Lit_Chars val:'\tclear_hook_input &&\n' span_id:219) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rebase --onto D A &&\n' span_id: 220 ) (Token id:Id.Lit_Chars val:'\tgit rebase --skip &&\n' span_id:221) (Token id:Id.Lit_Chars val:'\techo rebase >expected.args &&\n' span_id:222) (Token id:Id.Lit_Chars val:'\tcat >expected.data <<-EOF &&\n' span_id:223) (Token id: Id.Lit_Chars val: '\t$(git rev-parse E) $(git rev-parse HEAD)\n' span_id: 224 ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:225) (Token id:Id.Lit_Chars val:'\tverify_hook_input\n' span_id:226) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git rebase -m' span_id:233))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:237) (Token id:Id.Lit_Chars val:'\tgit reset --hard D &&\n' span_id:238) (Token id:Id.Lit_Chars val:'\tclear_hook_input &&\n' span_id:239) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rebase -m --onto A B &&\n' span_id: 240 ) (Token id:Id.Lit_Chars val:'\techo C > foo &&\n' span_id:241) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:242) (Token id:Id.Lit_Chars val:'\tgit rebase --continue &&\n' span_id:243) (Token id:Id.Lit_Chars val:'\techo rebase >expected.args &&\n' span_id:244) (Token id:Id.Lit_Chars val:'\tcat >expected.data <<-EOF &&\n' span_id:245) (Token id: Id.Lit_Chars val: '\t$(git rev-parse C) $(git rev-parse HEAD^)\n' span_id: 246 ) (Token id:Id.Lit_Chars val:'\t$(git rev-parse D) $(git rev-parse HEAD)\n' span_id:247) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:248) (Token id:Id.Lit_Chars val:'\tverify_hook_input\n' span_id:249) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git rebase -m --skip' span_id:256))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:260) (Token id:Id.Lit_Chars val:'\tgit reset --hard D &&\n' span_id:261) (Token id:Id.Lit_Chars val:'\tclear_hook_input &&\n' span_id:262) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rebase --onto A B &&\n' span_id: 263 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rebase --skip &&\n' span_id:264) (Token id:Id.Lit_Chars val:'\techo D > foo &&\n' span_id:265) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:266) (Token id:Id.Lit_Chars val:'\tgit rebase --continue &&\n' span_id:267) (Token id:Id.Lit_Chars val:'\techo rebase >expected.args &&\n' span_id:268) (Token id:Id.Lit_Chars val:'\tcat >expected.data <<-EOF &&\n' span_id:269) (Token id:Id.Lit_Chars val:'\t$(git rev-parse D) $(git rev-parse HEAD)\n' span_id:270) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:271) (Token id:Id.Lit_Chars val:'\tverify_hook_input\n' span_id:272) ) } ) (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/lib-rebase.sh)}) (C {(set_fake_editor)}) (command.ShFunction name: test_fail_interactive_rebase body: (command.BraceGroup children: [ (command.Subshell command_list: (command.CommandList children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FAKE_LINES) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [304] ) ] ) (C {(shift)}) (C {(export)} {(FAKE_LINES)}) (C {(test_must_fail)} {(git)} {(rebase)} {(-i)} {(DQ ($ Id.VSub_At '$@'))}) ] ) ] ) ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git rebase -i (unchanged)' span_id:345))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:349) (Token id:Id.Lit_Chars val:'\tgit reset --hard D &&\n' span_id:350) (Token id:Id.Lit_Chars val:'\tclear_hook_input &&\n' span_id:351) (Token id: Id.Lit_Chars val: '\ttest_fail_interactive_rebase "1 2" --onto A B &&\n' span_id: 352 ) (Token id:Id.Lit_Chars val:'\techo C > foo &&\n' span_id:353) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:354) (Token id:Id.Lit_Chars val:'\tgit rebase --continue &&\n' span_id:355) (Token id:Id.Lit_Chars val:'\techo rebase >expected.args &&\n' span_id:356) (Token id:Id.Lit_Chars val:'\tcat >expected.data <<-EOF &&\n' span_id:357) (Token id: Id.Lit_Chars val: '\t$(git rev-parse C) $(git rev-parse HEAD^)\n' span_id: 358 ) (Token id:Id.Lit_Chars val:'\t$(git rev-parse D) $(git rev-parse HEAD)\n' span_id:359) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:360) (Token id:Id.Lit_Chars val:'\tverify_hook_input\n' span_id:361) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git rebase -i (skip)' span_id:368))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:372) (Token id:Id.Lit_Chars val:'\tgit reset --hard D &&\n' span_id:373) (Token id:Id.Lit_Chars val:'\tclear_hook_input &&\n' span_id:374) (Token id: Id.Lit_Chars val: '\ttest_fail_interactive_rebase "2" --onto A B &&\n' span_id: 375 ) (Token id:Id.Lit_Chars val:'\techo D > foo &&\n' span_id:376) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:377) (Token id:Id.Lit_Chars val:'\tgit rebase --continue &&\n' span_id:378) (Token id:Id.Lit_Chars val:'\techo rebase >expected.args &&\n' span_id:379) (Token id:Id.Lit_Chars val:'\tcat >expected.data <<-EOF &&\n' span_id:380) (Token id: Id.Lit_Chars val: '\t$(git rev-parse D) $(git rev-parse HEAD)\n' span_id: 381 ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:382) (Token id:Id.Lit_Chars val:'\tverify_hook_input\n' span_id:383) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git rebase -i (squash)' span_id:390))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:394) (Token id:Id.Lit_Chars val:'\tgit reset --hard D &&\n' span_id:395) (Token id:Id.Lit_Chars val:'\tclear_hook_input &&\n' span_id:396) (Token id: Id.Lit_Chars val: '\ttest_fail_interactive_rebase "1 squash 2" --onto A B &&\n' span_id: 397 ) (Token id:Id.Lit_Chars val:'\techo C > foo &&\n' span_id:398) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:399) (Token id:Id.Lit_Chars val:'\tgit rebase --continue &&\n' span_id:400) (Token id:Id.Lit_Chars val:'\techo rebase >expected.args &&\n' span_id:401) (Token id:Id.Lit_Chars val:'\tcat >expected.data <<-EOF &&\n' span_id:402) (Token id: Id.Lit_Chars val: '\t$(git rev-parse C) $(git rev-parse HEAD)\n' span_id: 403 ) (Token id:Id.Lit_Chars val:'\t$(git rev-parse D) $(git rev-parse HEAD)\n' span_id:404) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:405) (Token id:Id.Lit_Chars val:'\tverify_hook_input\n' span_id:406) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git rebase -i (fixup without conflict)' span_id:413))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:417) (Token id:Id.Lit_Chars val:'\tgit reset --hard D &&\n' span_id:418) (Token id:Id.Lit_Chars val:'\tclear_hook_input &&\n' span_id:419) (Token id: Id.Lit_Chars val: '\tFAKE_LINES="1 fixup 2" git rebase -i B &&\n' span_id: 420 ) (Token id:Id.Lit_Chars val:'\techo rebase >expected.args &&\n' span_id:421) (Token id:Id.Lit_Chars val:'\tcat >expected.data <<-EOF &&\n' span_id:422) (Token id:Id.Lit_Chars val:'\t$(git rev-parse C) $(git rev-parse HEAD)\n' span_id:423) (Token id: Id.Lit_Chars val: '\t$(git rev-parse D) $(git rev-parse HEAD)\n' span_id: 424 ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:425) (Token id:Id.Lit_Chars val:'\tverify_hook_input\n' span_id:426) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git rebase -i (double edit)' span_id:433))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:437) (Token id:Id.Lit_Chars val:'\tgit reset --hard D &&\n' span_id:438) (Token id:Id.Lit_Chars val:'\tclear_hook_input &&\n' span_id:439) (Token id: Id.Lit_Chars val: '\tFAKE_LINES="edit 1 edit 2" git rebase -i B &&\n' span_id: 440 ) (Token id:Id.Lit_Chars val:'\tgit rebase --continue &&\n' span_id:441) (Token id:Id.Lit_Chars val:'\techo something > foo &&\n' span_id:442) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:443) (Token id:Id.Lit_Chars val:'\tgit rebase --continue &&\n' span_id:444) (Token id:Id.Lit_Chars val:'\techo rebase >expected.args &&\n' span_id:445) (Token id:Id.Lit_Chars val:'\tcat >expected.data <<-EOF &&\n' span_id:446) (Token id:Id.Lit_Chars val:'\t$(git rev-parse C) $(git rev-parse HEAD^)\n' span_id:447) (Token id: Id.Lit_Chars val: '\t$(git rev-parse D) $(git rev-parse HEAD)\n' span_id: 448 ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:449) (Token id:Id.Lit_Chars val:'\tverify_hook_input\n' span_id:450) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git rebase -i (exec)' span_id:457))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:461) (Token id:Id.Lit_Chars val:'\tgit reset --hard D &&\n' span_id:462) (Token id:Id.Lit_Chars val:'\tclear_hook_input &&\n' span_id:463) (Token id: Id.Lit_Chars val: '\tFAKE_LINES="edit 1 exec_false 2" git rebase -i B &&\n' span_id: 464 ) (Token id:Id.Lit_Chars val:'\techo something >bar &&\n' span_id:465) (Token id:Id.Lit_Chars val:'\tgit add bar &&\n' span_id:466) (Token id:Id.Lit_Chars val:'\t# Fails because of exec false\n' span_id:467) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rebase --continue &&\n' span_id: 468 ) (Token id:Id.Lit_Chars val:'\tgit rebase --continue &&\n' span_id:469) (Token id:Id.Lit_Chars val:'\techo rebase >expected.args &&\n' span_id:470) (Token id:Id.Lit_Chars val:'\tcat >expected.data <<-EOF &&\n' span_id:471) (Token id: Id.Lit_Chars val: '\t$(git rev-parse C) $(git rev-parse HEAD^)\n' span_id: 472 ) (Token id:Id.Lit_Chars val:'\t$(git rev-parse D) $(git rev-parse HEAD)\n' span_id:473) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:474) (Token id:Id.Lit_Chars val:'\tverify_hook_input\n' span_id:475) ) } ) (C {(test_done)}) ] )