(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: { (SQ <"Test cherry-pick continuation features\n"> <"\n"> <" + conflicting: rewrites unrelated to conflicting\n"> <" + yetanotherpick: rewrites foo to e\n"> <" + anotherpick: rewrites foo to d\n"> <" + picked: rewrites foo to c\n"> <" + unrelatedpick: rewrites unrelated to reallyunrelated\n"> <" + base: rewrites foo to b\n"> <" + initial: writes foo as a, unrelated as unrelated\n"> <"\n"> ) } spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_r10) op: Equal rhs: {(SQ <"\\1\\1\\1\\1\\1\\1\\1\\1\\1\\1">)} spids: [27] ) ] spids: [27] ) (FuncDef name: pristine_detach body: (BraceGroup children: [ (AndOr children: [ (C {(git)} {(cherry-pick)} {(--quit)}) (AndOr children: [ (C {(git)} {(checkout)} {(-f)} {(DQ ($ VSub_Number "$1") ("^0"))}) (AndOr children: [ (C {(git)} {(read-tree)} {(-u)} {(--reset)} {(HEAD)}) (C {(git)} {(clean)} {(-d)} {(-f)} {(-f)} {(-q)} {(-x)}) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] spids: [38] ) spids: [33 37] ) (C {(test_expect_success)} {(setup)} { (SQ <"\n"> <"\tgit config advice.detachedhead false &&\n"> <"\techo unrelated >unrelated &&\n"> <"\tgit add unrelated &&\n"> <"\ttest_commit initial foo a &&\n"> <"\ttest_commit base foo b &&\n"> <"\ttest_commit unrelatedpick unrelated reallyunrelated &&\n"> <"\ttest_commit picked foo c &&\n"> <"\ttest_commit anotherpick foo d &&\n"> <"\ttest_commit yetanotherpick foo e &&\n"> <"\tpristine_detach initial &&\n"> <"\ttest_commit conflicting unrelated\n"> ) } ) (C {(test_expect_success)} {(SQ <"cherry-pick persists data on failure">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_expect_code 1 git cherry-pick -s base..anotherpick &&\n"> <"\ttest_path_is_dir .git/sequencer &&\n"> <"\ttest_path_is_file .git/sequencer/head &&\n"> <"\ttest_path_is_file .git/sequencer/todo &&\n"> <"\ttest_path_is_file .git/sequencer/opts\n"> ) } ) (C {(test_expect_success)} {(SQ <"cherry-pick mid-cherry-pick-sequence">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_must_fail git cherry-pick base..anotherpick &&\n"> <"\ttest_cmp_rev picked CHERRY_PICK_HEAD &&\n"> <"\t# \"oops, I forgot that these patches rely on the change from base\"\n"> <"\tgit checkout HEAD foo &&\n"> <"\tgit cherry-pick base &&\n"> <"\tgit cherry-pick picked &&\n"> <"\tgit cherry-pick --continue &&\n"> <"\tgit diff --exit-code anotherpick\n"> ) } ) (C {(test_expect_success)} {(SQ <"cherry-pick persists opts correctly">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> < "\ttest_expect_code 128 git cherry-pick -s -m 1 --strategy=recursive -X patience -X ours initial..anotherpick &&\n" > <"\ttest_path_is_dir .git/sequencer &&\n"> <"\ttest_path_is_file .git/sequencer/head &&\n"> <"\ttest_path_is_file .git/sequencer/todo &&\n"> <"\ttest_path_is_file .git/sequencer/opts &&\n"> <"\techo \"true\" >expect &&\n"> <"\tgit config --file=.git/sequencer/opts --get-all options.signoff >actual &&\n"> <"\ttest_cmp expect actual &&\n"> <"\techo \"1\" >expect &&\n"> <"\tgit config --file=.git/sequencer/opts --get-all options.mainline >actual &&\n"> <"\ttest_cmp expect actual &&\n"> <"\techo \"recursive\" >expect &&\n"> <"\tgit config --file=.git/sequencer/opts --get-all options.strategy >actual &&\n"> <"\ttest_cmp expect actual &&\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\tpatience\n"> <"\tours\n"> <"\tEOF\n"> <"\tgit config --file=.git/sequencer/opts --get-all options.strategy-option >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"cherry-pick cleans up sequencer state upon success">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\tgit cherry-pick initial..picked &&\n"> <"\ttest_path_is_missing .git/sequencer\n"> ) } ) (C {(test_expect_success)} {(SQ <"--quit does not complain when no cherry-pick is in progress">)} {(SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\tgit cherry-pick --quit\n">)} ) (C {(test_expect_success)} {(SQ <"--abort requires cherry-pick in progress">)} {(SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_must_fail git cherry-pick --abort\n">)} ) (C {(test_expect_success)} {(SQ <"--quit cleans up sequencer state">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_expect_code 1 git cherry-pick base..picked &&\n"> <"\tgit cherry-pick --quit &&\n"> <"\ttest_path_is_missing .git/sequencer\n"> ) } ) (C {(test_expect_success)} {(SQ <"--quit keeps HEAD and conflicted index intact">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\tOBJID\n"> <"\t:100644 100644 OBJID OBJID M\tunrelated\n"> <"\tOBJID\n"> <"\t:000000 100644 OBJID OBJID A\tfoo\n"> <"\t:000000 100644 OBJID OBJID A\tunrelated\n"> <"\tEOF\n"> <"\ttest_expect_code 1 git cherry-pick base..picked &&\n"> <"\tgit cherry-pick --quit &&\n"> <"\ttest_path_is_missing .git/sequencer &&\n"> <"\ttest_must_fail git update-index --refresh &&\n"> <"\t{\n"> <"\t\tgit rev-list HEAD |\n"> <"\t\tgit diff-tree --root --stdin |\n"> <"\t\tsed \"s/$_x40/OBJID/g\"\n"> <"\t} >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"--abort to cancel multiple cherry-pick">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_expect_code 1 git cherry-pick base..anotherpick &&\n"> <"\tgit cherry-pick --abort &&\n"> <"\ttest_path_is_missing .git/sequencer &&\n"> <"\ttest_cmp_rev initial HEAD &&\n"> <"\tgit update-index --refresh &&\n"> <"\tgit diff-index --exit-code HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"--abort to cancel single cherry-pick">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_expect_code 1 git cherry-pick picked &&\n"> <"\tgit cherry-pick --abort &&\n"> <"\ttest_path_is_missing .git/sequencer &&\n"> <"\ttest_cmp_rev initial HEAD &&\n"> <"\tgit update-index --refresh &&\n"> <"\tgit diff-index --exit-code HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"cherry-pick --abort to cancel multiple revert">)} { (SQ <"\n"> <"\tpristine_detach anotherpick &&\n"> <"\ttest_expect_code 1 git revert base..picked &&\n"> <"\tgit cherry-pick --abort &&\n"> <"\ttest_path_is_missing .git/sequencer &&\n"> <"\ttest_cmp_rev anotherpick HEAD &&\n"> <"\tgit update-index --refresh &&\n"> <"\tgit diff-index --exit-code HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"revert --abort works, too">)} { (SQ <"\n"> <"\tpristine_detach anotherpick &&\n"> <"\ttest_expect_code 1 git revert base..picked &&\n"> <"\tgit revert --abort &&\n"> <"\ttest_path_is_missing .git/sequencer &&\n"> <"\ttest_cmp_rev anotherpick HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"--abort to cancel single revert">)} { (SQ <"\n"> <"\tpristine_detach anotherpick &&\n"> <"\ttest_expect_code 1 git revert picked &&\n"> <"\tgit revert --abort &&\n"> <"\ttest_path_is_missing .git/sequencer &&\n"> <"\ttest_cmp_rev anotherpick HEAD &&\n"> <"\tgit update-index --refresh &&\n"> <"\tgit diff-index --exit-code HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"--abort keeps unrelated change, easy case">)} { (SQ <"\n"> <"\tpristine_detach unrelatedpick &&\n"> <"\techo changed >expect &&\n"> <"\ttest_expect_code 1 git cherry-pick picked..yetanotherpick &&\n"> <"\techo changed >unrelated &&\n"> <"\tgit cherry-pick --abort &&\n"> <"\ttest_cmp expect unrelated\n"> ) } ) (C {(test_expect_success)} {(SQ <"--abort refuses to clobber unrelated change, harder case">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\techo changed >expect &&\n"> <"\ttest_expect_code 1 git cherry-pick base..anotherpick &&\n"> <"\techo changed >unrelated &&\n"> <"\ttest_must_fail git cherry-pick --abort &&\n"> <"\ttest_cmp expect unrelated &&\n"> <"\tgit rev-list HEAD >log &&\n"> <"\ttest_line_count = 2 log &&\n"> <"\ttest_must_fail git update-index --refresh &&\n"> <"\n"> <"\tgit checkout unrelated &&\n"> <"\tgit cherry-pick --abort &&\n"> <"\ttest_cmp_rev initial HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"cherry-pick still writes sequencer state when one commit is left">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_expect_code 1 git cherry-pick base..picked &&\n"> <"\ttest_path_is_dir .git/sequencer &&\n"> <"\techo \"resolved\" >foo &&\n"> <"\tgit add foo &&\n"> <"\tgit commit &&\n"> <"\t{\n"> <"\t\tgit rev-list HEAD |\n"> <"\t\tgit diff-tree --root --stdin |\n"> <"\t\tsed \"s/$_x40/OBJID/g\"\n"> <"\t} >actual &&\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\tOBJID\n"> <"\t:100644 100644 OBJID OBJID M\tfoo\n"> <"\tOBJID\n"> <"\t:100644 100644 OBJID OBJID M\tunrelated\n"> <"\tOBJID\n"> <"\t:000000 100644 OBJID OBJID A\tfoo\n"> <"\t:000000 100644 OBJID OBJID A\tunrelated\n"> <"\tEOF\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"--abort after last commit in sequence">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_expect_code 1 git cherry-pick base..picked &&\n"> <"\tgit cherry-pick --abort &&\n"> <"\ttest_path_is_missing .git/sequencer &&\n"> <"\ttest_cmp_rev initial HEAD &&\n"> <"\tgit update-index --refresh &&\n"> <"\tgit diff-index --exit-code HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"cherry-pick does not implicitly stomp an existing operation">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_expect_code 1 git cherry-pick base..anotherpick &&\n"> <"\ttest-chmtime -v +0 .git/sequencer >expect &&\n"> <"\ttest_expect_code 128 git cherry-pick unrelatedpick &&\n"> <"\ttest-chmtime -v +0 .git/sequencer >actual &&\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"--continue complains when no cherry-pick is in progress">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_expect_code 128 git cherry-pick --continue\n"> ) } ) (C {(test_expect_success)} {(SQ <"--continue complains when there are unresolved conflicts">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_expect_code 1 git cherry-pick base..anotherpick &&\n"> <"\ttest_expect_code 128 git cherry-pick --continue\n"> ) } ) (C {(test_expect_success)} {(SQ <"--continue of single cherry-pick">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\techo c >expect &&\n"> <"\ttest_must_fail git cherry-pick picked &&\n"> <"\techo c >foo &&\n"> <"\tgit add foo &&\n"> <"\tgit cherry-pick --continue &&\n"> <"\n"> <"\ttest_cmp expect foo &&\n"> <"\ttest_cmp_rev initial HEAD^ &&\n"> <"\tgit diff --exit-code HEAD &&\n"> <"\ttest_must_fail git rev-parse --verify CHERRY_PICK_HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"--continue of single revert">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\techo resolved >expect &&\n"> <"\techo \"Revert \\\"picked\\\"\" >expect.msg &&\n"> <"\ttest_must_fail git revert picked &&\n"> <"\techo resolved >foo &&\n"> <"\tgit add foo &&\n"> <"\tgit cherry-pick --continue &&\n"> <"\n"> <"\tgit diff --exit-code HEAD &&\n"> <"\ttest_cmp expect foo &&\n"> <"\ttest_cmp_rev initial HEAD^ &&\n"> <"\tgit diff-tree -s --pretty=tformat:%s HEAD >msg &&\n"> <"\ttest_cmp expect.msg msg &&\n"> <"\ttest_must_fail git rev-parse --verify CHERRY_PICK_HEAD &&\n"> <"\ttest_must_fail git rev-parse --verify REVERT_HEAD\n"> ) } ) (C {(test_expect_success)} {(SQ <"--continue after resolving conflicts">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\techo d >expect &&\n"> <"\tcat >expect.log <<-\\EOF &&\n"> <"\tOBJID\n"> <"\t:100644 100644 OBJID OBJID M\tfoo\n"> <"\tOBJID\n"> <"\t:100644 100644 OBJID OBJID M\tfoo\n"> <"\tOBJID\n"> <"\t:100644 100644 OBJID OBJID M\tunrelated\n"> <"\tOBJID\n"> <"\t:000000 100644 OBJID OBJID A\tfoo\n"> <"\t:000000 100644 OBJID OBJID A\tunrelated\n"> <"\tEOF\n"> <"\ttest_must_fail git cherry-pick base..anotherpick &&\n"> <"\techo c >foo &&\n"> <"\tgit add foo &&\n"> <"\tgit cherry-pick --continue &&\n"> <"\t{\n"> <"\t\tgit rev-list HEAD |\n"> <"\t\tgit diff-tree --root --stdin |\n"> <"\t\tsed \"s/$_x40/OBJID/g\"\n"> <"\t} >actual.log &&\n"> <"\ttest_cmp expect foo &&\n"> <"\ttest_cmp expect.log actual.log\n"> ) } ) (C {(test_expect_success)} {(SQ <"--continue after resolving conflicts and committing">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_expect_code 1 git cherry-pick base..anotherpick &&\n"> <"\techo \"c\" >foo &&\n"> <"\tgit add foo &&\n"> <"\tgit commit &&\n"> <"\tgit cherry-pick --continue &&\n"> <"\ttest_path_is_missing .git/sequencer &&\n"> <"\t{\n"> <"\t\tgit rev-list HEAD |\n"> <"\t\tgit diff-tree --root --stdin |\n"> <"\t\tsed \"s/$_x40/OBJID/g\"\n"> <"\t} >actual &&\n"> <"\tcat >expect <<-\\EOF &&\n"> <"\tOBJID\n"> <"\t:100644 100644 OBJID OBJID M\tfoo\n"> <"\tOBJID\n"> <"\t:100644 100644 OBJID OBJID M\tfoo\n"> <"\tOBJID\n"> <"\t:100644 100644 OBJID OBJID M\tunrelated\n"> <"\tOBJID\n"> <"\t:000000 100644 OBJID OBJID A\tfoo\n"> <"\t:000000 100644 OBJID OBJID A\tunrelated\n"> <"\tEOF\n"> <"\ttest_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(SQ <"--continue asks for help after resolving patch to nil">)} { (SQ <"\n"> <"\tpristine_detach conflicting &&\n"> <"\ttest_must_fail git cherry-pick initial..picked &&\n"> <"\n"> <"\ttest_cmp_rev unrelatedpick CHERRY_PICK_HEAD &&\n"> <"\tgit checkout HEAD -- unrelated &&\n"> <"\ttest_must_fail git cherry-pick --continue 2>msg &&\n"> <"\ttest_i18ngrep \"The previous cherry-pick is now empty\" msg\n"> ) } ) (C {(test_expect_success)} {(SQ <"follow advice and skip nil patch">)} { (SQ <"\n"> <"\tpristine_detach conflicting &&\n"> <"\ttest_must_fail git cherry-pick initial..picked &&\n"> <"\n"> <"\tgit checkout HEAD -- unrelated &&\n"> <"\ttest_must_fail git cherry-pick --continue &&\n"> <"\tgit reset &&\n"> <"\tgit cherry-pick --continue &&\n"> <"\n"> <"\tgit rev-list initial..HEAD >commits &&\n"> <"\ttest_line_count = 3 commits\n"> ) } ) (C {(test_expect_success)} {(SQ <"--continue respects opts">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_expect_code 1 git cherry-pick -x base..anotherpick &&\n"> <"\techo \"c\" >foo &&\n"> <"\tgit add foo &&\n"> <"\tgit commit &&\n"> <"\tgit cherry-pick --continue &&\n"> <"\ttest_path_is_missing .git/sequencer &&\n"> <"\tgit cat-file commit HEAD >anotherpick_msg &&\n"> <"\tgit cat-file commit HEAD~1 >picked_msg &&\n"> <"\tgit cat-file commit HEAD~2 >unrelatedpick_msg &&\n"> <"\tgit cat-file commit HEAD~3 >initial_msg &&\n"> <"\ttest_must_fail grep \"cherry picked from\" initial_msg &&\n"> <"\tgrep \"cherry picked from\" unrelatedpick_msg &&\n"> <"\tgrep \"cherry picked from\" picked_msg &&\n"> <"\tgrep \"cherry picked from\" anotherpick_msg\n"> ) } ) (C {(test_expect_success)} {(SQ <"--continue of single-pick respects -x">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_must_fail git cherry-pick -x picked &&\n"> <"\techo c >foo &&\n"> <"\tgit add foo &&\n"> <"\tgit cherry-pick --continue &&\n"> <"\ttest_path_is_missing .git/sequencer &&\n"> <"\tgit cat-file commit HEAD >msg &&\n"> <"\tgrep \"cherry picked from\" msg\n"> ) } ) (C {(test_expect_success)} {(SQ <"--continue respects -x in first commit in multi-pick">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_must_fail git cherry-pick -x picked anotherpick &&\n"> <"\techo c >foo &&\n"> <"\tgit add foo &&\n"> <"\tgit cherry-pick --continue &&\n"> <"\ttest_path_is_missing .git/sequencer &&\n"> <"\tgit cat-file commit HEAD^ >msg &&\n"> <"\tpicked=$(git rev-parse --verify picked) &&\n"> <"\tgrep \"cherry picked from.*$picked\" msg\n"> ) } ) (C {(test_expect_failure)} {(SQ <"--signoff is automatically propagated to resolved conflict">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_expect_code 1 git cherry-pick --signoff base..anotherpick &&\n"> <"\techo \"c\" >foo &&\n"> <"\tgit add foo &&\n"> <"\tgit commit &&\n"> <"\tgit cherry-pick --continue &&\n"> <"\ttest_path_is_missing .git/sequencer &&\n"> <"\tgit cat-file commit HEAD >anotherpick_msg &&\n"> <"\tgit cat-file commit HEAD~1 >picked_msg &&\n"> <"\tgit cat-file commit HEAD~2 >unrelatedpick_msg &&\n"> <"\tgit cat-file commit HEAD~3 >initial_msg &&\n"> <"\ttest_must_fail grep \"Signed-off-by:\" initial_msg &&\n"> <"\tgrep \"Signed-off-by:\" unrelatedpick_msg &&\n"> <"\ttest_must_fail grep \"Signed-off-by:\" picked_msg &&\n"> <"\tgrep \"Signed-off-by:\" anotherpick_msg\n"> ) } ) (C {(test_expect_failure)} {(SQ <"--signoff dropped for implicit commit of resolution, multi-pick case">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_must_fail git cherry-pick -s picked anotherpick &&\n"> <"\techo c >foo &&\n"> <"\tgit add foo &&\n"> <"\tgit cherry-pick --continue &&\n"> <"\n"> <"\tgit diff --exit-code HEAD &&\n"> <"\ttest_cmp_rev initial HEAD^^ &&\n"> <"\tgit cat-file commit HEAD^ >msg &&\n"> <"\t! grep Signed-off-by: msg\n"> ) } ) (C {(test_expect_failure)} {(SQ <"sign-off needs to be reaffirmed after conflict resolution, single-pick case">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_must_fail git cherry-pick -s picked &&\n"> <"\techo c >foo &&\n"> <"\tgit add foo &&\n"> <"\tgit cherry-pick --continue &&\n"> <"\n"> <"\tgit diff --exit-code HEAD &&\n"> <"\ttest_cmp_rev initial HEAD^ &&\n"> <"\tgit cat-file commit HEAD >msg &&\n"> <"\t! grep Signed-off-by: msg\n"> ) } ) (C {(test_expect_success)} {(SQ <"malformed instruction sheet 1">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_expect_code 1 git cherry-pick base..anotherpick &&\n"> <"\techo \"resolved\" >foo &&\n"> <"\tgit add foo &&\n"> <"\tgit commit &&\n"> <"\tsed \"s/pick /pick/\" .git/sequencer/todo >new_sheet &&\n"> <"\tcp new_sheet .git/sequencer/todo &&\n"> <"\ttest_expect_code 128 git cherry-pick --continue\n"> ) } ) (C {(test_expect_success)} {(SQ <"malformed instruction sheet 2">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_expect_code 1 git cherry-pick base..anotherpick &&\n"> <"\techo \"resolved\" >foo &&\n"> <"\tgit add foo &&\n"> <"\tgit commit &&\n"> <"\tsed \"s/pick/revert/\" .git/sequencer/todo >new_sheet &&\n"> <"\tcp new_sheet .git/sequencer/todo &&\n"> <"\ttest_expect_code 128 git cherry-pick --continue\n"> ) } ) (C {(test_expect_success)} {(SQ <"empty commit set">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_expect_code 128 git cherry-pick base..base\n"> ) } ) (C {(test_expect_success)} {(SQ <"malformed instruction sheet 3">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_expect_code 1 git cherry-pick base..anotherpick &&\n"> <"\techo \"resolved\" >foo &&\n"> <"\tgit add foo &&\n"> <"\tgit commit &&\n"> <"\tsed \"s/pick \\([0-9a-f]*\\)/pick $_r10/\" .git/sequencer/todo >new_sheet &&\n"> <"\tcp new_sheet .git/sequencer/todo &&\n"> <"\ttest_expect_code 128 git cherry-pick --continue\n"> ) } ) (C {(test_expect_success)} {(SQ <"instruction sheet, fat-fingers version">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_expect_code 1 git cherry-pick base..anotherpick &&\n"> <"\techo \"c\" >foo &&\n"> <"\tgit add foo &&\n"> <"\tgit commit &&\n"> <"\tsed \"s/pick \\([0-9a-f]*\\)/pick \t \\1 \t/\" .git/sequencer/todo >new_sheet &&\n"> <"\tcp new_sheet .git/sequencer/todo &&\n"> <"\tgit cherry-pick --continue\n"> ) } ) (C {(test_expect_success)} {(SQ <"commit descriptions in insn sheet are optional">)} { (SQ <"\n"> <"\tpristine_detach initial &&\n"> <"\ttest_expect_code 1 git cherry-pick base..anotherpick &&\n"> <"\techo \"c\" >foo &&\n"> <"\tgit add foo &&\n"> <"\tgit commit &&\n"> <"\tcut -d\" \" -f1,2 .git/sequencer/todo >new_sheet &&\n"> <"\tcp new_sheet .git/sequencer/todo &&\n"> <"\tgit cherry-pick --continue &&\n"> <"\ttest_path_is_missing .git/sequencer &&\n"> <"\tgit rev-list HEAD >commits &&\n"> <"\ttest_line_count = 4 commits\n"> ) } ) (C {(test_done)}) ] )