(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <'ancestor culling and limiting by parent number'>)} spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (FuncDef name: check_revlist body: (BraceGroup children: [ (AndOr children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:rev_list_args) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [23] ) ] spids: [23] ) (AndOr children: [ (C {(shift)}) (AndOr children: [ (SimpleCommand words: [{(git)} {(rev-parse)} {(DQ ($ VSub_At '$@'))}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {(expect)} spids: [44] ) ] ) (AndOr children: [ (SimpleCommand words: [{(git)} {(rev-list)} {($ VSub_Name '$rev_list_args')} {(--all)}] redirects: [ (Redir op_id: Redir_Great fd: 16777215 arg_word: {(actual)} spids: [58] ) ] ) (C {(test_cmp)} {(expect)} {(actual)}) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) ] spids: [20] ) spids: [15 19] ) (C {(test_expect_success)} {(setup)} { (SQ <'\n'> <'\n'> <'\ttouch file &&\n'> <'\tgit add file &&\n'> <'\n'> <'\ttest_commit one &&\n'> <'\n'> <'\ttest_tick=$(($test_tick - 2400)) &&\n'> <'\n'> <'\ttest_commit two &&\n'> <'\ttest_commit three &&\n'> <'\ttest_commit four &&\n'> <'\n'> <'\tgit log --pretty=oneline --abbrev-commit\n'> ) } ) (C {(test_expect_success)} {(SQ <'one is ancestor of others and should not be shown'>)} { (SQ <'\n'> <'\n'> <'\tgit rev-list one --not four >result &&\n'> <'\t>expect &&\n'> <'\ttest_cmp expect result\n'> <'\n'> ) } ) (C {(test_expect_success)} {(SQ <'setup roots, merges and octopuses'>)} { (SQ <'\n'> <'\n'> <'\tgit checkout --orphan newroot &&\n'> <'\ttest_commit five &&\n'> <'\tgit checkout -b sidebranch two &&\n'> <'\ttest_commit six &&\n'> <'\tgit checkout -b anotherbranch three &&\n'> <'\ttest_commit seven &&\n'> <'\tgit checkout -b yetanotherbranch four &&\n'> <'\ttest_commit eight &&\n'> <'\tgit checkout master &&\n'> <'\ttest_tick &&\n'> <'\tgit merge --allow-unrelated-histories -m normalmerge newroot &&\n'> <'\tgit tag normalmerge &&\n'> <'\ttest_tick &&\n'> <'\tgit merge -m tripus sidebranch anotherbranch &&\n'> <'\tgit tag tripus &&\n'> <'\tgit checkout -b tetrabranch normalmerge &&\n'> <'\ttest_tick &&\n'> <'\tgit merge -m tetrapus sidebranch anotherbranch yetanotherbranch &&\n'> <'\tgit tag tetrapus &&\n'> <'\tgit checkout master\n'> ) } ) (C {(test_expect_success)} {(SQ <'rev-list roots'>)} {(SQ <'\n'> <'\n'> <'\tcheck_revlist "--max-parents=0" one five\n'>)} ) (C {(test_expect_success)} {(SQ <'rev-list no merges'>)} { (SQ <'\n'> <'\n'> <'\tcheck_revlist "--max-parents=1" one eight seven six five four three two &&\n'> <'\tcheck_revlist "--no-merges" one eight seven six five four three two\n'> ) } ) (C {(test_expect_success)} {(SQ <'rev-list no octopuses'>)} { (SQ <'\n'> <'\n'> < '\tcheck_revlist "--max-parents=2" one normalmerge eight seven six five four three two\n' > ) } ) (C {(test_expect_success)} {(SQ <'rev-list no roots'>)} { (SQ <'\n'> <'\n'> < '\tcheck_revlist "--min-parents=1" tetrapus tripus normalmerge eight seven six four three two\n' > ) } ) (C {(test_expect_success)} {(SQ <'rev-list merges'>)} { (SQ <'\n'> <'\n'> <'\tcheck_revlist "--min-parents=2" tetrapus tripus normalmerge &&\n'> <'\tcheck_revlist "--merges" tetrapus tripus normalmerge\n'> ) } ) (C {(test_expect_success)} {(SQ <'rev-list octopus'>)} {(SQ <'\n'> <'\n'> <'\tcheck_revlist "--min-parents=3" tetrapus tripus\n'>)} ) (C {(test_expect_success)} {(SQ <'rev-list ordinary commits'>)} { (SQ <'\n'> <'\n'> <'\tcheck_revlist "--min-parents=1 --max-parents=1" eight seven six four three two\n'> ) } ) (C {(test_expect_success)} {(SQ <'rev-list --merges --no-merges yields empty set'>)} { (SQ <'\n'> <'\n'> <'\tcheck_revlist "--min-parents=2 --no-merges" &&\n'> <'\tcheck_revlist "--merges --no-merges" &&\n'> <'\tcheck_revlist "--no-merges --merges"\n'> ) } ) (C {(test_expect_success)} {(SQ <'rev-list override and infinities'>)} { (SQ <'\n'> <'\n'> < '\tcheck_revlist "--min-parents=2 --max-parents=1 --max-parents=3" tripus normalmerge &&\n' > < '\tcheck_revlist "--min-parents=1 --min-parents=2 --max-parents=7" tetrapus tripus normalmerge &&\n' > <'\tcheck_revlist "--min-parents=2 --max-parents=8" tetrapus tripus normalmerge &&\n'> <'\tcheck_revlist "--min-parents=2 --max-parents=-1" tetrapus tripus normalmerge &&\n'> <'\tcheck_revlist "--min-parents=2 --no-max-parents" tetrapus tripus normalmerge &&\n'> <'\tcheck_revlist "--max-parents=0 --min-parents=1 --no-min-parents" one five\n'> ) } ) (C {(test_expect_success)} {(SQ <dodecapus>)} { (SQ <'\n'> <'\n'> <'\troots= &&\n'> <'\tfor i in 1 2 3 4 5 6 7 8 9 10 11\n'> <'\tdo\n'> <'\t\tgit checkout -b root$i five &&\n'> <'\t\ttest_commit $i &&\n'> <'\t\troots="$roots root$i" ||\n'> <'\t\treturn\n'> <'\tdone &&\n'> <'\tgit checkout master &&\n'> <'\ttest_tick &&\n'> <'\tgit merge -m dodecapus $roots &&\n'> <'\tgit tag dodecapus &&\n'> <'\n'> <'\tcheck_revlist "--min-parents=4" dodecapus tetrapus &&\n'> <'\tcheck_revlist "--min-parents=8" dodecapus &&\n'> <'\tcheck_revlist "--min-parents=12" dodecapus &&\n'> <'\tcheck_revlist "--min-parents=13" &&\n'> <'\tcheck_revlist "--min-parents=4 --max-parents=11" tetrapus\n'> ) } ) (C {(test_expect_success)} {(SQ <'ancestors with the same commit time'>)} { (SQ <'\n'> <'\n'> <'\ttest_tick_keep=$test_tick &&\n'> <'\tfor i in 1 2 3 4 5 6 7 8; do\n'> <'\t\ttest_tick=$test_tick_keep\n'> <'\t\ttest_commit t$i\n'> <'\tdone &&\n'> <'\tgit rev-list t1^! --not t$i >result &&\n'> <'\t>expect &&\n'> <'\ttest_cmp expect result\n'> ) } ) (C {(test_done)}) ] )