(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 ops: [Op_DAmp Op_DAmp Op_DAmp] children: [ (C {(git)} {(cherry-pick)} {(--quit)}) (C {(git)} {(checkout)} {(-f)} {(DQ ($ VSub_Number '$1') ('^0'))}) (C {(git)} {(read-tree)} {(-u)} {(--reset)} {(HEAD)}) (C {(git)} {(clean)} {(-d)} {(-f)} {(-f)} {(-q)} {(-x)}) ] ) ] 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)}) ] )