(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: 'ancestor culling and limiting by parent number' span_id: 6 ) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: check_revlist body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:rev_list_args) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [23] ) ] ) (C {(shift)}) (command.Simple words: [{(git)} {(rev-parse)} {(DQ ($ Id.VSub_At '$@'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:44) fd: -1 arg_word: {(expect)} ) ] ) (command.Simple words: [{(git)} {(rev-list)} {($ Id.VSub_DollarName '$rev_list_args')} {(--all)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:58) fd: -1 arg_word: {(actual)} ) ] ) (C {(test_cmp)} {(expect)} {(actual)}) ] ) ] ) ) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:78) (Token id:Id.Lit_Chars val:'\n' span_id:79) (Token id:Id.Lit_Chars val:'\ttouch file &&\n' span_id:80) (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:81) (Token id:Id.Lit_Chars val:'\n' span_id:82) (Token id:Id.Lit_Chars val:'\ttest_commit one &&\n' span_id:83) (Token id:Id.Lit_Chars val:'\n' span_id:84) (Token id:Id.Lit_Chars val:'\ttest_tick=$(($test_tick - 2400)) &&\n' span_id:85) (Token id:Id.Lit_Chars val:'\n' span_id:86) (Token id:Id.Lit_Chars val:'\ttest_commit two &&\n' span_id:87) (Token id:Id.Lit_Chars val:'\ttest_commit three &&\n' span_id:88) (Token id:Id.Lit_Chars val:'\ttest_commit four &&\n' span_id:89) (Token id:Id.Lit_Chars val:'\n' span_id:90) (Token id:Id.Lit_Chars val:'\tgit log --pretty=oneline --abbrev-commit\n' span_id:91) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'one is ancestor of others and should not be shown' span_id: 98 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:102) (Token id:Id.Lit_Chars val:'\n' span_id:103) (Token id: Id.Lit_Chars val: '\tgit rev-list one --not four >result &&\n' span_id: 104 ) (Token id:Id.Lit_Chars val:'\t>expect &&\n' span_id:105) (Token id:Id.Lit_Chars val:'\ttest_cmp expect result\n' span_id:106) (Token id:Id.Lit_Chars val:'\n' span_id:107) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup roots, merges and octopuses' span_id:114))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:118) (Token id:Id.Lit_Chars val:'\n' span_id:119) (Token id:Id.Lit_Chars val:'\tgit checkout --orphan newroot &&\n' span_id:120) (Token id:Id.Lit_Chars val:'\ttest_commit five &&\n' span_id:121) (Token id:Id.Lit_Chars val:'\tgit checkout -b sidebranch two &&\n' span_id:122) (Token id:Id.Lit_Chars val:'\ttest_commit six &&\n' span_id:123) (Token id: Id.Lit_Chars val: '\tgit checkout -b anotherbranch three &&\n' span_id: 124 ) (Token id:Id.Lit_Chars val:'\ttest_commit seven &&\n' span_id:125) (Token id: Id.Lit_Chars val: '\tgit checkout -b yetanotherbranch four &&\n' span_id: 126 ) (Token id:Id.Lit_Chars val:'\ttest_commit eight &&\n' span_id:127) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:128) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:129) (Token id: Id.Lit_Chars val: '\tgit merge --allow-unrelated-histories -m normalmerge newroot &&\n' span_id: 130 ) (Token id:Id.Lit_Chars val:'\tgit tag normalmerge &&\n' span_id:131) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:132) (Token id:Id.Lit_Chars val:'\tgit merge -m tripus sidebranch anotherbranch &&\n' span_id:133) (Token id:Id.Lit_Chars val:'\tgit tag tripus &&\n' span_id:134) (Token id:Id.Lit_Chars val:'\tgit checkout -b tetrabranch normalmerge &&\n' span_id:135) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:136) (Token id: Id.Lit_Chars val: '\tgit merge -m tetrapus sidebranch anotherbranch yetanotherbranch &&\n' span_id: 137 ) (Token id:Id.Lit_Chars val:'\tgit tag tetrapus &&\n' span_id:138) (Token id:Id.Lit_Chars val:'\tgit checkout master\n' span_id:139) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rev-list roots' span_id:146))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:150) (Token id:Id.Lit_Chars val:'\n' span_id:151) (Token id: Id.Lit_Chars val: '\tcheck_revlist "--max-parents=0" one five\n' span_id: 152 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rev-list no merges' span_id:159))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:163) (Token id:Id.Lit_Chars val:'\n' span_id:164) (Token id: Id.Lit_Chars val: '\tcheck_revlist "--max-parents=1" one eight seven six five four three two &&\n' span_id: 165 ) (Token id: Id.Lit_Chars val: '\tcheck_revlist "--no-merges" one eight seven six five four three two\n' span_id: 166 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rev-list no octopuses' span_id:173))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:177) (Token id:Id.Lit_Chars val:'\n' span_id:178) (Token id: Id.Lit_Chars val: '\tcheck_revlist "--max-parents=2" one normalmerge eight seven six five four three two\n' span_id: 179 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rev-list no roots' span_id:186))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:190) (Token id:Id.Lit_Chars val:'\n' span_id:191) (Token id: Id.Lit_Chars val: '\tcheck_revlist "--min-parents=1" tetrapus tripus normalmerge eight seven six four three two\n' span_id: 192 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rev-list merges' span_id:199))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:203) (Token id:Id.Lit_Chars val:'\n' span_id:204) (Token id: Id.Lit_Chars val: '\tcheck_revlist "--min-parents=2" tetrapus tripus normalmerge &&\n' span_id: 205 ) (Token id:Id.Lit_Chars val:'\tcheck_revlist "--merges" tetrapus tripus normalmerge\n' span_id:206) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rev-list octopus' span_id:213))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:217) (Token id:Id.Lit_Chars val:'\n' span_id:218) (Token id: Id.Lit_Chars val: '\tcheck_revlist "--min-parents=3" tetrapus tripus\n' span_id: 219 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rev-list ordinary commits' span_id:226))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:230) (Token id:Id.Lit_Chars val:'\n' span_id:231) (Token id: Id.Lit_Chars val: '\tcheck_revlist "--min-parents=1 --max-parents=1" eight seven six four three two\n' span_id: 232 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rev-list --merges --no-merges yields empty set' span_id:239))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:243) (Token id:Id.Lit_Chars val:'\n' span_id:244) (Token id: Id.Lit_Chars val: '\tcheck_revlist "--min-parents=2 --no-merges" &&\n' span_id: 245 ) (Token id:Id.Lit_Chars val:'\tcheck_revlist "--merges --no-merges" &&\n' span_id:246) (Token id: Id.Lit_Chars val: '\tcheck_revlist "--no-merges --merges"\n' span_id: 247 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rev-list override and infinities' span_id:254))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:258) (Token id:Id.Lit_Chars val:'\n' span_id:259) (Token id: Id.Lit_Chars val: '\tcheck_revlist "--min-parents=2 --max-parents=1 --max-parents=3" tripus normalmerge &&\n' span_id: 260 ) (Token id: Id.Lit_Chars val: '\tcheck_revlist "--min-parents=1 --min-parents=2 --max-parents=7" tetrapus tripus normalmerge &&\n' span_id: 261 ) (Token id: Id.Lit_Chars val: '\tcheck_revlist "--min-parents=2 --max-parents=8" tetrapus tripus normalmerge &&\n' span_id: 262 ) (Token id: Id.Lit_Chars val: '\tcheck_revlist "--min-parents=2 --max-parents=-1" tetrapus tripus normalmerge &&\n' span_id: 263 ) (Token id: Id.Lit_Chars val: '\tcheck_revlist "--min-parents=2 --no-max-parents" tetrapus tripus normalmerge &&\n' span_id: 264 ) (Token id: Id.Lit_Chars val: '\tcheck_revlist "--max-parents=0 --min-parents=1 --no-min-parents" one five\n' span_id: 265 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:dodecapus span_id:272))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:276) (Token id:Id.Lit_Chars val:'\n' span_id:277) (Token id:Id.Lit_Chars val:'\troots= &&\n' span_id:278) (Token id:Id.Lit_Chars val:'\tfor i in 1 2 3 4 5 6 7 8 9 10 11\n' span_id:279) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:280) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b root$i five &&\n' span_id:281) (Token id:Id.Lit_Chars val:'\t\ttest_commit $i &&\n' span_id:282) (Token id:Id.Lit_Chars val:'\t\troots="$roots root$i" ||\n' span_id:283) (Token id:Id.Lit_Chars val:'\t\treturn\n' span_id:284) (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:285) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:286) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:287) (Token id:Id.Lit_Chars val:'\tgit merge -m dodecapus $roots &&\n' span_id:288) (Token id:Id.Lit_Chars val:'\tgit tag dodecapus &&\n' span_id:289) (Token id:Id.Lit_Chars val:'\n' span_id:290) (Token id:Id.Lit_Chars val:'\tcheck_revlist "--min-parents=4" dodecapus tetrapus &&\n' span_id:291) (Token id: Id.Lit_Chars val: '\tcheck_revlist "--min-parents=8" dodecapus &&\n' span_id: 292 ) (Token id:Id.Lit_Chars val:'\tcheck_revlist "--min-parents=12" dodecapus &&\n' span_id:293) (Token id:Id.Lit_Chars val:'\tcheck_revlist "--min-parents=13" &&\n' span_id:294) (Token id: Id.Lit_Chars val: '\tcheck_revlist "--min-parents=4 --max-parents=11" tetrapus\n' span_id: 295 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'ancestors with the same commit time' span_id:302))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:306) (Token id:Id.Lit_Chars val:'\n' span_id:307) (Token id:Id.Lit_Chars val:'\ttest_tick_keep=$test_tick &&\n' span_id:308) (Token id:Id.Lit_Chars val:'\tfor i in 1 2 3 4 5 6 7 8; do\n' span_id:309) (Token id:Id.Lit_Chars val:'\t\ttest_tick=$test_tick_keep\n' span_id:310) (Token id:Id.Lit_Chars val:'\t\ttest_commit t$i\n' span_id:311) (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:312) (Token id:Id.Lit_Chars val:'\tgit rev-list t1^! --not t$i >result &&\n' span_id:313) (Token id:Id.Lit_Chars val:'\t>expect &&\n' span_id:314) (Token id:Id.Lit_Chars val:'\ttest_cmp expect result\n' span_id:315) ) } ) (C {(test_done)}) ] )