(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:'Tests git bisect functionality' span_id:14))} spids: [12] ) ] ) (command.Simple words: [{(exec)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:20) fd: -1 arg_word: {(/dev/null)} ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: add_line_into_file body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_line) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [36] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:_file) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [40] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(-f)} {(DQ ($ Id.VSub_DollarName '$_file'))} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:56) ) ] action: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [{(echo)} {(DQ ($ Id.VSub_DollarName '$_line'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:67) fd: -1 arg_word: {($ Id.VSub_DollarName '$_file')} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:73) arg_word: {($ Id.VSub_QMark '$?')} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:MSG) op: assign_op.Equal rhs: { (DQ ('Add <') ($ Id.VSub_DollarName '$_line') ('> into <') ($ Id.VSub_DollarName '$_file') ('>.') ) } spids: [78] ) ] ) ] spids: [45 58] ) ] else_action: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [{(echo)} {(DQ ($ Id.VSub_DollarName '$_line'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:97) fd: -1 arg_word: {($ Id.VSub_DollarName '$_file')} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:103) arg_word: {($ Id.VSub_QMark '$?')} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(git)} {(add)} {($ Id.VSub_DollarName '$_file')}) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:116) arg_word: {($ Id.VSub_QMark '$?')} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:MSG) op: assign_op.Equal rhs: { (DQ ('Create file <') ($ Id.VSub_DollarName '$_file') ('> with <') ($ Id.VSub_DollarName '$_line') ('> inside.') ) } spids: [121] ) ] ) ] ) (C {(test_tick)}) (C {(git)} {(commit)} {(--quiet)} {(-m)} {(DQ ($ Id.VSub_DollarName '$MSG'))} {($ Id.VSub_DollarName '$_file')} ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:HASH1) op: assign_op.Equal rhs: (word.Empty) spids: [155] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:HASH2) op: assign_op.Equal rhs: (word.Empty) spids: [157] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:HASH3) op: assign_op.Equal rhs: (word.Empty) spids: [159] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:HASH4) op: assign_op.Equal rhs: (word.Empty) spids: [161] ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'set up basic repo with 1 file (hello) and 4 commits' span_id: 167 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:171) (Token id: Id.Lit_Chars val: ' add_line_into_file "1: Hello World" hello &&\n' span_id: 172 ) (Token id:Id.Lit_Chars val:' HASH1=$(git rev-parse --verify HEAD) &&\n' span_id:173) (Token id: Id.Lit_Chars val: ' add_line_into_file "2: A new day for git" hello &&\n' span_id: 174 ) (Token id:Id.Lit_Chars val:' HASH2=$(git rev-parse --verify HEAD) &&\n' span_id:175) (Token id: Id.Lit_Chars val: ' add_line_into_file "3: Another new day for git" hello &&\n' span_id: 176 ) (Token id:Id.Lit_Chars val:' HASH3=$(git rev-parse --verify HEAD) &&\n' span_id:177) (Token id: Id.Lit_Chars val: ' add_line_into_file "4: Ciao for now" hello &&\n' span_id: 178 ) (Token id:Id.Lit_Chars val:' HASH4=$(git rev-parse --verify HEAD)\n' span_id:179) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect starts with only one bad' span_id:186))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:190) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:191) (Token id:Id.Lit_Chars val:'\tgit bisect start &&\n' span_id:192) (Token id:Id.Lit_Chars val:'\tgit bisect bad $HASH4 &&\n' span_id:193) (Token id:Id.Lit_Chars val:'\tgit bisect next\n' span_id:194) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect does not start with only one good' span_id:201))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:205) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:206) (Token id:Id.Lit_Chars val:'\tgit bisect start &&\n' span_id:207) (Token id:Id.Lit_Chars val:'\tgit bisect good $HASH1 &&\n' span_id:208) (Token id:Id.Lit_Chars val:'\ttest_must_fail git bisect next\n' span_id:209) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect start with one bad and good' span_id:216))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:220) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:221) (Token id:Id.Lit_Chars val:'\tgit bisect start &&\n' span_id:222) (Token id:Id.Lit_Chars val:'\tgit bisect good $HASH1 &&\n' span_id:223) (Token id:Id.Lit_Chars val:'\tgit bisect bad $HASH4 &&\n' span_id:224) (Token id:Id.Lit_Chars val:'\tgit bisect next\n' span_id:225) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect fails if given any junk instead of revs' span_id:232))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:236) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:237) (Token id:Id.Lit_Chars val:'\ttest_must_fail git bisect start foo $HASH1 -- &&\n' span_id:238) (Token id: Id.Lit_Chars val: '\ttest_must_fail git bisect start $HASH4 $HASH1 bar -- &&\n' span_id: 239 ) (Token id:Id.Lit_Chars val:'\ttest -z "$(git for-each-ref "refs/bisect/*")" &&\n' span_id:240) (Token id: Id.Lit_Chars val: '\ttest -z "$(ls .git/BISECT_* 2>/dev/null)" &&\n' span_id: 241 ) (Token id:Id.Lit_Chars val:'\tgit bisect start &&\n' span_id:242) (Token id: Id.Lit_Chars val: '\ttest_must_fail git bisect good foo $HASH1 &&\n' span_id: 243 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git bisect good $HASH1 bar &&\n' span_id:244) (Token id: Id.Lit_Chars val: '\ttest_must_fail git bisect bad frotz &&\n' span_id: 245 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git bisect bad $HASH3 $HASH4 &&\n' span_id:246) (Token id: Id.Lit_Chars val: '\ttest_must_fail git bisect skip bar $HASH3 &&\n' span_id: 247 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git bisect skip $HASH1 foo &&\n' span_id:248) (Token id: Id.Lit_Chars val: '\ttest -z "$(git for-each-ref "refs/bisect/*")" &&\n' span_id: 249 ) (Token id:Id.Lit_Chars val:'\tgit bisect good $HASH1 &&\n' span_id:250) (Token id:Id.Lit_Chars val:'\tgit bisect bad $HASH4\n' span_id:251) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect reset: back in the master branch' span_id:258))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:262) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:263) (Token id:Id.Lit_Chars val:'\techo "* master" > branch.expect &&\n' span_id:264) (Token id:Id.Lit_Chars val:'\tgit branch > branch.output &&\n' span_id:265) (Token id:Id.Lit_Chars val:'\tcmp branch.expect branch.output\n' span_id:266) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect reset: back in another branch' span_id:273))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:277) (Token id:Id.Lit_Chars val:'\tgit checkout -b other &&\n' span_id:278) (Token id:Id.Lit_Chars val:'\tgit bisect start &&\n' span_id:279) (Token id:Id.Lit_Chars val:'\tgit bisect good $HASH1 &&\n' span_id:280) (Token id:Id.Lit_Chars val:'\tgit bisect bad $HASH3 &&\n' span_id:281) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:282) (Token id:Id.Lit_Chars val:'\techo " master" > branch.expect &&\n' span_id:283) (Token id:Id.Lit_Chars val:'\techo "* other" >> branch.expect &&\n' span_id:284) (Token id:Id.Lit_Chars val:'\tgit branch > branch.output &&\n' span_id:285) (Token id:Id.Lit_Chars val:'\tcmp branch.expect branch.output\n' span_id:286) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect reset when not bisecting' span_id:293))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:297) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:298) (Token id:Id.Lit_Chars val:'\tgit branch > branch.output &&\n' span_id:299) (Token id:Id.Lit_Chars val:'\tcmp branch.expect branch.output\n' span_id:300) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect reset removes packed refs' span_id:307))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:311) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:312) (Token id:Id.Lit_Chars val:'\tgit bisect start &&\n' span_id:313) (Token id:Id.Lit_Chars val:'\tgit bisect good $HASH1 &&\n' span_id:314) (Token id:Id.Lit_Chars val:'\tgit bisect bad $HASH3 &&\n' span_id:315) (Token id:Id.Lit_Chars val:'\tgit pack-refs --all --prune &&\n' span_id:316) (Token id:Id.Lit_Chars val:'\tgit bisect next &&\n' span_id:317) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:318) (Token id:Id.Lit_Chars val:'\ttest -z "$(git for-each-ref "refs/bisect/*")" &&\n' span_id:319) (Token id: Id.Lit_Chars val: '\ttest -z "$(git for-each-ref "refs/heads/bisect")"\n' span_id: 320 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'bisect reset removes bisect state after --no-checkout' span_id: 327 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:331) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:332) (Token id:Id.Lit_Chars val:'\tgit bisect start --no-checkout &&\n' span_id:333) (Token id:Id.Lit_Chars val:'\tgit bisect good $HASH1 &&\n' span_id:334) (Token id:Id.Lit_Chars val:'\tgit bisect bad $HASH3 &&\n' span_id:335) (Token id:Id.Lit_Chars val:'\tgit bisect next &&\n' span_id:336) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:337) (Token id: Id.Lit_Chars val: '\ttest -z "$(git for-each-ref "refs/bisect/*")" &&\n' span_id: 338 ) (Token id:Id.Lit_Chars val:'\ttest -z "$(git for-each-ref "refs/heads/bisect")" &&\n' span_id:339) (Token id: Id.Lit_Chars val: '\ttest -z "$(git for-each-ref "BISECT_HEAD")"\n' span_id: 340 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect start: back in good branch' span_id:347))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:351) (Token id:Id.Lit_Chars val:'\tgit branch > branch.output &&\n' span_id:352) (Token id:Id.Lit_Chars val:'\tgrep "* other" branch.output > /dev/null &&\n' span_id:353) (Token id: Id.Lit_Chars val: '\tgit bisect start $HASH4 $HASH1 -- &&\n' span_id: 354 ) (Token id:Id.Lit_Chars val:'\tgit bisect good &&\n' span_id:355) (Token id: Id.Lit_Chars val: '\tgit bisect start $HASH4 $HASH1 -- &&\n' span_id: 356 ) (Token id:Id.Lit_Chars val:'\tgit bisect bad &&\n' span_id:357) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:358) (Token id:Id.Lit_Chars val:'\tgit branch > branch.output &&\n' span_id:359) (Token id: Id.Lit_Chars val: '\tgrep "* other" branch.output > /dev/null\n' span_id: 360 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'bisect start: no ".git/BISECT_START" created if junk rev' span_id: 367 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:371) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:372) (Token id:Id.Lit_Chars val:'\ttest_must_fail git bisect start $HASH4 foo -- &&\n' span_id:373) (Token id:Id.Lit_Chars val:'\tgit branch > branch.output &&\n' span_id:374) (Token id:Id.Lit_Chars val:'\tgrep "* other" branch.output > /dev/null &&\n' span_id:375) (Token id: Id.Lit_Chars val: '\ttest_must_fail test -e .git/BISECT_START\n' span_id: 376 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'bisect start: existing ".git/BISECT_START" not modified if junk rev' span_id: 383 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:387) (Token id: Id.Lit_Chars val: '\tgit bisect start $HASH4 $HASH1 -- &&\n' span_id: 388 ) (Token id:Id.Lit_Chars val:'\tgit bisect good &&\n' span_id:389) (Token id:Id.Lit_Chars val:'\tcp .git/BISECT_START saved &&\n' span_id:390) (Token id:Id.Lit_Chars val:'\ttest_must_fail git bisect start $HASH4 foo -- &&\n' span_id:391) (Token id:Id.Lit_Chars val:'\tgit branch > branch.output &&\n' span_id:392) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "* (no branch, bisect started on other)" branch.output > /dev/null &&\n' span_id: 393 ) (Token id:Id.Lit_Chars val:'\ttest_cmp saved .git/BISECT_START\n' span_id:394) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'bisect start: no ".git/BISECT_START" if mistaken rev' span_id: 400 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:404) (Token id: Id.Lit_Chars val: '\tgit bisect start $HASH4 $HASH1 -- &&\n' span_id: 405 ) (Token id:Id.Lit_Chars val:'\tgit bisect good &&\n' span_id:406) (Token id: Id.Lit_Chars val: '\ttest_must_fail git bisect start $HASH1 $HASH4 -- &&\n' span_id: 407 ) (Token id:Id.Lit_Chars val:'\tgit branch > branch.output &&\n' span_id:408) (Token id: Id.Lit_Chars val: '\tgrep "* other" branch.output > /dev/null &&\n' span_id: 409 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail test -e .git/BISECT_START\n' span_id:410) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'bisect start: no ".git/BISECT_START" if checkout error' span_id: 417 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:421) (Token id:Id.Lit_Chars val:'\techo "temp stuff" > hello &&\n' span_id:422) (Token id:Id.Lit_Chars val:'\ttest_must_fail git bisect start $HASH4 $HASH1 -- &&\n' span_id:423) (Token id:Id.Lit_Chars val:'\tgit branch &&\n' span_id:424) (Token id:Id.Lit_Chars val:'\tgit branch > branch.output &&\n' span_id:425) (Token id: Id.Lit_Chars val: '\tgrep "* other" branch.output > /dev/null &&\n' span_id: 426 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail test -e .git/BISECT_START &&\n' span_id:427) (Token id: Id.Lit_Chars val: '\ttest -z "$(git for-each-ref "refs/bisect/*")" &&\n' span_id: 428 ) (Token id:Id.Lit_Chars val:'\tgit checkout HEAD hello\n' span_id:429) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect skip: successful result' span_id:445))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:449) (Token id: Id.Lit_Chars val: '\ttest_when_finished git bisect reset &&\n' span_id: 450 ) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:451) (Token id:Id.Lit_Chars val:'\tgit bisect start $HASH4 $HASH1 &&\n' span_id:452) (Token id:Id.Lit_Chars val:'\tgit bisect skip &&\n' span_id:453) (Token id: Id.Lit_Chars val: '\tgit bisect bad > my_bisect_log.txt &&\n' span_id: 454 ) (Token id:Id.Lit_Chars val:'\tgrep "$HASH2 is the first bad commit" my_bisect_log.txt\n' span_id:455) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect skip: cannot tell between 3 commits' span_id:471))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:475) (Token id: Id.Lit_Chars val: '\ttest_when_finished git bisect reset &&\n' span_id: 476 ) (Token id:Id.Lit_Chars val:'\tgit bisect start $HASH4 $HASH1 &&\n' span_id:477) (Token id:Id.Lit_Chars val:'\tgit bisect skip &&\n' span_id:478) (Token id: Id.Lit_Chars val: '\ttest_expect_code 2 git bisect skip >my_bisect_log.txt &&\n' span_id: 479 ) (Token id: Id.Lit_Chars val: '\tgrep "first bad commit could be any of" my_bisect_log.txt &&\n' span_id: 480 ) (Token id:Id.Lit_Chars val:'\t! grep $HASH1 my_bisect_log.txt &&\n' span_id:481) (Token id:Id.Lit_Chars val:'\tgrep $HASH2 my_bisect_log.txt &&\n' span_id:482) (Token id:Id.Lit_Chars val:'\tgrep $HASH3 my_bisect_log.txt &&\n' span_id:483) (Token id:Id.Lit_Chars val:'\tgrep $HASH4 my_bisect_log.txt\n' span_id:484) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect skip: cannot tell between 2 commits' span_id:503))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:507) (Token id: Id.Lit_Chars val: '\ttest_when_finished git bisect reset &&\n' span_id: 508 ) (Token id:Id.Lit_Chars val:'\tgit bisect start $HASH4 $HASH1 &&\n' span_id:509) (Token id:Id.Lit_Chars val:'\tgit bisect skip &&\n' span_id:510) (Token id: Id.Lit_Chars val: '\ttest_expect_code 2 git bisect good >my_bisect_log.txt &&\n' span_id: 511 ) (Token id: Id.Lit_Chars val: '\tgrep "first bad commit could be any of" my_bisect_log.txt &&\n' span_id: 512 ) (Token id:Id.Lit_Chars val:'\t! grep $HASH1 my_bisect_log.txt &&\n' span_id:513) (Token id:Id.Lit_Chars val:'\t! grep $HASH2 my_bisect_log.txt &&\n' span_id:514) (Token id:Id.Lit_Chars val:'\tgrep $HASH3 my_bisect_log.txt &&\n' span_id:515) (Token id:Id.Lit_Chars val:'\tgrep $HASH4 my_bisect_log.txt\n' span_id:516) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect skip: with commit both bad and skipped' span_id:535))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:539) (Token id: Id.Lit_Chars val: '\ttest_when_finished git bisect reset &&\n' span_id: 540 ) (Token id:Id.Lit_Chars val:'\tgit bisect start &&\n' span_id:541) (Token id:Id.Lit_Chars val:'\tgit bisect skip &&\n' span_id:542) (Token id:Id.Lit_Chars val:'\tgit bisect bad &&\n' span_id:543) (Token id:Id.Lit_Chars val:'\tgit bisect good $HASH1 &&\n' span_id:544) (Token id:Id.Lit_Chars val:'\tgit bisect skip &&\n' span_id:545) (Token id: Id.Lit_Chars val: '\ttest_expect_code 2 git bisect good >my_bisect_log.txt &&\n' span_id: 546 ) (Token id: Id.Lit_Chars val: '\tgrep "first bad commit could be any of" my_bisect_log.txt &&\n' span_id: 547 ) (Token id:Id.Lit_Chars val:'\t! grep $HASH1 my_bisect_log.txt &&\n' span_id:548) (Token id:Id.Lit_Chars val:'\t! grep $HASH2 my_bisect_log.txt &&\n' span_id:549) (Token id:Id.Lit_Chars val:'\tgrep $HASH3 my_bisect_log.txt &&\n' span_id:550) (Token id:Id.Lit_Chars val:'\tgrep $HASH4 my_bisect_log.txt\n' span_id:551) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'"git bisect run" simple case' span_id:566))} { (SQ (Token id:Id.Lit_Chars val:'echo "#"\\!"/bin/sh" > test_script.sh &&\n' span_id:572) (Token id: Id.Lit_Chars val: ' echo "grep Another hello > /dev/null" >> test_script.sh &&\n' span_id: 573 ) (Token id:Id.Lit_Chars val:' echo "test \\$? -ne 0" >> test_script.sh &&\n' span_id:574) (Token id:Id.Lit_Chars val:' chmod +x test_script.sh &&\n' span_id:575) (Token id:Id.Lit_Chars val:' git bisect start &&\n' span_id:576) (Token id:Id.Lit_Chars val:' git bisect good $HASH1 &&\n' span_id:577) (Token id:Id.Lit_Chars val:' git bisect bad $HASH4 &&\n' span_id:578) (Token id: Id.Lit_Chars val: ' git bisect run ./test_script.sh > my_bisect_log.txt &&\n' span_id: 579 ) (Token id: Id.Lit_Chars val: ' grep "$HASH3 is the first bad commit" my_bisect_log.txt &&\n' span_id: 580 ) (Token id:Id.Lit_Chars val:' git bisect reset' span_id:581) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '"git bisect run" with more complex "git bisect start"' span_id: 596 ) ) } { (SQ (Token id:Id.Lit_Chars val:'echo "#"\\!"/bin/sh" > test_script.sh &&\n' span_id:602) (Token id: Id.Lit_Chars val: ' echo "grep Ciao hello > /dev/null" >> test_script.sh &&\n' span_id: 603 ) (Token id:Id.Lit_Chars val:' echo "test \\$? -ne 0" >> test_script.sh &&\n' span_id:604) (Token id:Id.Lit_Chars val:' chmod +x test_script.sh &&\n' span_id:605) (Token id:Id.Lit_Chars val:' git bisect start $HASH4 $HASH1 &&\n' span_id:606) (Token id: Id.Lit_Chars val: ' git bisect run ./test_script.sh > my_bisect_log.txt &&\n' span_id: 607 ) (Token id: Id.Lit_Chars val: ' grep "$HASH4 is the first bad commit" my_bisect_log.txt &&\n' span_id: 608 ) (Token id:Id.Lit_Chars val:' git bisect reset' span_id:609) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:HASH5) op: assign_op.Equal rhs: (word.Empty) spids: [622] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect skip: add line and then a new test' span_id:627))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:631) (Token id: Id.Lit_Chars val: '\tadd_line_into_file "5: Another new line." hello &&\n' span_id: 632 ) (Token id:Id.Lit_Chars val:'\tHASH5=$(git rev-parse --verify HEAD) &&\n' span_id:633) (Token id:Id.Lit_Chars val:'\tgit bisect start $HASH5 $HASH1 &&\n' span_id:634) (Token id:Id.Lit_Chars val:'\tgit bisect skip &&\n' span_id:635) (Token id: Id.Lit_Chars val: '\tgit bisect good > my_bisect_log.txt &&\n' span_id: 636 ) (Token id: Id.Lit_Chars val: '\tgrep "$HASH5 is the first bad commit" my_bisect_log.txt &&\n' span_id: 637 ) (Token id:Id.Lit_Chars val:'\tgit bisect log > log_to_replay.txt &&\n' span_id:638) (Token id:Id.Lit_Chars val:'\tgit bisect reset\n' span_id:639) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect skip and bisect replay' span_id:646))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:650) (Token id: Id.Lit_Chars val: '\tgit bisect replay log_to_replay.txt > my_bisect_log.txt &&\n' span_id: 651 ) (Token id: Id.Lit_Chars val: '\tgrep "$HASH5 is the first bad commit" my_bisect_log.txt &&\n' span_id: 652 ) (Token id:Id.Lit_Chars val:'\tgit bisect reset\n' span_id:653) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:HASH6) op: assign_op.Equal rhs: (word.Empty) spids: [657] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect run & skip: cannot tell between 2' span_id:662))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:666) (Token id: Id.Lit_Chars val: '\tadd_line_into_file "6: Yet a line." hello &&\n' span_id: 667 ) (Token id:Id.Lit_Chars val:'\tHASH6=$(git rev-parse --verify HEAD) &&\n' span_id:668) (Token id: Id.Lit_Chars val: '\techo "#"\\!"/bin/sh" > test_script.sh &&\n' span_id: 669 ) (Token id: Id.Lit_Chars val: '\techo "sed -ne \\\\\\$p hello | grep Ciao > /dev/null && exit 125" >> test_script.sh &&\n' span_id: 670 ) (Token id:Id.Lit_Chars val:'\techo "grep line hello > /dev/null" >> test_script.sh &&\n' span_id:671) (Token id: Id.Lit_Chars val: '\techo "test \\$? -ne 0" >> test_script.sh &&\n' span_id: 672 ) (Token id:Id.Lit_Chars val:'\tchmod +x test_script.sh &&\n' span_id:673) (Token id:Id.Lit_Chars val:'\tgit bisect start $HASH6 $HASH1 &&\n' span_id:674) (Token id:Id.Lit_Chars val:'\tif git bisect run ./test_script.sh > my_bisect_log.txt\n' span_id:675) (Token id:Id.Lit_Chars val:'\tthen\n' span_id:676) (Token id:Id.Lit_Chars val:'\t\techo Oops, should have failed.\n' span_id:677) (Token id:Id.Lit_Chars val:'\t\tfalse\n' span_id:678) (Token id:Id.Lit_Chars val:'\telse\n' span_id:679) (Token id:Id.Lit_Chars val:'\t\ttest $? -eq 2 &&\n' span_id:680) (Token id: Id.Lit_Chars val: '\t\tgrep "first bad commit could be any of" my_bisect_log.txt &&\n' span_id: 681 ) (Token id:Id.Lit_Chars val:'\t\t! grep $HASH3 my_bisect_log.txt &&\n' span_id:682) (Token id: Id.Lit_Chars val: '\t\t! grep $HASH6 my_bisect_log.txt &&\n' span_id: 683 ) (Token id:Id.Lit_Chars val:'\t\tgrep $HASH4 my_bisect_log.txt &&\n' span_id:684) (Token id:Id.Lit_Chars val:'\t\tgrep $HASH5 my_bisect_log.txt\n' span_id:685) (Token id:Id.Lit_Chars val:'\tfi\n' span_id:686) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:HASH7) op: assign_op.Equal rhs: (word.Empty) spids: [690] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect run & skip: find first bad' span_id:695))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:699) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:700) (Token id: Id.Lit_Chars val: '\tadd_line_into_file "7: Should be the last line." hello &&\n' span_id: 701 ) (Token id:Id.Lit_Chars val:'\tHASH7=$(git rev-parse --verify HEAD) &&\n' span_id:702) (Token id: Id.Lit_Chars val: '\techo "#"\\!"/bin/sh" > test_script.sh &&\n' span_id: 703 ) (Token id: Id.Lit_Chars val: '\techo "sed -ne \\\\\\$p hello | grep Ciao > /dev/null && exit 125" >> test_script.sh &&\n' span_id: 704 ) (Token id: Id.Lit_Chars val: '\techo "sed -ne \\\\\\$p hello | grep day > /dev/null && exit 125" >> test_script.sh &&\n' span_id: 705 ) (Token id:Id.Lit_Chars val:'\techo "grep Yet hello > /dev/null" >> test_script.sh &&\n' span_id:706) (Token id: Id.Lit_Chars val: '\techo "test \\$? -ne 0" >> test_script.sh &&\n' span_id: 707 ) (Token id:Id.Lit_Chars val:'\tchmod +x test_script.sh &&\n' span_id:708) (Token id:Id.Lit_Chars val:'\tgit bisect start $HASH7 $HASH1 &&\n' span_id:709) (Token id:Id.Lit_Chars val:'\tgit bisect run ./test_script.sh > my_bisect_log.txt &&\n' span_id:710) (Token id: Id.Lit_Chars val: '\tgrep "$HASH6 is the first bad commit" my_bisect_log.txt\n' span_id: 711 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect skip only one range' span_id:718))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:722) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:723) (Token id:Id.Lit_Chars val:'\tgit bisect start $HASH7 $HASH1 &&\n' span_id:724) (Token id:Id.Lit_Chars val:'\tgit bisect skip $HASH1..$HASH5 &&\n' span_id:725) (Token id:Id.Lit_Chars val:'\ttest "$HASH6" = "$(git rev-parse --verify HEAD)" &&\n' span_id:726) (Token id: Id.Lit_Chars val: '\ttest_must_fail git bisect bad > my_bisect_log.txt &&\n' span_id: 727 ) (Token id: Id.Lit_Chars val: '\tgrep "first bad commit could be any of" my_bisect_log.txt\n' span_id: 728 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect skip many ranges' span_id:735))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:739) (Token id:Id.Lit_Chars val:'\tgit bisect start $HASH7 $HASH1 &&\n' span_id:740) (Token id:Id.Lit_Chars val:'\ttest "$HASH4" = "$(git rev-parse --verify HEAD)" &&\n' span_id:741) (Token id: Id.Lit_Chars val: '\tgit bisect skip $HASH2 $HASH2.. ..$HASH5 &&\n' span_id: 742 ) (Token id:Id.Lit_Chars val:'\ttest "$HASH6" = "$(git rev-parse --verify HEAD)" &&\n' span_id:743) (Token id: Id.Lit_Chars val: '\ttest_must_fail git bisect bad > my_bisect_log.txt &&\n' span_id: 744 ) (Token id: Id.Lit_Chars val: '\tgrep "first bad commit could be any of" my_bisect_log.txt\n' span_id: 745 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect starting with a detached HEAD' span_id:752))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:756) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:757) (Token id:Id.Lit_Chars val:'\tgit checkout master^ &&\n' span_id:758) (Token id: Id.Lit_Chars val: '\tHEAD=$(git rev-parse --verify HEAD) &&\n' span_id: 759 ) (Token id:Id.Lit_Chars val:'\tgit bisect start &&\n' span_id:760) (Token id: Id.Lit_Chars val: '\ttest $HEAD = $(cat .git/BISECT_START) &&\n' span_id: 761 ) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:762) (Token id: Id.Lit_Chars val: '\ttest $HEAD = $(git rev-parse --verify HEAD)\n' span_id: 763 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect errors out if bad and good are mistaken' span_id:770))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:774) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:775) (Token id: Id.Lit_Chars val: '\ttest_must_fail git bisect start $HASH2 $HASH4 2> rev_list_error &&\n' span_id: 776 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "mistook good and bad" rev_list_error &&\n' span_id:777) (Token id:Id.Lit_Chars val:'\tgit bisect reset\n' span_id:778) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect does not create a "bisect" branch' span_id:785))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:789) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:790) (Token id:Id.Lit_Chars val:'\tgit bisect start $HASH7 $HASH1 &&\n' span_id:791) (Token id:Id.Lit_Chars val:'\tgit branch bisect &&\n' span_id:792) (Token id:Id.Lit_Chars val:'\trev_hash4=$(git rev-parse --verify HEAD) &&\n' span_id:793) (Token id:Id.Lit_Chars val:'\ttest "$rev_hash4" = "$HASH4" &&\n' span_id:794) (Token id:Id.Lit_Chars val:'\tgit branch -D bisect &&\n' span_id:795) (Token id:Id.Lit_Chars val:'\tgit bisect good &&\n' span_id:796) (Token id:Id.Lit_Chars val:'\tgit branch bisect &&\n' span_id:797) (Token id: Id.Lit_Chars val: '\trev_hash6=$(git rev-parse --verify HEAD) &&\n' span_id: 798 ) (Token id:Id.Lit_Chars val:'\ttest "$rev_hash6" = "$HASH6" &&\n' span_id:799) (Token id: Id.Lit_Chars val: '\tgit bisect good > my_bisect_log.txt &&\n' span_id: 800 ) (Token id: Id.Lit_Chars val: '\tgrep "$HASH7 is the first bad commit" my_bisect_log.txt &&\n' span_id: 801 ) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:802) (Token id: Id.Lit_Chars val: '\trev_hash6=$(git rev-parse --verify bisect) &&\n' span_id: 803 ) (Token id:Id.Lit_Chars val:'\ttest "$rev_hash6" = "$HASH6" &&\n' span_id:804) (Token id:Id.Lit_Chars val:'\tgit branch -D bisect\n' span_id:805) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'side branch creation' span_id:830))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:834) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:835) (Token id:Id.Lit_Chars val:'\tgit checkout -b side $HASH4 &&\n' span_id:836) (Token id: Id.Lit_Chars val: '\tadd_line_into_file "5(side): first line on a side branch" hello2 &&\n' span_id: 837 ) (Token id:Id.Lit_Chars val:'\tSIDE_HASH5=$(git rev-parse --verify HEAD) &&\n' span_id:838) (Token id: Id.Lit_Chars val: '\tadd_line_into_file "6(side): second line on a side branch" hello2 &&\n' span_id: 839 ) (Token id:Id.Lit_Chars val:'\tSIDE_HASH6=$(git rev-parse --verify HEAD) &&\n' span_id:840) (Token id: Id.Lit_Chars val: '\tadd_line_into_file "7(side): third line on a side branch" hello2 &&\n' span_id: 841 ) (Token id:Id.Lit_Chars val:'\tSIDE_HASH7=$(git rev-parse --verify HEAD)\n' span_id:842) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'good merge base when good and bad are siblings' span_id:849))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:853) (Token id: Id.Lit_Chars val: '\tgit bisect start "$HASH7" "$SIDE_HASH7" > my_bisect_log.txt &&\n' span_id: 854 ) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "merge base must be tested" my_bisect_log.txt &&\n' span_id: 855 ) (Token id:Id.Lit_Chars val:'\tgrep $HASH4 my_bisect_log.txt &&\n' span_id:856) (Token id: Id.Lit_Chars val: '\tgit bisect good > my_bisect_log.txt &&\n' span_id: 857 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail grep "merge base must be tested" my_bisect_log.txt &&\n' span_id: 858 ) (Token id:Id.Lit_Chars val:'\tgrep $HASH6 my_bisect_log.txt &&\n' span_id:859) (Token id:Id.Lit_Chars val:'\tgit bisect reset\n' span_id:860) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'skipped merge base when good and bad are siblings' span_id: 866 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:870) (Token id: Id.Lit_Chars val: '\tgit bisect start "$SIDE_HASH7" "$HASH7" > my_bisect_log.txt &&\n' span_id: 871 ) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "merge base must be tested" my_bisect_log.txt &&\n' span_id: 872 ) (Token id:Id.Lit_Chars val:'\tgrep $HASH4 my_bisect_log.txt &&\n' span_id:873) (Token id: Id.Lit_Chars val: '\tgit bisect skip > my_bisect_log.txt 2>&1 &&\n' span_id: 874 ) (Token id:Id.Lit_Chars val:'\tgrep "warning" my_bisect_log.txt &&\n' span_id:875) (Token id: Id.Lit_Chars val: '\tgrep $SIDE_HASH6 my_bisect_log.txt &&\n' span_id: 876 ) (Token id:Id.Lit_Chars val:'\tgit bisect reset\n' span_id:877) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bad merge base when good and bad are siblings' span_id:884))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:888) (Token id: Id.Lit_Chars val: '\tgit bisect start "$HASH7" HEAD > my_bisect_log.txt &&\n' span_id: 889 ) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "merge base must be tested" my_bisect_log.txt &&\n' span_id: 890 ) (Token id:Id.Lit_Chars val:'\tgrep $HASH4 my_bisect_log.txt &&\n' span_id:891) (Token id: Id.Lit_Chars val: '\ttest_must_fail git bisect bad > my_bisect_log.txt 2>&1 &&\n' span_id: 892 ) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "merge base $HASH4 is bad" my_bisect_log.txt &&\n' span_id: 893 ) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "fixed between $HASH4 and \\[$SIDE_HASH7\\]" my_bisect_log.txt &&\n' span_id: 894 ) (Token id:Id.Lit_Chars val:'\tgit bisect reset\n' span_id:895) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'many merge bases creation' span_id:944))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:948) (Token id:Id.Lit_Chars val:'\tgit checkout "$SIDE_HASH5" &&\n' span_id:949) (Token id:Id.Lit_Chars val:'\tgit merge -m "merge HASH5 and SIDE_HASH5" "$HASH5" &&\n' span_id:950) (Token id: Id.Lit_Chars val: '\tA_HASH=$(git rev-parse --verify HEAD) &&\n' span_id: 951 ) (Token id:Id.Lit_Chars val:'\tgit checkout side &&\n' span_id:952) (Token id: Id.Lit_Chars val: '\tgit merge -m "merge HASH7 and SIDE_HASH7" "$HASH7" &&\n' span_id: 953 ) (Token id:Id.Lit_Chars val:'\tB_HASH=$(git rev-parse --verify HEAD) &&\n' span_id:954) (Token id: Id.Lit_Chars val: '\tgit merge-base --all "$A_HASH" "$B_HASH" > merge_bases.txt &&\n' span_id: 955 ) (Token id:Id.Lit_Chars val:'\ttest_line_count = 2 merge_bases.txt &&\n' span_id:956) (Token id:Id.Lit_Chars val:'\tgrep "$HASH5" merge_bases.txt &&\n' span_id:957) (Token id:Id.Lit_Chars val:'\tgrep "$SIDE_HASH5" merge_bases.txt\n' span_id:958) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'good merge bases when good and bad are siblings' span_id:965))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:969) (Token id: Id.Lit_Chars val: '\tgit bisect start "$B_HASH" "$A_HASH" > my_bisect_log.txt &&\n' span_id: 970 ) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "merge base must be tested" my_bisect_log.txt &&\n' span_id: 971 ) (Token id:Id.Lit_Chars val:'\tgit bisect good > my_bisect_log2.txt &&\n' span_id:972) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "merge base must be tested" my_bisect_log2.txt &&\n' span_id: 973 ) (Token id:Id.Lit_Chars val:'\t{\n' span_id:974) (Token id:Id.Lit_Chars val:'\t\t{\n' span_id:975) (Token id: Id.Lit_Chars val: '\t\t\tgrep "$SIDE_HASH5" my_bisect_log.txt &&\n' span_id: 976 ) (Token id:Id.Lit_Chars val:'\t\t\tgrep "$HASH5" my_bisect_log2.txt\n' span_id:977) (Token id:Id.Lit_Chars val:'\t\t} || {\n' span_id:978) (Token id:Id.Lit_Chars val:'\t\t\tgrep "$SIDE_HASH5" my_bisect_log2.txt &&\n' span_id:979) (Token id:Id.Lit_Chars val:'\t\t\tgrep "$HASH5" my_bisect_log.txt\n' span_id:980) (Token id:Id.Lit_Chars val:'\t\t}\n' span_id:981) (Token id:Id.Lit_Chars val:'\t} &&\n' span_id:982) (Token id:Id.Lit_Chars val:'\tgit bisect reset\n' span_id:983) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'optimized merge base checks' span_id:990))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:994) (Token id: Id.Lit_Chars val: '\tgit bisect start "$HASH7" "$SIDE_HASH7" > my_bisect_log.txt &&\n' span_id: 995 ) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "merge base must be tested" my_bisect_log.txt &&\n' span_id: 996 ) (Token id:Id.Lit_Chars val:'\tgrep "$HASH4" my_bisect_log.txt &&\n' span_id:997) (Token id: Id.Lit_Chars val: '\tgit bisect good > my_bisect_log2.txt &&\n' span_id: 998 ) (Token id:Id.Lit_Chars val:'\ttest -f ".git/BISECT_ANCESTORS_OK" &&\n' span_id:999) (Token id: Id.Lit_Chars val: '\ttest "$HASH6" = $(git rev-parse --verify HEAD) &&\n' span_id: 1000 ) (Token id:Id.Lit_Chars val:'\tgit bisect bad > my_bisect_log3.txt &&\n' span_id:1001) (Token id: Id.Lit_Chars val: '\tgit bisect good "$A_HASH" > my_bisect_log4.txt &&\n' span_id: 1002 ) (Token id: Id.Lit_Chars val: '\ttest_i18ngrep "merge base must be tested" my_bisect_log4.txt &&\n' span_id: 1003 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail test -f ".git/BISECT_ANCESTORS_OK"\n' span_id:1004) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'"parallel" side branch creation' span_id:1050))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1054) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1055) (Token id:Id.Lit_Chars val:'\tgit checkout -b parallel $HASH1 &&\n' span_id:1056) (Token id:Id.Lit_Chars val:'\tmkdir dir1 dir2 &&\n' span_id:1057) (Token id: Id.Lit_Chars val: '\tadd_line_into_file "1(para): line 1 on parallel branch" dir1/file1 &&\n' span_id: 1058 ) (Token id:Id.Lit_Chars val:'\tPARA_HASH1=$(git rev-parse --verify HEAD) &&\n' span_id:1059) (Token id: Id.Lit_Chars val: '\tadd_line_into_file "2(para): line 2 on parallel branch" dir2/file2 &&\n' span_id: 1060 ) (Token id:Id.Lit_Chars val:'\tPARA_HASH2=$(git rev-parse --verify HEAD) &&\n' span_id:1061) (Token id: Id.Lit_Chars val: '\tadd_line_into_file "3(para): line 3 on parallel branch" dir2/file3 &&\n' span_id: 1062 ) (Token id:Id.Lit_Chars val:'\tPARA_HASH3=$(git rev-parse --verify HEAD) &&\n' span_id:1063) (Token id: Id.Lit_Chars val: '\tgit merge -m "merge HASH4 and PARA_HASH3" "$HASH4" &&\n' span_id: 1064 ) (Token id:Id.Lit_Chars val:'\tPARA_HASH4=$(git rev-parse --verify HEAD) &&\n' span_id:1065) (Token id: Id.Lit_Chars val: '\tadd_line_into_file "5(para): add line on parallel branch" dir1/file1 &&\n' span_id: 1066 ) (Token id:Id.Lit_Chars val:'\tPARA_HASH5=$(git rev-parse --verify HEAD) &&\n' span_id:1067) (Token id: Id.Lit_Chars val: '\tadd_line_into_file "6(para): add line on parallel branch" dir2/file2 &&\n' span_id: 1068 ) (Token id:Id.Lit_Chars val:'\tPARA_HASH6=$(git rev-parse --verify HEAD) &&\n' span_id:1069) (Token id: Id.Lit_Chars val: '\tgit merge -m "merge HASH7 and PARA_HASH6" "$HASH7" &&\n' span_id: 1070 ) (Token id:Id.Lit_Chars val:'\tPARA_HASH7=$(git rev-parse --verify HEAD)\n' span_id:1071) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'restricting bisection on one dir' span_id:1078))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1082) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1083) (Token id:Id.Lit_Chars val:'\tgit bisect start HEAD $HASH1 -- dir1 &&\n' span_id:1084) (Token id: Id.Lit_Chars val: '\tpara1=$(git rev-parse --verify HEAD) &&\n' span_id: 1085 ) (Token id:Id.Lit_Chars val:'\ttest "$para1" = "$PARA_HASH1" &&\n' span_id:1086) (Token id: Id.Lit_Chars val: '\tgit bisect bad > my_bisect_log.txt &&\n' span_id: 1087 ) (Token id: Id.Lit_Chars val: '\tgrep "$PARA_HASH1 is the first bad commit" my_bisect_log.txt\n' span_id: 1088 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'restricting bisection on one dir and a file' span_id:1095))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1099) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1100) (Token id:Id.Lit_Chars val:'\tgit bisect start HEAD $HASH1 -- dir1 hello &&\n' span_id:1101) (Token id: Id.Lit_Chars val: '\tpara4=$(git rev-parse --verify HEAD) &&\n' span_id: 1102 ) (Token id:Id.Lit_Chars val:'\ttest "$para4" = "$PARA_HASH4" &&\n' span_id:1103) (Token id:Id.Lit_Chars val:'\tgit bisect bad &&\n' span_id:1104) (Token id:Id.Lit_Chars val:'\thash3=$(git rev-parse --verify HEAD) &&\n' span_id:1105) (Token id:Id.Lit_Chars val:'\ttest "$hash3" = "$HASH3" &&\n' span_id:1106) (Token id:Id.Lit_Chars val:'\tgit bisect good &&\n' span_id:1107) (Token id: Id.Lit_Chars val: '\thash4=$(git rev-parse --verify HEAD) &&\n' span_id: 1108 ) (Token id:Id.Lit_Chars val:'\ttest "$hash4" = "$HASH4" &&\n' span_id:1109) (Token id:Id.Lit_Chars val:'\tgit bisect good &&\n' span_id:1110) (Token id:Id.Lit_Chars val:'\tpara1=$(git rev-parse --verify HEAD) &&\n' span_id:1111) (Token id:Id.Lit_Chars val:'\ttest "$para1" = "$PARA_HASH1" &&\n' span_id:1112) (Token id:Id.Lit_Chars val:'\tgit bisect good > my_bisect_log.txt &&\n' span_id:1113) (Token id: Id.Lit_Chars val: '\tgrep "$PARA_HASH4 is the first bad commit" my_bisect_log.txt\n' span_id: 1114 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'skipping away from skipped commit' span_id:1121))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1125) (Token id: Id.Lit_Chars val: '\tgit bisect start $PARA_HASH7 $HASH1 &&\n' span_id: 1126 ) (Token id:Id.Lit_Chars val:'\tpara4=$(git rev-parse --verify HEAD) &&\n' span_id:1127) (Token id:Id.Lit_Chars val:'\ttest "$para4" = "$PARA_HASH4" &&\n' span_id:1128) (Token id:Id.Lit_Chars val:' git bisect skip &&\n' span_id:1129) (Token id: Id.Lit_Chars val: '\thash7=$(git rev-parse --verify HEAD) &&\n' span_id: 1130 ) (Token id:Id.Lit_Chars val:'\ttest "$hash7" = "$HASH7" &&\n' span_id:1131) (Token id:Id.Lit_Chars val:' git bisect skip &&\n' span_id:1132) (Token id:Id.Lit_Chars val:'\tpara3=$(git rev-parse --verify HEAD) &&\n' span_id:1133) (Token id:Id.Lit_Chars val:'\ttest "$para3" = "$PARA_HASH3"\n' span_id:1134) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'erroring out when using bad path parameters' span_id:1141))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1145) (Token id: Id.Lit_Chars val: '\ttest_must_fail git bisect start $PARA_HASH7 $HASH1 -- foobar 2> error.txt &&\n' span_id: 1146 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "bad path parameters" error.txt\n' span_id:1147) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'test bisection on bare repo - --no-checkout specified' span_id: 1154 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1158) (Token id: Id.Lit_Chars val: '\tgit clone --bare . bare.nocheckout &&\n' span_id: 1159 ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1160) (Token id:Id.Lit_Chars val:'\t\tcd bare.nocheckout &&\n' span_id:1161) (Token id:Id.Lit_Chars val:'\t\tgit bisect start --no-checkout &&\n' span_id:1162) (Token id:Id.Lit_Chars val:'\t\tgit bisect good $HASH1 &&\n' span_id:1163) (Token id:Id.Lit_Chars val:'\t\tgit bisect bad $HASH4 &&\n' span_id:1164) (Token id:Id.Lit_Chars val:'\t\tgit bisect run eval \\\n' span_id:1165) (Token id: Id.Lit_Chars val: '\t\t\t"test \\$(git rev-list BISECT_HEAD ^$HASH2 --max-count=1 | wc -l) = 0" \\\n' span_id: 1166 ) (Token id:Id.Lit_Chars val:'\t\t\t>../nocheckout.log\n' span_id:1167) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1168) (Token id:Id.Lit_Chars val:'\tgrep "$HASH3 is the first bad commit" nocheckout.log\n' span_id:1169) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'test bisection on bare repo - --no-checkout defaulted' span_id: 1177 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1181) (Token id: Id.Lit_Chars val: '\tgit clone --bare . bare.defaulted &&\n' span_id: 1182 ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1183) (Token id:Id.Lit_Chars val:'\t\tcd bare.defaulted &&\n' span_id:1184) (Token id:Id.Lit_Chars val:'\t\tgit bisect start &&\n' span_id:1185) (Token id:Id.Lit_Chars val:'\t\tgit bisect good $HASH1 &&\n' span_id:1186) (Token id:Id.Lit_Chars val:'\t\tgit bisect bad $HASH4 &&\n' span_id:1187) (Token id:Id.Lit_Chars val:'\t\tgit bisect run eval \\\n' span_id:1188) (Token id: Id.Lit_Chars val: '\t\t\t"test \\$(git rev-list BISECT_HEAD ^$HASH2 --max-count=1 | wc -l) = 0" \\\n' span_id: 1189 ) (Token id:Id.Lit_Chars val:'\t\t\t>../defaulted.log\n' span_id:1190) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1191) (Token id:Id.Lit_Chars val:'\tgrep "$HASH3 is the first bad commit" defaulted.log\n' span_id:1192) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'broken branch creation' span_id:1229))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1233) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1234) (Token id:Id.Lit_Chars val:'\tgit checkout -b broken $HASH4 &&\n' span_id:1235) (Token id:Id.Lit_Chars val:'\tgit tag BROKEN_HASH4 $HASH4 &&\n' span_id:1236) (Token id: Id.Lit_Chars val: '\tadd_line_into_file "5(broken): first line on a broken branch" hello2 &&\n' span_id: 1237 ) (Token id:Id.Lit_Chars val:'\tgit tag BROKEN_HASH5 &&\n' span_id:1238) (Token id:Id.Lit_Chars val:'\tmkdir missing &&\n' span_id:1239) (Token id:Id.Lit_Chars val:'\t:> missing/MISSING &&\n' span_id:1240) (Token id:Id.Lit_Chars val:'\tgit add missing/MISSING &&\n' span_id:1241) (Token id: Id.Lit_Chars val: '\tgit commit -m "6(broken): Added file that will be deleted" &&\n' span_id: 1242 ) (Token id:Id.Lit_Chars val:'\tgit tag BROKEN_HASH6 &&\n' span_id:1243) (Token id: Id.Lit_Chars val: '\tadd_line_into_file "7(broken): second line on a broken branch" hello2 &&\n' span_id: 1244 ) (Token id:Id.Lit_Chars val:'\tgit tag BROKEN_HASH7 &&\n' span_id:1245) (Token id: Id.Lit_Chars val: '\tadd_line_into_file "8(broken): third line on a broken branch" hello2 &&\n' span_id: 1246 ) (Token id:Id.Lit_Chars val:'\tgit tag BROKEN_HASH8 &&\n' span_id:1247) (Token id:Id.Lit_Chars val:'\tgit rm missing/MISSING &&\n' span_id:1248) (Token id:Id.Lit_Chars val:'\tgit commit -m "9(broken): Remove missing file" &&\n' span_id:1249) (Token id:Id.Lit_Chars val:'\tgit tag BROKEN_HASH9 &&\n' span_id:1250) (Token id: Id.Lit_Chars val: '\trm .git/objects/39/f7e61a724187ab767d2e08442d9b6b9dab587d\n' span_id: 1251 ) ) } ) (command.Simple words: [{(echo)} {(DQ )}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1260) fd: -1 arg_word: {(expected.ok)} ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1266) fd: -1 arg_word: {(expected.missing-tree.default)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1270) fd: -1 here_begin: {(EOF)} here_end_span_id: 1275 stdin_parts: [('fatal: unable to read tree 39f7e61a724187ab767d2e08442d9b6b9dab587d\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect fails if tree is broken on start commit' span_id:1280))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1284) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1285) (Token id: Id.Lit_Chars val: '\ttest_must_fail git bisect start BROKEN_HASH7 BROKEN_HASH4 2>error.txt &&\n' span_id: 1286 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected.missing-tree.default error.txt\n' span_id:1287) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect fails if tree is broken on trial commit' span_id:1294))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1298) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1299) (Token id: Id.Lit_Chars val: '\ttest_must_fail git bisect start BROKEN_HASH9 BROKEN_HASH4 2>error.txt &&\n' span_id: 1300 ) (Token id:Id.Lit_Chars val:'\tgit reset --hard broken &&\n' span_id:1301) (Token id:Id.Lit_Chars val:'\tgit checkout broken &&\n' span_id:1302) (Token id:Id.Lit_Chars val:'\ttest_cmp expected.missing-tree.default error.txt\n' span_id:1303) ) } ) (command.ShFunction name: check_same body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(echo)} { (DQ ('Checking ') ($ Id.VSub_Number '$1') (' is the same as ') ($ Id.VSub_Number '$2') ) } ) (C {(test_cmp_rev)} {(DQ ($ Id.VSub_Number '$1'))} {(DQ ($ Id.VSub_Number '$2'))}) ] ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect: --no-checkout - start commit bad' span_id:1342))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1346) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1347) (Token id: Id.Lit_Chars val: '\tgit bisect start BROKEN_HASH7 BROKEN_HASH4 --no-checkout &&\n' span_id: 1348 ) (Token id:Id.Lit_Chars val:'\tcheck_same BROKEN_HASH6 BISECT_HEAD &&\n' span_id:1349) (Token id:Id.Lit_Chars val:'\tgit bisect reset\n' span_id:1350) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect: --no-checkout - trial commit bad' span_id:1357))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1361) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1362) (Token id:Id.Lit_Chars val:'\tgit bisect start broken BROKEN_HASH4 --no-checkout &&\n' span_id:1363) (Token id: Id.Lit_Chars val: '\tcheck_same BROKEN_HASH6 BISECT_HEAD &&\n' span_id: 1364 ) (Token id:Id.Lit_Chars val:'\tgit bisect reset\n' span_id:1365) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect: --no-checkout - target before breakage' span_id:1372))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1376) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1377) (Token id:Id.Lit_Chars val:'\tgit bisect start broken BROKEN_HASH4 --no-checkout &&\n' span_id:1378) (Token id: Id.Lit_Chars val: '\tcheck_same BROKEN_HASH6 BISECT_HEAD &&\n' span_id: 1379 ) (Token id:Id.Lit_Chars val:'\tgit bisect bad BISECT_HEAD &&\n' span_id:1380) (Token id: Id.Lit_Chars val: '\tcheck_same BROKEN_HASH5 BISECT_HEAD &&\n' span_id: 1381 ) (Token id:Id.Lit_Chars val:'\tgit bisect bad BISECT_HEAD &&\n' span_id:1382) (Token id: Id.Lit_Chars val: '\tcheck_same BROKEN_HASH5 bisect/bad &&\n' span_id: 1383 ) (Token id:Id.Lit_Chars val:'\tgit bisect reset\n' span_id:1384) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect: --no-checkout - target in breakage' span_id:1391))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1395) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1396) (Token id:Id.Lit_Chars val:'\tgit bisect start broken BROKEN_HASH4 --no-checkout &&\n' span_id:1397) (Token id: Id.Lit_Chars val: '\tcheck_same BROKEN_HASH6 BISECT_HEAD &&\n' span_id: 1398 ) (Token id:Id.Lit_Chars val:'\tgit bisect bad BISECT_HEAD &&\n' span_id:1399) (Token id: Id.Lit_Chars val: '\tcheck_same BROKEN_HASH5 BISECT_HEAD &&\n' span_id: 1400 ) (Token id:Id.Lit_Chars val:'\tgit bisect good BISECT_HEAD &&\n' span_id:1401) (Token id: Id.Lit_Chars val: '\tcheck_same BROKEN_HASH6 bisect/bad &&\n' span_id: 1402 ) (Token id:Id.Lit_Chars val:'\tgit bisect reset\n' span_id:1403) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect: --no-checkout - target after breakage' span_id:1410))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1414) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1415) (Token id:Id.Lit_Chars val:'\tgit bisect start broken BROKEN_HASH4 --no-checkout &&\n' span_id:1416) (Token id: Id.Lit_Chars val: '\tcheck_same BROKEN_HASH6 BISECT_HEAD &&\n' span_id: 1417 ) (Token id:Id.Lit_Chars val:'\tgit bisect good BISECT_HEAD &&\n' span_id:1418) (Token id: Id.Lit_Chars val: '\tcheck_same BROKEN_HASH8 BISECT_HEAD &&\n' span_id: 1419 ) (Token id:Id.Lit_Chars val:'\tgit bisect good BISECT_HEAD &&\n' span_id:1420) (Token id: Id.Lit_Chars val: '\tcheck_same BROKEN_HASH9 bisect/bad &&\n' span_id: 1421 ) (Token id:Id.Lit_Chars val:'\tgit bisect reset\n' span_id:1422) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'bisect: demonstrate identification of damage boundary' span_id: 1429 ) ) } { (DQ ('\n') ('\tgit bisect reset &&\n') ('\tgit checkout broken &&\n') ('\tgit bisect start broken master --no-checkout &&\n') ('\tgit bisect run ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:1438) ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\$' span_id:1439)) (SHELL_PATH) (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:1441) ) (" -c '\n") ('\t\tGOOD=') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:1444) ) ('(git for-each-ref ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:1446) ) ('--format=%(objectname)') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:1448) ) (' refs/bisect/good-*) &&\n') ('\t\tgit rev-list --objects BISECT_HEAD --not ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:1451) ) ('GOOD >tmp.') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\$' span_id:1453)) (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:1454) ) (' &&\n') ('\t\tgit pack-objects --stdout >/dev/null < tmp.') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:1457) ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\$' span_id:1458)) ('\n') ('\t\trc=') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\$' span_id:1461)) ('?\n') ('\t\trm -f tmp.') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\$' span_id:1464)) (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:1465) ) ('\n') ('\t\ttest ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:1468) ) ("rc = 0' &&\n") ('\tcheck_same BROKEN_HASH6 bisect/bad &&\n') ('\tgit bisect reset\n') ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1477) fd: -1 arg_word: {(expected.bisect-log)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1481) fd: -1 here_begin: {(EOF)} here_end_span_id: 1491 stdin_parts: [ ( '# bad: [32a594a3fdac2d57cf6d02987e30eec68511498c] Add <4: Ciao for now> into <hello>.\n' ) ( '# good: [7b7f204a749c3125d5224ed61ea2ae1187ad046f] Add <2: A new day for git> into <hello>.\n' ) ( "git bisect start '32a594a3fdac2d57cf6d02987e30eec68511498c' '7b7f204a749c3125d5224ed61ea2ae1187ad046f'\n" ) ( '# good: [3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.\n' ) ('git bisect good 3de952f2416b6084f557ec417709eac740c6818c\n') ( '# first bad commit: [32a594a3fdac2d57cf6d02987e30eec68511498c] Add <4: Ciao for now> into <hello>.\n' ) ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect log: successful result' span_id:1496))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1500) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1501) (Token id:Id.Lit_Chars val:'\tgit bisect start $HASH4 $HASH2 &&\n' span_id:1502) (Token id:Id.Lit_Chars val:'\tgit bisect good &&\n' span_id:1503) (Token id:Id.Lit_Chars val:'\tgit bisect log >bisect-log.txt &&\n' span_id:1504) (Token id: Id.Lit_Chars val: '\ttest_cmp expected.bisect-log bisect-log.txt &&\n' span_id: 1505 ) (Token id:Id.Lit_Chars val:'\tgit bisect reset\n' span_id:1506) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:1512) fd: -1 arg_word: {(expected.bisect-skip-log)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:1516) fd: -1 here_begin: {(EOF)} here_end_span_id: 1528 stdin_parts: [ ( '# bad: [32a594a3fdac2d57cf6d02987e30eec68511498c] Add <4: Ciao for now> into <hello>.\n' ) ( '# good: [7b7f204a749c3125d5224ed61ea2ae1187ad046f] Add <2: A new day for git> into <hello>.\n' ) ( "git bisect start '32a594a3fdac2d57cf6d02987e30eec68511498c' '7b7f204a749c3125d5224ed61ea2ae1187ad046f'\n" ) ( '# skip: [3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.\n' ) ('git bisect skip 3de952f2416b6084f557ec417709eac740c6818c\n') ('# only skipped commits left to test\n') ( '# possible first bad commit: [32a594a3fdac2d57cf6d02987e30eec68511498c] Add <4: Ciao for now> into <hello>.\n' ) ( '# possible first bad commit: [3de952f2416b6084f557ec417709eac740c6818c] Add <3: Another new day for git> into <hello>.\n' ) ] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect log: only skip commits left' span_id:1533))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1537) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1538) (Token id:Id.Lit_Chars val:'\tgit bisect start $HASH4 $HASH2 &&\n' span_id:1539) (Token id:Id.Lit_Chars val:'\ttest_must_fail git bisect skip &&\n' span_id:1540) (Token id:Id.Lit_Chars val:'\tgit bisect log >bisect-skip-log.txt &&\n' span_id:1541) (Token id: Id.Lit_Chars val: '\ttest_cmp expected.bisect-skip-log bisect-skip-log.txt &&\n' span_id: 1542 ) (Token id:Id.Lit_Chars val:'\tgit bisect reset\n' span_id:1543) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '"git bisect bad HEAD" behaves as "git bisect bad"' span_id: 1550 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1554) (Token id:Id.Lit_Chars val:'\tgit checkout parallel &&\n' span_id:1555) (Token id:Id.Lit_Chars val:'\tgit bisect start HEAD $HASH1 &&\n' span_id:1556) (Token id:Id.Lit_Chars val:'\tgit bisect good HEAD &&\n' span_id:1557) (Token id:Id.Lit_Chars val:'\tgit bisect bad HEAD &&\n' span_id:1558) (Token id: Id.Lit_Chars val: '\ttest "$HASH6" = $(git rev-parse --verify HEAD) &&\n' span_id: 1559 ) (Token id:Id.Lit_Chars val:'\tgit bisect reset\n' span_id:1560) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect starts with only one new' span_id:1567))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1571) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1572) (Token id:Id.Lit_Chars val:'\tgit bisect start &&\n' span_id:1573) (Token id:Id.Lit_Chars val:'\tgit bisect new $HASH4 &&\n' span_id:1574) (Token id:Id.Lit_Chars val:'\tgit bisect next\n' span_id:1575) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect does not start with only one old' span_id:1582))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1586) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1587) (Token id:Id.Lit_Chars val:'\tgit bisect start &&\n' span_id:1588) (Token id:Id.Lit_Chars val:'\tgit bisect old $HASH1 &&\n' span_id:1589) (Token id:Id.Lit_Chars val:'\ttest_must_fail git bisect next\n' span_id:1590) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect start with one new and old' span_id:1597))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1601) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1602) (Token id:Id.Lit_Chars val:'\tgit bisect start &&\n' span_id:1603) (Token id:Id.Lit_Chars val:'\tgit bisect old $HASH1 &&\n' span_id:1604) (Token id:Id.Lit_Chars val:'\tgit bisect new $HASH4 &&\n' span_id:1605) (Token id:Id.Lit_Chars val:'\tgit bisect new &&\n' span_id:1606) (Token id:Id.Lit_Chars val:'\tgit bisect new >bisect_result &&\n' span_id:1607) (Token id: Id.Lit_Chars val: '\tgrep "$HASH2 is the first new commit" bisect_result &&\n' span_id: 1608 ) (Token id:Id.Lit_Chars val:'\tgit bisect log >log_to_replay.txt &&\n' span_id:1609) (Token id:Id.Lit_Chars val:'\tgit bisect reset\n' span_id:1610) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect replay with old and new' span_id:1617))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1621) (Token id: Id.Lit_Chars val: '\tgit bisect replay log_to_replay.txt >bisect_result &&\n' span_id: 1622 ) (Token id:Id.Lit_Chars val:'\tgrep "$HASH2 is the first new commit" bisect_result &&\n' span_id:1623) (Token id:Id.Lit_Chars val:'\tgit bisect reset\n' span_id:1624) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect cannot mix old/new and good/bad' span_id:1631))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1635) (Token id:Id.Lit_Chars val:'\tgit bisect start &&\n' span_id:1636) (Token id:Id.Lit_Chars val:'\tgit bisect bad $HASH4 &&\n' span_id:1637) (Token id: Id.Lit_Chars val: '\ttest_must_fail git bisect old $HASH1\n' span_id: 1638 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect terms needs 0 or 1 argument' span_id:1645))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1649) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1650) (Token id:Id.Lit_Chars val:'\ttest_must_fail git bisect terms only-one &&\n' span_id:1651) (Token id: Id.Lit_Chars val: '\ttest_must_fail git bisect terms 1 2 &&\n' span_id: 1652 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git bisect terms 2>actual &&\n' span_id:1653) (Token id: Id.Lit_Chars val: '\techo "no terms defined" >expected &&\n' span_id: 1654 ) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expected actual\n' span_id:1655) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect terms shows good/bad after start' span_id:1662))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1666) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1667) (Token id:Id.Lit_Chars val:'\tgit bisect start HEAD $HASH1 &&\n' span_id:1668) (Token id: Id.Lit_Chars val: '\tgit bisect terms --term-good >actual &&\n' span_id: 1669 ) (Token id:Id.Lit_Chars val:'\techo good >expected &&\n' span_id:1670) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual &&\n' span_id:1671) (Token id:Id.Lit_Chars val:'\tgit bisect terms --term-bad >actual &&\n' span_id:1672) (Token id:Id.Lit_Chars val:'\techo bad >expected &&\n' span_id:1673) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1674) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect start with one term1 and term2' span_id:1681))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1685) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1686) (Token id:Id.Lit_Chars val:'\tgit bisect start --term-old term2 --term-new term1 &&\n' span_id:1687) (Token id:Id.Lit_Chars val:'\tgit bisect term2 $HASH1 &&\n' span_id:1688) (Token id:Id.Lit_Chars val:'\tgit bisect term1 $HASH4 &&\n' span_id:1689) (Token id:Id.Lit_Chars val:'\tgit bisect term1 &&\n' span_id:1690) (Token id:Id.Lit_Chars val:'\tgit bisect term1 >bisect_result &&\n' span_id:1691) (Token id: Id.Lit_Chars val: '\tgrep "$HASH2 is the first term1 commit" bisect_result &&\n' span_id: 1692 ) (Token id:Id.Lit_Chars val:'\tgit bisect log >log_to_replay.txt &&\n' span_id:1693) (Token id:Id.Lit_Chars val:'\tgit bisect reset\n' span_id:1694) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect replay with term1 and term2' span_id:1701))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1705) (Token id: Id.Lit_Chars val: '\tgit bisect replay log_to_replay.txt >bisect_result &&\n' span_id: 1706 ) (Token id: Id.Lit_Chars val: '\tgrep "$HASH2 is the first term1 commit" bisect_result &&\n' span_id: 1707 ) (Token id:Id.Lit_Chars val:'\tgit bisect reset\n' span_id:1708) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect start term1 term2' span_id:1715))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1719) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1720) (Token id: Id.Lit_Chars val: '\tgit bisect start --term-new term1 --term-old term2 $HASH4 $HASH1 &&\n' span_id: 1721 ) (Token id:Id.Lit_Chars val:'\tgit bisect term1 &&\n' span_id:1722) (Token id:Id.Lit_Chars val:'\tgit bisect term1 >bisect_result &&\n' span_id:1723) (Token id: Id.Lit_Chars val: '\tgrep "$HASH2 is the first term1 commit" bisect_result &&\n' span_id: 1724 ) (Token id:Id.Lit_Chars val:'\tgit bisect log >log_to_replay.txt &&\n' span_id:1725) (Token id:Id.Lit_Chars val:'\tgit bisect reset\n' span_id:1726) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect cannot mix terms' span_id:1733))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1737) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1738) (Token id: Id.Lit_Chars val: '\tgit bisect start --term-good term1 --term-bad term2 $HASH4 $HASH1 &&\n' span_id: 1739 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git bisect a &&\n' span_id:1740) (Token id:Id.Lit_Chars val:'\ttest_must_fail git bisect b &&\n' span_id:1741) (Token id:Id.Lit_Chars val:'\ttest_must_fail git bisect bad &&\n' span_id:1742) (Token id:Id.Lit_Chars val:'\ttest_must_fail git bisect good &&\n' span_id:1743) (Token id:Id.Lit_Chars val:'\ttest_must_fail git bisect new &&\n' span_id:1744) (Token id:Id.Lit_Chars val:'\ttest_must_fail git bisect old\n' span_id:1745) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect terms rejects invalid terms' span_id:1752))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1756) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1757) (Token id: Id.Lit_Chars val: '\ttest_must_fail git bisect start --term-good invalid..term &&\n' span_id: 1758 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail git bisect terms --term-bad invalid..term &&\n' span_id: 1759 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git bisect terms --term-good bad &&\n' span_id:1760) (Token id: Id.Lit_Chars val: '\ttest_must_fail git bisect terms --term-good old &&\n' span_id: 1761 ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git bisect terms --term-good skip &&\n' span_id:1762) (Token id: Id.Lit_Chars val: '\ttest_must_fail git bisect terms --term-good reset &&\n' span_id: 1763 ) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing .git/BISECT_TERMS\n' span_id:1764) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bisect start --term-* does store terms' span_id:1771))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1775) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1776) (Token id:Id.Lit_Chars val:'\tgit bisect start --term-bad=one --term-good=two &&\n' span_id:1777) (Token id:Id.Lit_Chars val:'\tgit bisect terms >actual &&\n' span_id:1778) (Token id:Id.Lit_Chars val:'\tcat <<-EOF >expected &&\n' span_id:1779) (Token id: Id.Lit_Chars val: '\tYour current terms are two for the old state\n' span_id: 1780 ) (Token id:Id.Lit_Chars val:'\tand one for the new state.\n' span_id:1781) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:1782) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expected actual &&\n' span_id:1783) (Token id: Id.Lit_Chars val: '\tgit bisect terms --term-bad >actual &&\n' span_id: 1784 ) (Token id:Id.Lit_Chars val:'\techo one >expected &&\n' span_id:1785) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual &&\n' span_id:1786) (Token id:Id.Lit_Chars val:'\tgit bisect terms --term-good >actual &&\n' span_id:1787) (Token id:Id.Lit_Chars val:'\techo two >expected &&\n' span_id:1788) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1789) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'bisect start takes options and revs in any order' span_id: 1796 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1800) (Token id:Id.Lit_Chars val:'\tgit bisect reset &&\n' span_id:1801) (Token id:Id.Lit_Chars val:'\tgit bisect start --term-good one $HASH4 \\\n' span_id:1802) (Token id: Id.Lit_Chars val: '\t\t--term-good two --term-bad bad-term \\\n' span_id: 1803 ) (Token id:Id.Lit_Chars val:'\t\t$HASH1 --term-good three -- &&\n' span_id:1804) (Token id: Id.Lit_Chars val: '\t(git bisect terms --term-bad && git bisect terms --term-good) >actual &&\n' span_id: 1805 ) (Token id:Id.Lit_Chars val:'\tprintf "%s\\n%s\\n" bad-term three >expected &&\n' span_id:1806) (Token id:Id.Lit_Chars val:'\ttest_cmp expected actual\n' span_id:1807) ) } ) (C {(test_done)}) ] )