(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 cherry-pick and revert with conflicts\n' span_id: 6 ) (Token id:Id.Lit_Chars val:'\n' span_id:7) (Token id:Id.Lit_Chars val:' -\n' span_id:8) (Token id: Id.Lit_Chars val: ' + picked: rewrites foo to c\n' span_id: 9 ) (Token id:Id.Lit_Chars val:' + base: rewrites foo to b\n' span_id:10) (Token id: Id.Lit_Chars val: ' + initial: writes foo as a, unrelated as unrelated\n' span_id: 11 ) (Token id:Id.Lit_Chars val:'\n' span_id:12) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: pristine_detach body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {(git)} {(checkout)} {(-f)} {(DQ ($ Id.VSub_Number '$1') ('^0'))}) (C {(git)} {(read-tree)} {(-u)} {(--reset)} {(HEAD)}) (C {(git)} {(clean)} {(-d)} {(-f)} {(-f)} {(-q)} {(-x)}) ] ) ] ) ) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:78) (Token id:Id.Lit_Chars val:'\n' span_id:79) (Token id:Id.Lit_Chars val:'\techo unrelated >unrelated &&\n' span_id:80) (Token id:Id.Lit_Chars val:'\tgit add unrelated &&\n' span_id:81) (Token id:Id.Lit_Chars val:'\ttest_commit initial foo a &&\n' span_id:82) (Token id:Id.Lit_Chars val:'\ttest_commit base foo b &&\n' span_id:83) (Token id:Id.Lit_Chars val:'\ttest_commit picked foo c &&\n' span_id:84) (Token id:Id.Lit_Chars val:'\ttest_commit --signoff picked-signed foo d &&\n' span_id:85) (Token id:Id.Lit_Chars val:'\tgit config advice.detachedhead false\n' span_id:86) (Token id:Id.Lit_Chars val:'\n' span_id:87) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'failed cherry-pick does not advance HEAD' span_id:94))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:98) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:99) (Token id:Id.Lit_Chars val:'\n' span_id:100) (Token id:Id.Lit_Chars val:'\thead=$(git rev-parse HEAD) &&\n' span_id:101) (Token id:Id.Lit_Chars val:'\ttest_must_fail git cherry-pick picked &&\n' span_id:102) (Token id:Id.Lit_Chars val:'\tnewhead=$(git rev-parse HEAD) &&\n' span_id:103) (Token id:Id.Lit_Chars val:'\n' span_id:104) (Token id:Id.Lit_Chars val:'\ttest "$head" = "$newhead"\n' span_id:105) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'advice from failed cherry-pick' span_id:112))} { (DQ ('\n') ('\tpristine_detach initial &&\n') ('\n') ('\tpicked=') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:120) ) ('(git rev-parse --short picked) &&\n') ('\tcat <<-EOF >expected &&\n') ('\terror: could not apply ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:124) ) ('picked... picked\n') ('\thint: after resolving the conflicts, mark the corrected paths\n') ("\thint: with 'git add <paths>' or 'git rm <paths>'\n") ("\thint: and commit the result with 'git commit'\n") ('\tEOF\n') ('\ttest_must_fail git cherry-pick picked 2>actual &&\n') ('\n') ('\ttest_i18ncmp expected actual\n') ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'advice from failed cherry-pick --no-commit' span_id:139))} { (DQ ('\n') ('\tpristine_detach initial &&\n') ('\n') ('\tpicked=') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:147) ) ('(git rev-parse --short picked) &&\n') ('\tcat <<-EOF >expected &&\n') ('\terror: could not apply ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:151) ) ('picked... picked\n') ('\thint: after resolving the conflicts, mark the corrected paths\n') ("\thint: with 'git add <paths>' or 'git rm <paths>'\n") ('\tEOF\n') ('\ttest_must_fail git cherry-pick --no-commit picked 2>actual &&\n') ('\n') ('\ttest_i18ncmp expected actual\n') ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'failed cherry-pick sets CHERRY_PICK_HEAD' span_id:165))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:169) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:170) (Token id:Id.Lit_Chars val:'\ttest_must_fail git cherry-pick picked &&\n' span_id:171) (Token id: Id.Lit_Chars val: '\ttest_cmp_rev picked CHERRY_PICK_HEAD\n' span_id: 172 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'successful cherry-pick does not set CHERRY_PICK_HEAD' span_id: 179 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:183) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:184) (Token id:Id.Lit_Chars val:'\tgit cherry-pick base &&\n' span_id:185) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --verify CHERRY_PICK_HEAD\n' span_id: 186 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'cherry-pick --no-commit does not set CHERRY_PICK_HEAD' span_id: 193 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:197) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:198) (Token id:Id.Lit_Chars val:'\tgit cherry-pick --no-commit base &&\n' span_id:199) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --verify CHERRY_PICK_HEAD\n' span_id: 200 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'cherry-pick w/dirty tree does not set CHERRY_PICK_HEAD' span_id: 207 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:211) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:212) (Token id:Id.Lit_Chars val:'\techo foo > foo &&\n' span_id:213) (Token id: Id.Lit_Chars val: '\ttest_must_fail git cherry-pick base &&\n' span_id: 214 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify CHERRY_PICK_HEAD\n' span_id:215) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'cherry-pick --strategy=resolve w/dirty tree does not set CHERRY_PICK_HEAD' span_id: 224 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:228) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:229) (Token id:Id.Lit_Chars val:'\techo foo > foo &&\n' span_id:230) (Token id: Id.Lit_Chars val: '\ttest_must_fail git cherry-pick --strategy=resolve base &&\n' span_id: 231 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify CHERRY_PICK_HEAD\n' span_id:232) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'GIT_CHERRY_PICK_HELP suppresses CHERRY_PICK_HEAD' span_id: 239 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:243) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:244) (Token id:Id.Lit_Chars val:'\t(\n' span_id:245) (Token id: Id.Lit_Chars val: '\t\tGIT_CHERRY_PICK_HELP="and then do something else" &&\n' span_id: 246 ) (Token id:Id.Lit_Chars val:'\t\texport GIT_CHERRY_PICK_HELP &&\n' span_id:247) (Token id: Id.Lit_Chars val: '\t\ttest_must_fail git cherry-pick picked\n' span_id: 248 ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:249) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --verify CHERRY_PICK_HEAD\n' span_id: 250 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git reset clears CHERRY_PICK_HEAD' span_id:257))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:261) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:262) (Token id:Id.Lit_Chars val:'\n' span_id:263) (Token id: Id.Lit_Chars val: '\ttest_must_fail git cherry-pick picked &&\n' span_id: 264 ) (Token id:Id.Lit_Chars val:'\tgit reset &&\n' span_id:265) (Token id:Id.Lit_Chars val:'\n' span_id:266) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify CHERRY_PICK_HEAD\n' span_id:267) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'failed commit does not clear CHERRY_PICK_HEAD' span_id:274))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:278) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:279) (Token id:Id.Lit_Chars val:'\n' span_id:280) (Token id: Id.Lit_Chars val: '\ttest_must_fail git cherry-pick picked &&\n' span_id: 281 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git commit &&\n' span_id:282) (Token id:Id.Lit_Chars val:'\n' span_id:283) (Token id:Id.Lit_Chars val:'\ttest_cmp_rev picked CHERRY_PICK_HEAD\n' span_id:284) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'cancelled commit does not clear CHERRY_PICK_HEAD' span_id: 291 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:295) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:296) (Token id:Id.Lit_Chars val:'\n' span_id:297) (Token id: Id.Lit_Chars val: '\ttest_must_fail git cherry-pick picked &&\n' span_id: 298 ) (Token id:Id.Lit_Chars val:'\techo resolved >foo &&\n' span_id:299) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:300) (Token id:Id.Lit_Chars val:'\tgit update-index --refresh -q &&\n' span_id:301) (Token id: Id.Lit_Chars val: '\ttest_must_fail git diff-index --exit-code HEAD &&\n' span_id: 302 ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:303) (Token id:Id.Lit_Chars val:'\t\tGIT_EDITOR=false &&\n' span_id:304) (Token id:Id.Lit_Chars val:'\t\texport GIT_EDITOR &&\n' span_id:305) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git commit\n' span_id:306) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:307) (Token id:Id.Lit_Chars val:'\n' span_id:308) (Token id: Id.Lit_Chars val: '\ttest_cmp_rev picked CHERRY_PICK_HEAD\n' span_id: 309 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'successful commit clears CHERRY_PICK_HEAD' span_id:316))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:320) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:321) (Token id:Id.Lit_Chars val:'\n' span_id:322) (Token id: Id.Lit_Chars val: '\ttest_must_fail git cherry-pick picked &&\n' span_id: 323 ) (Token id:Id.Lit_Chars val:'\techo resolved >foo &&\n' span_id:324) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:325) (Token id:Id.Lit_Chars val:'\tgit commit &&\n' span_id:326) (Token id:Id.Lit_Chars val:'\n' span_id:327) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify CHERRY_PICK_HEAD\n' span_id:328) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'failed cherry-pick produces dirty index' span_id:335))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:339) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:340) (Token id:Id.Lit_Chars val:'\n' span_id:341) (Token id: Id.Lit_Chars val: '\ttest_must_fail git cherry-pick picked &&\n' span_id: 342 ) (Token id:Id.Lit_Chars val:'\n' span_id:343) (Token id: Id.Lit_Chars val: '\ttest_must_fail git update-index --refresh -q &&\n' span_id: 344 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff-index --exit-code HEAD\n' span_id:345) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'failed cherry-pick registers participants in index' span_id: 352 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:356) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:357) (Token id:Id.Lit_Chars val:'\t{\n' span_id:358) (Token id:Id.Lit_Chars val:'\t\tgit checkout base -- foo &&\n' span_id:359) (Token id:Id.Lit_Chars val:'\t\tgit ls-files --stage foo &&\n' span_id:360) (Token id:Id.Lit_Chars val:'\t\tgit checkout initial -- foo &&\n' span_id:361) (Token id:Id.Lit_Chars val:'\t\tgit ls-files --stage foo &&\n' span_id:362) (Token id:Id.Lit_Chars val:'\t\tgit checkout picked -- foo &&\n' span_id:363) (Token id:Id.Lit_Chars val:'\t\tgit ls-files --stage foo\n' span_id:364) (Token id:Id.Lit_Chars val:'\t} > stages &&\n' span_id:365) (Token id:Id.Lit_Chars val:'\tsed "\n' span_id:366) (Token id:Id.Lit_Chars val:'\t\t1 s/ 0\t/ 1\t/\n' span_id:367) (Token id:Id.Lit_Chars val:'\t\t2 s/ 0\t/ 2\t/\n' span_id:368) (Token id:Id.Lit_Chars val:'\t\t3 s/ 0\t/ 3\t/\n' span_id:369) (Token id:Id.Lit_Chars val:'\t" < stages > expected &&\n' span_id:370) (Token id:Id.Lit_Chars val:'\tgit read-tree -u --reset HEAD &&\n' span_id:371) (Token id:Id.Lit_Chars val:'\n' span_id:372) (Token id: Id.Lit_Chars val: '\ttest_must_fail git cherry-pick picked &&\n' span_id: 373 ) (Token id:Id.Lit_Chars val:'\tgit ls-files --stage --unmerged > actual &&\n' span_id:374) (Token id:Id.Lit_Chars val:'\n' span_id:375) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:376) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'failed cherry-pick describes conflict in work tree' span_id: 383 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:387) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:388) (Token id:Id.Lit_Chars val:'\tcat <<-EOF > expected &&\n' span_id:389) (Token id:Id.Lit_Chars val:'\t<<<<<<< HEAD\n' span_id:390) (Token id:Id.Lit_Chars val:'\ta\n' span_id:391) (Token id:Id.Lit_Chars val:'\t=======\n' span_id:392) (Token id:Id.Lit_Chars val:'\tc\n' span_id:393) (Token id:Id.Lit_Chars val:'\t>>>>>>> objid picked\n' span_id:394) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:395) (Token id:Id.Lit_Chars val:'\n' span_id:396) (Token id: Id.Lit_Chars val: '\ttest_must_fail git cherry-pick picked &&\n' span_id: 397 ) (Token id:Id.Lit_Chars val:'\n' span_id:398) (Token id: Id.Lit_Chars val: '\tsed "s/[a-f0-9]*\\.\\.\\./objid/" foo > actual &&\n' span_id: 399 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:400) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'diff3 -m style' span_id:407))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:411) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:412) (Token id:Id.Lit_Chars val:'\tgit config merge.conflictstyle diff3 &&\n' span_id:413) (Token id:Id.Lit_Chars val:'\tcat <<-EOF > expected &&\n' span_id:414) (Token id:Id.Lit_Chars val:'\t<<<<<<< HEAD\n' span_id:415) (Token id:Id.Lit_Chars val:'\ta\n' span_id:416) (Token id:Id.Lit_Chars val:'\t||||||| parent of objid picked\n' span_id:417) (Token id:Id.Lit_Chars val:'\tb\n' span_id:418) (Token id:Id.Lit_Chars val:'\t=======\n' span_id:419) (Token id:Id.Lit_Chars val:'\tc\n' span_id:420) (Token id:Id.Lit_Chars val:'\t>>>>>>> objid picked\n' span_id:421) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:422) (Token id:Id.Lit_Chars val:'\n' span_id:423) (Token id: Id.Lit_Chars val: '\ttest_must_fail git cherry-pick picked &&\n' span_id: 424 ) (Token id:Id.Lit_Chars val:'\n' span_id:425) (Token id: Id.Lit_Chars val: '\tsed "s/[a-f0-9]*\\.\\.\\./objid/" foo > actual &&\n' span_id: 426 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:427) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'revert also handles conflicts sanely' span_id:434))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:438) (Token id: Id.Lit_Chars val: '\tgit config --unset merge.conflictstyle &&\n' span_id: 439 ) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:440) (Token id:Id.Lit_Chars val:'\tcat <<-EOF > expected &&\n' span_id:441) (Token id:Id.Lit_Chars val:'\t<<<<<<< HEAD\n' span_id:442) (Token id:Id.Lit_Chars val:'\ta\n' span_id:443) (Token id:Id.Lit_Chars val:'\t=======\n' span_id:444) (Token id:Id.Lit_Chars val:'\tb\n' span_id:445) (Token id:Id.Lit_Chars val:'\t>>>>>>> parent of objid picked\n' span_id:446) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:447) (Token id:Id.Lit_Chars val:'\t{\n' span_id:448) (Token id:Id.Lit_Chars val:'\t\tgit checkout picked -- foo &&\n' span_id:449) (Token id:Id.Lit_Chars val:'\t\tgit ls-files --stage foo &&\n' span_id:450) (Token id:Id.Lit_Chars val:'\t\tgit checkout initial -- foo &&\n' span_id:451) (Token id:Id.Lit_Chars val:'\t\tgit ls-files --stage foo &&\n' span_id:452) (Token id:Id.Lit_Chars val:'\t\tgit checkout base -- foo &&\n' span_id:453) (Token id:Id.Lit_Chars val:'\t\tgit ls-files --stage foo\n' span_id:454) (Token id:Id.Lit_Chars val:'\t} > stages &&\n' span_id:455) (Token id:Id.Lit_Chars val:'\tsed "\n' span_id:456) (Token id:Id.Lit_Chars val:'\t\t1 s/ 0\t/ 1\t/\n' span_id:457) (Token id:Id.Lit_Chars val:'\t\t2 s/ 0\t/ 2\t/\n' span_id:458) (Token id:Id.Lit_Chars val:'\t\t3 s/ 0\t/ 3\t/\n' span_id:459) (Token id:Id.Lit_Chars val:'\t" < stages > expected-stages &&\n' span_id:460) (Token id:Id.Lit_Chars val:'\tgit read-tree -u --reset HEAD &&\n' span_id:461) (Token id:Id.Lit_Chars val:'\n' span_id:462) (Token id:Id.Lit_Chars val:'\thead=$(git rev-parse HEAD) &&\n' span_id:463) (Token id:Id.Lit_Chars val:'\ttest_must_fail git revert picked &&\n' span_id:464) (Token id:Id.Lit_Chars val:'\tnewhead=$(git rev-parse HEAD) &&\n' span_id:465) (Token id:Id.Lit_Chars val:'\tgit ls-files --stage --unmerged > actual-stages &&\n' span_id:466) (Token id:Id.Lit_Chars val:'\n' span_id:467) (Token id:Id.Lit_Chars val:'\ttest "$head" = "$newhead" &&\n' span_id:468) (Token id: Id.Lit_Chars val: '\ttest_must_fail git update-index --refresh -q &&\n' span_id: 469 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git diff-index --exit-code HEAD &&\n' span_id:470) (Token id: Id.Lit_Chars val: '\ttest_cmp expected-stages actual-stages &&\n' span_id: 471 ) (Token id:Id.Lit_Chars val:'\tsed "s/[a-f0-9]*\\.\\.\\./objid/" foo > actual &&\n' span_id:472) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:473) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'failed revert sets REVERT_HEAD' span_id:480))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:484) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:485) (Token id:Id.Lit_Chars val:'\ttest_must_fail git revert picked &&\n' span_id:486) (Token id:Id.Lit_Chars val:'\ttest_cmp_rev picked REVERT_HEAD\n' span_id:487) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'successful revert does not set REVERT_HEAD' span_id:494))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:498) (Token id:Id.Lit_Chars val:'\tpristine_detach base &&\n' span_id:499) (Token id:Id.Lit_Chars val:'\tgit revert base &&\n' span_id:500) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --verify CHERRY_PICK_HEAD &&\n' span_id: 501 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify REVERT_HEAD\n' span_id:502) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'revert --no-commit sets REVERT_HEAD' span_id:509))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:513) (Token id:Id.Lit_Chars val:'\tpristine_detach base &&\n' span_id:514) (Token id:Id.Lit_Chars val:'\tgit revert --no-commit base &&\n' span_id:515) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --verify CHERRY_PICK_HEAD &&\n' span_id: 516 ) (Token id:Id.Lit_Chars val:'\ttest_cmp_rev base REVERT_HEAD\n' span_id:517) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'revert w/dirty tree does not set REVERT_HEAD' span_id:524))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:528) (Token id:Id.Lit_Chars val:'\tpristine_detach base &&\n' span_id:529) (Token id:Id.Lit_Chars val:'\techo foo > foo &&\n' span_id:530) (Token id:Id.Lit_Chars val:'\ttest_must_fail git revert base &&\n' span_id:531) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --verify CHERRY_PICK_HEAD &&\n' span_id: 532 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify REVERT_HEAD\n' span_id:533) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'GIT_CHERRY_PICK_HELP does not suppress REVERT_HEAD' span_id: 540 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:544) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:545) (Token id:Id.Lit_Chars val:'\t(\n' span_id:546) (Token id: Id.Lit_Chars val: '\t\tGIT_CHERRY_PICK_HELP="and then do something else" &&\n' span_id: 547 ) (Token id: Id.Lit_Chars val: '\t\tGIT_REVERT_HELP="and then do something else, again" &&\n' span_id: 548 ) (Token id:Id.Lit_Chars val:'\t\texport GIT_CHERRY_PICK_HELP GIT_REVERT_HELP &&\n' span_id:549) (Token id:Id.Lit_Chars val:'\t\ttest_must_fail git revert picked\n' span_id:550) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:551) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --verify CHERRY_PICK_HEAD &&\n' span_id: 552 ) (Token id:Id.Lit_Chars val:'\ttest_cmp_rev picked REVERT_HEAD\n' span_id:553) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git reset clears REVERT_HEAD' span_id:560))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:564) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:565) (Token id:Id.Lit_Chars val:'\ttest_must_fail git revert picked &&\n' span_id:566) (Token id:Id.Lit_Chars val:'\tgit reset &&\n' span_id:567) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse --verify REVERT_HEAD\n' span_id:568) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'failed commit does not clear REVERT_HEAD' span_id:575))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:579) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:580) (Token id:Id.Lit_Chars val:'\ttest_must_fail git revert picked &&\n' span_id:581) (Token id:Id.Lit_Chars val:'\ttest_must_fail git commit &&\n' span_id:582) (Token id:Id.Lit_Chars val:'\ttest_cmp_rev picked REVERT_HEAD\n' span_id:583) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'revert conflict, diff3 -m style' span_id:590))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:594) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:595) (Token id:Id.Lit_Chars val:'\tgit config merge.conflictstyle diff3 &&\n' span_id:596) (Token id:Id.Lit_Chars val:'\tcat <<-EOF > expected &&\n' span_id:597) (Token id:Id.Lit_Chars val:'\t<<<<<<< HEAD\n' span_id:598) (Token id:Id.Lit_Chars val:'\ta\n' span_id:599) (Token id:Id.Lit_Chars val:'\t||||||| objid picked\n' span_id:600) (Token id:Id.Lit_Chars val:'\tc\n' span_id:601) (Token id:Id.Lit_Chars val:'\t=======\n' span_id:602) (Token id:Id.Lit_Chars val:'\tb\n' span_id:603) (Token id:Id.Lit_Chars val:'\t>>>>>>> parent of objid picked\n' span_id:604) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:605) (Token id:Id.Lit_Chars val:'\n' span_id:606) (Token id:Id.Lit_Chars val:'\ttest_must_fail git revert picked &&\n' span_id:607) (Token id:Id.Lit_Chars val:'\n' span_id:608) (Token id: Id.Lit_Chars val: '\tsed "s/[a-f0-9]*\\.\\.\\./objid/" foo > actual &&\n' span_id: 609 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:610) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'failed cherry-pick does not forget -s' span_id:617))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:621) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:622) (Token id:Id.Lit_Chars val:'\ttest_must_fail git cherry-pick -s picked &&\n' span_id:623) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep -e "Signed-off-by" .git/MERGE_MSG\n' span_id: 624 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'commit after failed cherry-pick does not add duplicated -s' span_id: 631 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:635) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:636) (Token id:Id.Lit_Chars val:'\ttest_must_fail git cherry-pick -s picked-signed &&\n' span_id:637) (Token id:Id.Lit_Chars val:'\tgit commit -a -s &&\n' span_id:638) (Token id:Id.Lit_Chars val:'\ttest $(git show -s |grep -c "Signed-off-by") = 1\n' span_id:639) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'commit after failed cherry-pick adds -s at the right place' span_id: 646 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:650) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:651) (Token id:Id.Lit_Chars val:'\ttest_must_fail git cherry-pick picked &&\n' span_id:652) (Token id:Id.Lit_Chars val:'\n' span_id:653) (Token id:Id.Lit_Chars val:'\tgit commit -a -s &&\n' span_id:654) (Token id:Id.Lit_Chars val:'\n' span_id:655) (Token id:Id.Lit_Chars val:'\t# Do S-o-b and Conflicts appear in the right order?\n' span_id:656) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expect &&\n' span_id:657) (Token id:Id.Lit_Chars val:'\tSigned-off-by: C O Mitter <committer@example.com>\n' span_id:658) (Token id:Id.Lit_Chars val:'\t# Conflicts:\n' span_id:659) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:660) (Token id:Id.Lit_Chars val:'\tgrep -e "^# Conflicts:" -e ' span_id:661) ) (Id.Lit_Other '^') (Signed-off-by) (SQ (Token id:Id.Lit_Chars val:' <.git/COMMIT_EDITMSG >actual &&\n' span_id:666) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:667) (Token id:Id.Lit_Chars val:'\n' span_id:668) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expected &&\n' span_id:669) (Token id:Id.Lit_Chars val:'\tpicked\n' span_id:670) (Token id:Id.Lit_Chars val:'\n' span_id:671) (Token id: Id.Lit_Chars val: '\tSigned-off-by: C O Mitter <committer@example.com>\n' span_id: 672 ) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:673) (Token id:Id.Lit_Chars val:'\n' span_id:674) (Token id: Id.Lit_Chars val: '\tgit show -s --pretty=format:%B >actual &&\n' span_id: 675 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:676) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'commit --amend -s places the sign-off at the right place' span_id: 683 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:687) (Token id:Id.Lit_Chars val:'\tpristine_detach initial &&\n' span_id:688) (Token id:Id.Lit_Chars val:'\ttest_must_fail git cherry-pick picked &&\n' span_id:689) (Token id:Id.Lit_Chars val:'\n' span_id:690) (Token id:Id.Lit_Chars val:'\t# emulate old-style conflicts block\n' span_id:691) (Token id: Id.Lit_Chars val: '\tmv .git/MERGE_MSG .git/MERGE_MSG+ &&\n' span_id: 692 ) (Token id: Id.Lit_Chars val: '\tsed -e "/^# Conflicts:/,\\$s/^# *//" <.git/MERGE_MSG+ >.git/MERGE_MSG &&\n' span_id: 693 ) (Token id:Id.Lit_Chars val:'\n' span_id:694) (Token id:Id.Lit_Chars val:'\tgit commit -a &&\n' span_id:695) (Token id:Id.Lit_Chars val:'\tgit commit --amend -s &&\n' span_id:696) (Token id:Id.Lit_Chars val:'\n' span_id:697) (Token id:Id.Lit_Chars val:'\t# Do S-o-b and Conflicts appear in the right order?\n' span_id:698) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOF >expect &&\n' span_id:699) (Token id:Id.Lit_Chars val:'\tSigned-off-by: C O Mitter <committer@example.com>\n' span_id:700) (Token id:Id.Lit_Chars val:'\tConflicts:\n' span_id:701) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:702) (Token id:Id.Lit_Chars val:'\tgrep -e "^Conflicts:" -e ' span_id:703) ) (Id.Lit_Other '^') (Signed-off-by) (SQ (Token id:Id.Lit_Chars val:' <.git/COMMIT_EDITMSG >actual &&\n' span_id:708) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:709) ) } ) (C {(test_done)}) ] )