(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:--ancestry-path span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: test_merge body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (C {(test_tick)}) (C {(git)} {(merge)} {(-s)} {(ours)} {(-m)} {(DQ ($ Id.VSub_Number '$2'))} {(DQ ($ Id.VSub_Number '$1'))} ) (C {(git)} {(tag)} {(DQ ($ Id.VSub_Number '$2'))}) ] ) ] ) ) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:120) (Token id:Id.Lit_Chars val:'\ttest_commit A &&\n' span_id:121) (Token id:Id.Lit_Chars val:'\ttest_commit B &&\n' span_id:122) (Token id:Id.Lit_Chars val:'\ttest_commit C &&\n' span_id:123) (Token id:Id.Lit_Chars val:'\ttest_commit D &&\n' span_id:124) (Token id:Id.Lit_Chars val:'\ttest_commit E &&\n' span_id:125) (Token id:Id.Lit_Chars val:'\ttest_commit F &&\n' span_id:126) (Token id:Id.Lit_Chars val:'\tgit reset --hard C &&\n' span_id:127) (Token id:Id.Lit_Chars val:'\ttest_commit G &&\n' span_id:128) (Token id:Id.Lit_Chars val:'\ttest_merge E H &&\n' span_id:129) (Token id:Id.Lit_Chars val:'\ttest_commit I &&\n' span_id:130) (Token id:Id.Lit_Chars val:'\ttest_merge F J &&\n' span_id:131) (Token id:Id.Lit_Chars val:'\tgit reset --hard A &&\n' span_id:132) (Token id:Id.Lit_Chars val:'\ttest_commit K &&\n' span_id:133) (Token id:Id.Lit_Chars val:'\ttest_merge J L &&\n' span_id:134) (Token id:Id.Lit_Chars val:'\ttest_commit M\n' span_id:135) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rev-list D..M' span_id:142))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:146) (Token id: Id.Lit_Chars val: '\tfor c in E F G H I J K L M; do echo $c; done >expect &&\n' span_id: 147 ) (Token id:Id.Lit_Chars val:'\tgit rev-list --format=%s D..M |\n' span_id:148) (Token id:Id.Lit_Chars val:'\tsed -e "/^commit /d" |\n' span_id:149) (Token id:Id.Lit_Chars val:'\tsort >actual &&\n' span_id:150) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:151) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rev-list --ancestry-path D..M' span_id:158))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:162) (Token id: Id.Lit_Chars val: '\tfor c in E F H I J L M; do echo $c; done >expect &&\n' span_id: 163 ) (Token id:Id.Lit_Chars val:'\tgit rev-list --ancestry-path --format=%s D..M |\n' span_id:164) (Token id:Id.Lit_Chars val:'\tsed -e "/^commit /d" |\n' span_id:165) (Token id:Id.Lit_Chars val:'\tsort >actual &&\n' span_id:166) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:167) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rev-list D..M -- M.t' span_id:174))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:178) (Token id:Id.Lit_Chars val:'\techo M >expect &&\n' span_id:179) (Token id:Id.Lit_Chars val:'\tgit rev-list --format=%s D..M -- M.t |\n' span_id:180) (Token id:Id.Lit_Chars val:'\tsed -e "/^commit /d" >actual &&\n' span_id:181) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:182) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rev-list --ancestry-path D..M -- M.t' span_id:189))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:193) (Token id:Id.Lit_Chars val:'\techo M >expect &&\n' span_id:194) (Token id:Id.Lit_Chars val:'\tgit rev-list --ancestry-path --format=%s D..M -- M.t |\n' span_id:195) (Token id:Id.Lit_Chars val:'\tsed -e "/^commit /d" >actual &&\n' span_id:196) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:197) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rev-list F...I' span_id:204))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:208) (Token id: Id.Lit_Chars val: '\tfor c in F G H I; do echo $c; done >expect &&\n' span_id: 209 ) (Token id:Id.Lit_Chars val:'\tgit rev-list --format=%s F...I |\n' span_id:210) (Token id:Id.Lit_Chars val:'\tsed -e "/^commit /d" |\n' span_id:211) (Token id:Id.Lit_Chars val:'\tsort >actual &&\n' span_id:212) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:213) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rev-list --ancestry-path F...I' span_id:220))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:224) (Token id: Id.Lit_Chars val: '\tfor c in F H I; do echo $c; done >expect &&\n' span_id: 225 ) (Token id:Id.Lit_Chars val:'\tgit rev-list --ancestry-path --format=%s F...I |\n' span_id:226) (Token id:Id.Lit_Chars val:'\tsed -e "/^commit /d" |\n' span_id:227) (Token id:Id.Lit_Chars val:'\tsort >actual &&\n' span_id:228) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:229) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rev-list G..M -- G.t' span_id:239))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:243) (Token id:Id.Lit_Chars val:'\t>expect &&\n' span_id:244) (Token id:Id.Lit_Chars val:'\tgit rev-list --format=%s G..M -- G.t |\n' span_id:245) (Token id:Id.Lit_Chars val:'\tsed -e "/^commit /d" >actual &&\n' span_id:246) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:247) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rev-list --ancestry-path G..M -- G.t' span_id:254))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:258) (Token id:Id.Lit_Chars val:'\techo L >expect &&\n' span_id:259) (Token id:Id.Lit_Chars val:'\tgit rev-list --ancestry-path --format=%s G..M -- G.t |\n' span_id:260) (Token id:Id.Lit_Chars val:'\tsed -e "/^commit /d" >actual &&\n' span_id:261) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:262) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'rev-list --ancestry-path --simplify-merges G^..M -- G.t' span_id: 269 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:273) (Token id: Id.Lit_Chars val: '\tfor c in G L; do echo $c; done >expect &&\n' span_id: 274 ) (Token id: Id.Lit_Chars val: '\tgit rev-list --ancestry-path --simplify-merges --format=%s G^..M -- G.t |\n' span_id: 275 ) (Token id:Id.Lit_Chars val:'\tsed -e "/^commit /d" |\n' span_id:276) (Token id:Id.Lit_Chars val:'\tsort >actual &&\n' span_id:277) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:278) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup criss-cross' span_id:309))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:313) (Token id:Id.Lit_Chars val:'\tmkdir criss-cross &&\n' span_id:314) (Token id:Id.Lit_Chars val:'\t(cd criss-cross &&\n' span_id:315) (Token id:Id.Lit_Chars val:'\t git init &&\n' span_id:316) (Token id:Id.Lit_Chars val:'\t test_commit A &&\n' span_id:317) (Token id:Id.Lit_Chars val:'\t git checkout -b xb master &&\n' span_id:318) (Token id:Id.Lit_Chars val:'\t test_commit B &&\n' span_id:319) (Token id:Id.Lit_Chars val:'\t git checkout -b xc master &&\n' span_id:320) (Token id:Id.Lit_Chars val:'\t test_commit C &&\n' span_id:321) (Token id:Id.Lit_Chars val:'\t git checkout -b xbc xb -- &&\n' span_id:322) (Token id:Id.Lit_Chars val:'\t git merge xc &&\n' span_id:323) (Token id:Id.Lit_Chars val:'\t git checkout -b xcb xc -- &&\n' span_id:324) (Token id:Id.Lit_Chars val:'\t git merge xb &&\n' span_id:325) (Token id:Id.Lit_Chars val:'\t git checkout master)\n' span_id:326) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'criss-cross: rev-list --ancestry-path cb..bc' span_id:336))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:340) (Token id:Id.Lit_Chars val:'\t(cd criss-cross &&\n' span_id:341) (Token id:Id.Lit_Chars val:'\t git rev-list --ancestry-path xcb..xbc > actual &&\n' span_id:342) (Token id:Id.Lit_Chars val:'\t test -z "$(cat actual)")\n' span_id:343) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'criss-cross: rev-list --ancestry-path --all ^cb' span_id:353))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:357) (Token id:Id.Lit_Chars val:'\t(cd criss-cross &&\n' span_id:358) (Token id:Id.Lit_Chars val:'\t git rev-list --ancestry-path --all ^xcb > actual &&\n' span_id:359) (Token id:Id.Lit_Chars val:'\t test -z "$(cat actual)")\n' span_id:360) ) } ) (C {(test_done)}) ] )