(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:'checkout <branch>\n' span_id:6) (Token id:Id.Lit_Chars val:'\n' span_id:7) (Token id: Id.Lit_Chars val: 'Ensures that checkout on an unborn branch does what the user expects' span_id: 8 ) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: test_branch body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.Simple words: [ {(printf)} {(DQ ('%s') (Id.Lit_Other '\\') (n))} {(DQ (refs/heads/) ($ Id.VSub_Number '$1'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:41) fd: -1 arg_word: {(expect.HEAD)} ) ] ) (command.Simple words: [{(git)} {(symbolic-ref)} {(HEAD)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:53) fd: -1 arg_word: {(actual.HEAD)} ) ] ) (C {(test_cmp)} {(expect.HEAD)} {(actual.HEAD)}) ] ) ] ) ) (command.ShFunction name: test_branch_upstream body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.Simple words: [ {(printf)} {(DQ ('%s') (Id.Lit_Other '\\') (n))} {(DQ ($ Id.VSub_Number '$2'))} {(DQ (refs/heads/) ($ Id.VSub_Number '$3'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:96) fd: -1 arg_word: {(expect.upstream)} ) ] ) (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(git)} {(config)} {(DQ (branch.) ($ Id.VSub_Number '$1') (.remote))}) (C {(git)} {(config)} {(DQ (branch.) ($ Id.VSub_Number '$1') (.merge))}) ] ) ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:131) fd: -1 arg_word: {(actual.upstream)} ) ] ) (C {(test_cmp)} {(expect.upstream)} {(actual.upstream)}) ] ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:149))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:153) (Token id:Id.Lit_Chars val:'\ttest_commit my_master &&\n' span_id:154) (Token id:Id.Lit_Chars val:'\tgit init repo_a &&\n' span_id:155) (Token id:Id.Lit_Chars val:'\t(\n' span_id:156) (Token id:Id.Lit_Chars val:'\t\tcd repo_a &&\n' span_id:157) (Token id:Id.Lit_Chars val:'\t\ttest_commit a_master &&\n' span_id:158) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b foo &&\n' span_id:159) (Token id:Id.Lit_Chars val:'\t\ttest_commit a_foo &&\n' span_id:160) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b bar &&\n' span_id:161) (Token id:Id.Lit_Chars val:'\t\ttest_commit a_bar\n' span_id:162) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:163) (Token id:Id.Lit_Chars val:'\tgit init repo_b &&\n' span_id:164) (Token id:Id.Lit_Chars val:'\t(\n' span_id:165) (Token id:Id.Lit_Chars val:'\t\tcd repo_b &&\n' span_id:166) (Token id:Id.Lit_Chars val:'\t\ttest_commit b_master &&\n' span_id:167) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b foo &&\n' span_id:168) (Token id:Id.Lit_Chars val:'\t\ttest_commit b_foo &&\n' span_id:169) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b baz &&\n' span_id:170) (Token id:Id.Lit_Chars val:'\t\ttest_commit b_baz\n' span_id:171) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:172) (Token id:Id.Lit_Chars val:'\tgit remote add repo_a repo_a &&\n' span_id:173) (Token id:Id.Lit_Chars val:'\tgit remote add repo_b repo_b &&\n' span_id:174) (Token id:Id.Lit_Chars val:'\tgit config remote.repo_b.fetch \\\n' span_id:175) (Token id: Id.Lit_Chars val: '\t\t"+refs/heads/*:refs/remotes/other_b/*" &&\n' span_id: 176 ) (Token id:Id.Lit_Chars val:'\tgit fetch --all\n' span_id:177) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'checkout of non-existing branch fails' span_id:184))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:188) (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:189) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D xyzzy &&\n' span_id:190) (Token id:Id.Lit_Chars val:'\n' span_id:191) (Token id:Id.Lit_Chars val:'\ttest_must_fail git checkout xyzzy &&\n' span_id:192) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --verify refs/heads/xyzzy &&\n' span_id: 193 ) (Token id:Id.Lit_Chars val:'\ttest_branch master\n' span_id:194) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'checkout of branch from multiple remotes fails #1' span_id: 201 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:205) (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:206) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D foo &&\n' span_id:207) (Token id:Id.Lit_Chars val:'\n' span_id:208) (Token id:Id.Lit_Chars val:'\ttest_must_fail git checkout foo &&\n' span_id:209) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --verify refs/heads/foo &&\n' span_id: 210 ) (Token id:Id.Lit_Chars val:'\ttest_branch master\n' span_id:211) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'checkout of branch from a single remote succeeds #1' span_id: 218 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:222) (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:223) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D bar &&\n' span_id:224) (Token id:Id.Lit_Chars val:'\n' span_id:225) (Token id:Id.Lit_Chars val:'\tgit checkout bar &&\n' span_id:226) (Token id:Id.Lit_Chars val:'\ttest_branch bar &&\n' span_id:227) (Token id:Id.Lit_Chars val:'\ttest_cmp_rev remotes/repo_a/bar HEAD &&\n' span_id:228) (Token id:Id.Lit_Chars val:'\ttest_branch_upstream bar repo_a bar\n' span_id:229) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'checkout of branch from a single remote succeeds #2' span_id: 236 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:240) (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:241) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D baz &&\n' span_id:242) (Token id:Id.Lit_Chars val:'\n' span_id:243) (Token id:Id.Lit_Chars val:'\tgit checkout baz &&\n' span_id:244) (Token id:Id.Lit_Chars val:'\ttest_branch baz &&\n' span_id:245) (Token id:Id.Lit_Chars val:'\ttest_cmp_rev remotes/other_b/baz HEAD &&\n' span_id:246) (Token id:Id.Lit_Chars val:'\ttest_branch_upstream baz repo_b baz\n' span_id:247) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'--no-guess suppresses branch auto-vivification' span_id:254))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:258) (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:259) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D bar &&\n' span_id:260) (Token id:Id.Lit_Chars val:'\n' span_id:261) (Token id:Id.Lit_Chars val:'\ttest_must_fail git checkout --no-guess bar &&\n' span_id:262) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --verify refs/heads/bar &&\n' span_id: 263 ) (Token id:Id.Lit_Chars val:'\ttest_branch master\n' span_id:264) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup more remotes with unconventional refspecs' span_id:271))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:275) (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:276) (Token id:Id.Lit_Chars val:'\tgit init repo_c &&\n' span_id:277) (Token id:Id.Lit_Chars val:'\t(\n' span_id:278) (Token id:Id.Lit_Chars val:'\t\tcd repo_c &&\n' span_id:279) (Token id:Id.Lit_Chars val:'\t\ttest_commit c_master &&\n' span_id:280) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b bar &&\n' span_id:281) (Token id:Id.Lit_Chars val:'\t\ttest_commit c_bar &&\n' span_id:282) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b spam &&\n' span_id:283) (Token id:Id.Lit_Chars val:'\t\ttest_commit c_spam\n' span_id:284) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:285) (Token id:Id.Lit_Chars val:'\tgit init repo_d &&\n' span_id:286) (Token id:Id.Lit_Chars val:'\t(\n' span_id:287) (Token id:Id.Lit_Chars val:'\t\tcd repo_d &&\n' span_id:288) (Token id:Id.Lit_Chars val:'\t\ttest_commit d_master &&\n' span_id:289) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b baz &&\n' span_id:290) (Token id:Id.Lit_Chars val:'\t\ttest_commit d_baz &&\n' span_id:291) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b eggs &&\n' span_id:292) (Token id:Id.Lit_Chars val:'\t\ttest_commit d_eggs\n' span_id:293) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:294) (Token id:Id.Lit_Chars val:'\tgit remote add repo_c repo_c &&\n' span_id:295) (Token id:Id.Lit_Chars val:'\tgit config remote.repo_c.fetch \\\n' span_id:296) (Token id: Id.Lit_Chars val: '\t\t"+refs/heads/*:refs/remotes/extra_dir/repo_c/extra_dir/*" &&\n' span_id: 297 ) (Token id:Id.Lit_Chars val:'\tgit remote add repo_d repo_d &&\n' span_id:298) (Token id:Id.Lit_Chars val:'\tgit config remote.repo_d.fetch \\\n' span_id:299) (Token id:Id.Lit_Chars val:'\t\t"+refs/heads/*:refs/repo_d/*" &&\n' span_id:300) (Token id:Id.Lit_Chars val:'\tgit fetch --all\n' span_id:301) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'checkout of branch from multiple remotes fails #2' span_id: 308 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:312) (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:313) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D bar &&\n' span_id:314) (Token id:Id.Lit_Chars val:'\n' span_id:315) (Token id:Id.Lit_Chars val:'\ttest_must_fail git checkout bar &&\n' span_id:316) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --verify refs/heads/bar &&\n' span_id: 317 ) (Token id:Id.Lit_Chars val:'\ttest_branch master\n' span_id:318) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'checkout of branch from multiple remotes fails #3' span_id: 325 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:329) (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:330) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D baz &&\n' span_id:331) (Token id:Id.Lit_Chars val:'\n' span_id:332) (Token id:Id.Lit_Chars val:'\ttest_must_fail git checkout baz &&\n' span_id:333) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --verify refs/heads/baz &&\n' span_id: 334 ) (Token id:Id.Lit_Chars val:'\ttest_branch master\n' span_id:335) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'checkout of branch from a single remote succeeds #3' span_id: 342 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:346) (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:347) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D spam &&\n' span_id:348) (Token id:Id.Lit_Chars val:'\n' span_id:349) (Token id:Id.Lit_Chars val:'\tgit checkout spam &&\n' span_id:350) (Token id:Id.Lit_Chars val:'\ttest_branch spam &&\n' span_id:351) (Token id: Id.Lit_Chars val: '\ttest_cmp_rev refs/remotes/extra_dir/repo_c/extra_dir/spam HEAD &&\n' span_id: 352 ) (Token id:Id.Lit_Chars val:'\ttest_branch_upstream spam repo_c spam\n' span_id:353) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'checkout of branch from a single remote succeeds #4' span_id: 360 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:364) (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:365) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D eggs &&\n' span_id:366) (Token id:Id.Lit_Chars val:'\n' span_id:367) (Token id:Id.Lit_Chars val:'\tgit checkout eggs &&\n' span_id:368) (Token id:Id.Lit_Chars val:'\ttest_branch eggs &&\n' span_id:369) (Token id:Id.Lit_Chars val:'\ttest_cmp_rev refs/repo_d/eggs HEAD &&\n' span_id:370) (Token id: Id.Lit_Chars val: '\ttest_branch_upstream eggs repo_d eggs\n' span_id: 371 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'checkout of branch with a file having the same name fails' span_id: 378 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:382) (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:383) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D spam &&\n' span_id:384) (Token id:Id.Lit_Chars val:'\n' span_id:385) (Token id:Id.Lit_Chars val:'\t>spam &&\n' span_id:386) (Token id:Id.Lit_Chars val:'\ttest_must_fail git checkout spam &&\n' span_id:387) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --verify refs/heads/spam &&\n' span_id: 388 ) (Token id:Id.Lit_Chars val:'\ttest_branch master\n' span_id:389) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'checkout of branch with a file in subdir having the same name fails' span_id: 396 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:400) (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:401) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D spam &&\n' span_id:402) (Token id:Id.Lit_Chars val:'\n' span_id:403) (Token id:Id.Lit_Chars val:'\t>spam &&\n' span_id:404) (Token id:Id.Lit_Chars val:'\tmkdir sub &&\n' span_id:405) (Token id:Id.Lit_Chars val:'\tmv spam sub/spam &&\n' span_id:406) (Token id: Id.Lit_Chars val: '\ttest_must_fail git -C sub checkout spam &&\n' span_id: 407 ) (Token id: Id.Lit_Chars val: '\ttest_must_fail git rev-parse --verify refs/heads/spam &&\n' span_id: 408 ) (Token id:Id.Lit_Chars val:'\ttest_branch master\n' span_id:409) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'checkout <branch> -- succeeds, even if a file with the same name exists' span_id: 416 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:420) (Token id:Id.Lit_Chars val:'\tgit checkout -B master &&\n' span_id:421) (Token id:Id.Lit_Chars val:'\ttest_might_fail git branch -D spam &&\n' span_id:422) (Token id:Id.Lit_Chars val:'\n' span_id:423) (Token id:Id.Lit_Chars val:'\t>spam &&\n' span_id:424) (Token id:Id.Lit_Chars val:'\tgit checkout spam -- &&\n' span_id:425) (Token id:Id.Lit_Chars val:'\ttest_branch spam &&\n' span_id:426) (Token id: Id.Lit_Chars val: '\ttest_cmp_rev refs/remotes/extra_dir/repo_c/extra_dir/spam HEAD &&\n' span_id: 427 ) (Token id:Id.Lit_Chars val:'\ttest_branch_upstream spam repo_c spam\n' span_id:428) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'loosely defined local base branch is reported correctly' span_id: 435 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:439) (Token id:Id.Lit_Chars val:'\n' span_id:440) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:441) (Token id:Id.Lit_Chars val:'\tgit branch strict &&\n' span_id:442) (Token id:Id.Lit_Chars val:'\tgit branch loose &&\n' span_id:443) (Token id:Id.Lit_Chars val:'\tgit commit --allow-empty -m "a bit more" &&\n' span_id:444) (Token id:Id.Lit_Chars val:'\n' span_id:445) (Token id:Id.Lit_Chars val:'\ttest_config branch.strict.remote . &&\n' span_id:446) (Token id: Id.Lit_Chars val: '\ttest_config branch.loose.remote . &&\n' span_id: 447 ) (Token id:Id.Lit_Chars val:'\ttest_config branch.strict.merge refs/heads/master &&\n' span_id:448) (Token id: Id.Lit_Chars val: '\ttest_config branch.loose.merge master &&\n' span_id: 449 ) (Token id:Id.Lit_Chars val:'\n' span_id:450) (Token id: Id.Lit_Chars val: '\tgit checkout strict | sed -e "s/strict/BRANCHNAME/g" >expect &&\n' span_id: 451 ) (Token id: Id.Lit_Chars val: '\tgit checkout loose | sed -e "s/loose/BRANCHNAME/g" >actual &&\n' span_id: 452 ) (Token id:Id.Lit_Chars val:'\n' span_id:453) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:454) ) } ) (C {(test_done)}) ] )