(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 git rev-list --cherry-pick -- file' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:45) (Token id:Id.Lit_Chars val:'\techo Hallo > foo &&\n' span_id:46) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:47) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:48) (Token id:Id.Lit_Chars val:'\tgit commit -m "A" &&\n' span_id:49) (Token id:Id.Lit_Chars val:'\tgit tag A &&\n' span_id:50) (Token id:Id.Lit_Chars val:'\tgit checkout -b branch &&\n' span_id:51) (Token id:Id.Lit_Chars val:'\techo Bello > foo &&\n' span_id:52) (Token id:Id.Lit_Chars val:'\techo Cello > bar &&\n' span_id:53) (Token id:Id.Lit_Chars val:'\tgit add foo bar &&\n' span_id:54) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:55) (Token id:Id.Lit_Chars val:'\tgit commit -m "C" &&\n' span_id:56) (Token id:Id.Lit_Chars val:'\tgit tag C &&\n' span_id:57) (Token id:Id.Lit_Chars val:'\techo Dello > bar &&\n' span_id:58) (Token id:Id.Lit_Chars val:'\tgit add bar &&\n' span_id:59) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:60) (Token id:Id.Lit_Chars val:'\tgit commit -m "E" &&\n' span_id:61) (Token id:Id.Lit_Chars val:'\tgit tag E &&\n' span_id:62) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:63) (Token id:Id.Lit_Chars val:'\tgit checkout branch foo &&\n' span_id:64) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:65) (Token id:Id.Lit_Chars val:'\tgit commit -m "B" &&\n' span_id:66) (Token id:Id.Lit_Chars val:'\tgit tag B &&\n' span_id:67) (Token id:Id.Lit_Chars val:'\techo Cello > bar &&\n' span_id:68) (Token id:Id.Lit_Chars val:'\tgit add bar &&\n' span_id:69) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:70) (Token id:Id.Lit_Chars val:'\tgit commit -m "D" &&\n' span_id:71) (Token id:Id.Lit_Chars val:'\tgit tag D &&\n' span_id:72) (Token id:Id.Lit_Chars val:'\techo Nello > bar &&\n' span_id:73) (Token id:Id.Lit_Chars val:'\tgit add bar &&\n' span_id:74) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:75) (Token id:Id.Lit_Chars val:'\tgit commit -m "F" &&\n' span_id:76) (Token id:Id.Lit_Chars val:'\tgit tag F\n' span_id:77) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:83) fd:-1 arg_word:{(expect)}) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:86) fd: -1 here_begin: {(EOF)} here_end_span_id: 92 stdin_parts: [('<tags/B\n') ('>tags/C\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:--left-right span_id:97))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:101) (Token id: Id.Lit_Chars val: '\tgit rev-list --left-right B...C > actual &&\n' span_id: 102 ) (Token id:Id.Lit_Chars val:'\tgit name-rev --stdin --name-only --refs="*tags/*" \\\n' span_id:103) (Token id:Id.Lit_Chars val:'\t\t< actual > actual.named &&\n' span_id:104) (Token id:Id.Lit_Chars val:'\ttest_cmp actual.named expect\n' span_id:105) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:--count span_id:112))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:116) (Token id: Id.Lit_Chars val: '\tgit rev-list --count B...C > actual &&\n' span_id: 117 ) (Token id:Id.Lit_Chars val:'\ttest "$(cat actual)" = 2\n' span_id:118) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'--cherry-pick foo comes up empty' span_id:125))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:129) (Token id: Id.Lit_Chars val: '\ttest -z "$(git rev-list --left-right --cherry-pick B...C -- foo)"\n' span_id: 130 ) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:136) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:139) fd: -1 here_begin: {(EOF)} here_end_span_id: 144 stdin_parts: [('>tags/C\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'--cherry-pick bar does not come up empty' span_id:149))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:153) (Token id: Id.Lit_Chars val: '\tgit rev-list --left-right --cherry-pick B...C -- bar > actual &&\n' span_id: 154 ) (Token id:Id.Lit_Chars val:'\tgit name-rev --stdin --name-only --refs="*tags/*" \\\n' span_id:155) (Token id:Id.Lit_Chars val:'\t\t< actual > actual.named &&\n' span_id:156) (Token id:Id.Lit_Chars val:'\ttest_cmp actual.named expect\n' span_id:157) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'bar does not come up empty' span_id:164))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:168) (Token id: Id.Lit_Chars val: '\tgit rev-list --left-right B...C -- bar > actual &&\n' span_id: 169 ) (Token id:Id.Lit_Chars val:'\tgit name-rev --stdin --name-only --refs="*tags/*" \\\n' span_id:170) (Token id:Id.Lit_Chars val:'\t\t< actual > actual.named &&\n' span_id:171) (Token id:Id.Lit_Chars val:'\ttest_cmp actual.named expect\n' span_id:172) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:178) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:181) fd: -1 here_begin: {(EOF)} here_end_span_id: 187 stdin_parts: [('<tags/F\n') ('>tags/E\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'--cherry-pick bar does not come up empty (II)' span_id:192))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:196) (Token id: Id.Lit_Chars val: '\tgit rev-list --left-right --cherry-pick F...E -- bar > actual &&\n' span_id: 197 ) (Token id:Id.Lit_Chars val:'\tgit name-rev --stdin --name-only --refs="*tags/*" \\\n' span_id:198) (Token id:Id.Lit_Chars val:'\t\t< actual > actual.named &&\n' span_id:199) (Token id:Id.Lit_Chars val:'\ttest_cmp actual.named expect\n' span_id:200) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:206) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:209) fd: -1 here_begin: {(EOF)} here_end_span_id: 217 stdin_parts: [('+tags/F\n') ('=tags/D\n') ('+tags/E\n') ('=tags/C\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:--cherry-mark span_id:222))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:226) (Token id: Id.Lit_Chars val: '\tgit rev-list --cherry-mark F...E -- bar > actual &&\n' span_id: 227 ) (Token id:Id.Lit_Chars val:'\tgit name-rev --stdin --name-only --refs="*tags/*" \\\n' span_id:228) (Token id:Id.Lit_Chars val:'\t\t< actual > actual.named &&\n' span_id:229) (Token id:Id.Lit_Chars val:'\ttest_cmp actual.named expect\n' span_id:230) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:236) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:239) fd: -1 here_begin: {(EOF)} here_end_span_id: 247 stdin_parts: [('<tags/F\n') ('=tags/D\n') ('>tags/E\n') ('=tags/C\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'--cherry-mark --left-right' span_id:252))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:256) (Token id: Id.Lit_Chars val: '\tgit rev-list --cherry-mark --left-right F...E -- bar > actual &&\n' span_id: 257 ) (Token id:Id.Lit_Chars val:'\tgit name-rev --stdin --name-only --refs="*tags/*" \\\n' span_id:258) (Token id:Id.Lit_Chars val:'\t\t< actual > actual.named &&\n' span_id:259) (Token id:Id.Lit_Chars val:'\ttest_cmp actual.named expect\n' span_id:260) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:266) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:269) fd: -1 here_begin: {(EOF)} here_end_span_id: 274 stdin_parts: [('tags/E\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'--cherry-pick --right-only' span_id:279))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:283) (Token id: Id.Lit_Chars val: '\tgit rev-list --cherry-pick --right-only F...E -- bar > actual &&\n' span_id: 284 ) (Token id:Id.Lit_Chars val:'\tgit name-rev --stdin --name-only --refs="*tags/*" \\\n' span_id:285) (Token id:Id.Lit_Chars val:'\t\t< actual > actual.named &&\n' span_id:286) (Token id:Id.Lit_Chars val:'\ttest_cmp actual.named expect\n' span_id:287) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'--cherry-pick --left-only' span_id:294))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:298) (Token id: Id.Lit_Chars val: '\tgit rev-list --cherry-pick --left-only E...F -- bar > actual &&\n' span_id: 299 ) (Token id:Id.Lit_Chars val:'\tgit name-rev --stdin --name-only --refs="*tags/*" \\\n' span_id:300) (Token id:Id.Lit_Chars val:'\t\t< actual > actual.named &&\n' span_id:301) (Token id:Id.Lit_Chars val:'\ttest_cmp actual.named expect\n' span_id:302) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:308) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:311) fd: -1 here_begin: {(EOF)} here_end_span_id: 317 stdin_parts: [('+tags/E\n') ('=tags/C\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:--cherry span_id:322))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:326) (Token id: Id.Lit_Chars val: '\tgit rev-list --cherry F...E -- bar > actual &&\n' span_id: 327 ) (Token id:Id.Lit_Chars val:'\tgit name-rev --stdin --name-only --refs="*tags/*" \\\n' span_id:328) (Token id:Id.Lit_Chars val:'\t\t< actual > actual.named &&\n' span_id:329) (Token id:Id.Lit_Chars val:'\ttest_cmp actual.named expect\n' span_id:330) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:336) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:339) fd: -1 here_begin: {(EOF)} here_end_span_id: 344 stdin_parts: [('1\t1\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'--cherry --count' span_id:349))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:353) (Token id: Id.Lit_Chars val: '\tgit rev-list --cherry --count F...E -- bar > actual &&\n' span_id: 354 ) (Token id:Id.Lit_Chars val:'\ttest_cmp actual expect\n' span_id:355) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:361) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:364) fd: -1 here_begin: {(EOF)} here_end_span_id: 369 stdin_parts: [('2\t2\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'--cherry-mark --count' span_id:374))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:378) (Token id: Id.Lit_Chars val: '\tgit rev-list --cherry-mark --count F...E -- bar > actual &&\n' span_id: 379 ) (Token id:Id.Lit_Chars val:'\ttest_cmp actual expect\n' span_id:380) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:386) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:389) fd: -1 here_begin: {(EOF)} here_end_span_id: 394 stdin_parts: [('1\t1\t2\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'--cherry-mark --left-right --count' span_id:399))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:403) (Token id: Id.Lit_Chars val: '\tgit rev-list --cherry-mark --left-right --count F...E -- bar > actual &&\n' span_id: 404 ) (Token id:Id.Lit_Chars val:'\ttest_cmp actual expect\n' span_id:405) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: '--cherry-pick with independent, but identical branches' span_id: 412 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:416) (Token id: Id.Lit_Chars val: '\tgit symbolic-ref HEAD refs/heads/independent &&\n' span_id: 417 ) (Token id:Id.Lit_Chars val:'\trm .git/index &&\n' span_id:418) (Token id:Id.Lit_Chars val:'\techo Hallo > foo &&\n' span_id:419) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:420) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:421) (Token id:Id.Lit_Chars val:'\tgit commit -m "independent" &&\n' span_id:422) (Token id:Id.Lit_Chars val:'\techo Bello > foo &&\n' span_id:423) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:424) (Token id: Id.Lit_Chars val: '\tgit commit -m "independent, too" foo &&\n' span_id: 425 ) (Token id:Id.Lit_Chars val:'\ttest -z "$(git rev-list --left-right --cherry-pick \\\n' span_id:426) (Token id:Id.Lit_Chars val:'\t\tHEAD...master -- foo)"\n' span_id:427) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:433) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:436) fd: -1 here_begin: {(EOF)} here_end_span_id: 441 stdin_parts: [('1\t2\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'--count --left-right' span_id:446))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:450) (Token id: Id.Lit_Chars val: '\tgit rev-list --count --left-right C...D > actual &&\n' span_id: 451 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:452) ) } ) (command.ShFunction name: remove_loose_object body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:sha1) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:472) command_list: (command.CommandList children: [(C {(git)} {(rev-parse)} {(DQ ($ Id.VSub_Number '$1'))})] ) ) ) } spids: [470] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:remainder) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:sha1 span_id:488) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{('??')}) ) } spids: [486] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:firsttwo) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:sha1 span_id:498) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Percent arg_word: {($ Id.VSub_DollarName '$remainder')} ) ) } spids: [496] ) ] ) (C {(rm)} {(.git/objects/) ($ Id.VSub_DollarName '$firsttwo') (/) ($ Id.VSub_DollarName '$remainder') } ) ] ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'--cherry-pick avoids looking at full diffs' span_id:519))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:523) (Token id:Id.Lit_Chars val:'\tgit checkout -b shy-diff &&\n' span_id:524) (Token id:Id.Lit_Chars val:'\ttest_commit dont-look-at-me &&\n' span_id:525) (Token id:Id.Lit_Chars val:'\techo Hello >dont-look-at-me.t &&\n' span_id:526) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:527) (Token id: Id.Lit_Chars val: '\tgit commit -m tip dont-look-at-me.t &&\n' span_id: 528 ) (Token id:Id.Lit_Chars val:'\tgit checkout -b mainline HEAD^ &&\n' span_id:529) (Token id:Id.Lit_Chars val:'\ttest_commit to-cherry-pick &&\n' span_id:530) (Token id:Id.Lit_Chars val:'\tremove_loose_object shy-diff^:dont-look-at-me.t &&\n' span_id:531) (Token id: Id.Lit_Chars val: '\tgit rev-list --cherry-pick ...shy-diff\n' span_id: 532 ) ) } ) (C {(test_done)}) ] )