(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:'TREESAME and limiting' span_id:39))} spids: [37] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: note body: (command.BraceGroup children:[(C {(git)} {(tag)} {(DQ ($ Id.VSub_Number '$1'))})]) ) (command.ShFunction name: unnote body: (command.BraceGroup children: [ (command.Pipeline children: [ (C {(git)} {(name-rev)} {(--tags)} {(--stdin)}) (C {(sed)} {(-e)} { (DQ ('s|') ($ Id.VSub_DollarName '$_x40') (' (tags/') (Id.Lit_Other '\\') ('([^)]*') (Id.Lit_Other '\\') ('))') (Id.Lit_Other '\\') ('([ \t]') (Id.Lit_Other '\\') (')|') (Id.Lit_Other '\\') (1) (Id.Lit_Other '\\') ('2|g') ) } ) ] negated: F ) ] ) ) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:115) (Token id: Id.Lit_Chars val: '\ttest_commit "Initial file" file "Hi there" A &&\n' span_id: 116 ) (Token id:Id.Lit_Chars val:'\tgit branch other-branch &&\n' span_id:117) (Token id:Id.Lit_Chars val:'\n' span_id:118) (Token id:Id.Lit_Chars val:'\ttest_commit "file=Hello" file "Hello" B &&\n' span_id:119) (Token id:Id.Lit_Chars val:'\tgit branch third-branch &&\n' span_id:120) (Token id:Id.Lit_Chars val:'\n' span_id:121) (Token id:Id.Lit_Chars val:'\tgit checkout other-branch &&\n' span_id:122) (Token id:Id.Lit_Chars val:'\ttest_commit "Added other" other "Hello" C &&\n' span_id:123) (Token id:Id.Lit_Chars val:'\n' span_id:124) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:125) (Token id:Id.Lit_Chars val:'\ttest_merge D other-branch &&\n' span_id:126) (Token id:Id.Lit_Chars val:'\n' span_id:127) (Token id:Id.Lit_Chars val:'\tgit checkout third-branch &&\n' span_id:128) (Token id:Id.Lit_Chars val:'\ttest_commit "Third file" third "Nothing" E &&\n' span_id:129) (Token id:Id.Lit_Chars val:'\n' span_id:130) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:131) (Token id: Id.Lit_Chars val: '\ttest_commit "file=Blah" file "Blah" F &&\n' span_id: 132 ) (Token id:Id.Lit_Chars val:'\n' span_id:133) (Token id: Id.Lit_Chars val: '\ttest_tick && git merge --no-commit third-branch &&\n' span_id: 134 ) (Token id:Id.Lit_Chars val:'\tgit checkout third-branch file &&\n' span_id:135) (Token id:Id.Lit_Chars val:'\tgit commit &&\n' span_id:136) (Token id:Id.Lit_Chars val:'\tnote G &&\n' span_id:137) (Token id:Id.Lit_Chars val:'\tgit branch fiddler-branch &&\n' span_id:138) (Token id:Id.Lit_Chars val:'\n' span_id:139) (Token id:Id.Lit_Chars val:'\tgit checkout -b part2-branch &&\n' span_id:140) (Token id:Id.Lit_Chars val:'\ttest_commit "file=Part 2" file "Part 2" H &&\n' span_id:141) (Token id:Id.Lit_Chars val:'\n' span_id:142) (Token id:Id.Lit_Chars val:'\tgit checkout fiddler-branch &&\n' span_id:143) (Token id: Id.Lit_Chars val: '\ttest_commit "Bad commit" file "Silly" I &&\n' span_id: 144 ) (Token id:Id.Lit_Chars val:'\n' span_id:145) (Token id: Id.Lit_Chars val: '\ttest_tick && git revert I && note J &&\n' span_id: 146 ) (Token id:Id.Lit_Chars val:'\n' span_id:147) (Token id:Id.Lit_Chars val:'\tgit checkout master &&\n' span_id:148) (Token id:Id.Lit_Chars val:'\ttest_tick && git merge --no-ff fiddler-branch &&\n' span_id:149) (Token id:Id.Lit_Chars val:'\tnote K &&\n' span_id:150) (Token id:Id.Lit_Chars val:'\n' span_id:151) (Token id: Id.Lit_Chars val: '\ttest_commit "file=Part 1" file "Part 1" L &&\n' span_id: 152 ) (Token id:Id.Lit_Chars val:'\n' span_id:153) (Token id: Id.Lit_Chars val: '\ttest_tick && test_must_fail git merge part2-branch &&\n' span_id: 154 ) (Token id:Id.Lit_Chars val:'\ttest_commit M file "Parts 1+2"\n' span_id:155) ) } ) (command.ShFunction name: check_outcome body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:outcome) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [167] ) ] ) (C {(shift)}) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.Case to_match: {(DQ ($ Id.VSub_Number '$1'))} arms: [ (case_arm pat_list: [{(Id.Lit_Star '*') (DQ ('(')) (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FMT) op: assign_op.Equal rhs: {(DQ ('%P\t%H | %s'))} spids: [192] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:munge_actual) op: assign_op.Equal rhs: { (DQ ('\n') ('\t\t\ts/^') (Id.Lit_Other '\\') ('([^\t]*') (Id.Lit_Other '\\') (')\t') (Id.Lit_Other '\\') ('([^ ]*') (Id.Lit_Other '\\') (') .*/(') (Id.Lit_Other '\\') ('1)') (Id.Lit_Other '\\') ('2/\n') ('\t\t\ts/ //g\n') ('\t\t\ts/()//\n') ('\t\t') ) } spids: [198] ) ] ) ] spids: [184 189 220 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FMT) op: assign_op.Equal rhs: {(DQ ('%H | %s'))} spids: [227] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:munge_actual) op: assign_op.Equal rhs: { (DQ ('s/^') (Id.Lit_Other '\\') ('([^ ]*') (Id.Lit_Other '\\') (') .*/') (Id.Lit_Other '\\') (1/) ) } spids: [233] ) ] ) ] spids: [223 224 245 -1] ) ] ) (command.Simple words: [{(printf)} {(DQ ('%s') (Id.Lit_Other '\\') (n))} {($ Id.VSub_Number '$1')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:263) fd: -1 arg_word: {(expect)} ) ] ) (C {(shift)}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:param) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Star '$*'))} spids: [273] ) ] ) (C {(test_expect_) ($ Id.VSub_DollarName '$outcome')} {(DQ ('log ') ($ Id.VSub_DollarName '$param'))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:290) (Token id: Id.Lit_Chars val: '\t\tgit log --format="$FMT" $param |\n' span_id: 291 ) (Token id:Id.Lit_Chars val:'\t\tunnote >actual &&\n' span_id:292) (Token id: Id.Lit_Chars val: '\t\tsed -e "$munge_actual" <actual >check &&\n' span_id: 293 ) (Token id:Id.Lit_Chars val:'\t\ttest_cmp expect check\n' span_id:294) (Token id:Id.Lit_Chars val:'\t' span_id:295) ) } ) ] ) ] ) ) (command.ShFunction name: check_result body: (command.BraceGroup children: [(C {(check_outcome)} {(success)} {(DQ ($ Id.VSub_At '$@'))})] ) ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L K J I H G F E D C B A' span_id:341))}) (C {(check_result)} { (SQ (Token id: Id.Lit_Chars val: '(LH)M (K)L (GJ)K (I)J (G)I (G)H (FE)G (D)F (B)E (BC)D (A)C (A)B A' span_id: 347 ) ) } ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M H L K J I G E F D C B A' span_id:353))} {(--topo-order)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L H B A' span_id:361))} {(--)} {(file)}) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(LH)M (B)L (B)H (A)B A' span_id:371))} {(--parents)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L J I H G F D B A' span_id:383))} {(--full-history)} {(--)} {(file)} ) (C {(check_result)} { (SQ (Token id: Id.Lit_Chars val: '(LH)M (K)L (GJ)K (I)J (G)I (G)H (FB)G (D)F (BA)D (A)B A' span_id: 395 ) ) } {(--full-history)} {(--parents)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(LH)M (G)H (J)L (I)J (G)I (FB)G (B)F (A)B A' span_id:409))} {(--simplify-merges)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L K G F D B A' span_id:421))} {(--first-parent)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L G F B A' span_id:429))} {(--first-parent)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L K J I H G E' span_id:445))} {(F..M)}) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M H L K J I G E' span_id:453))} {(F..M)} {(--topo-order)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L H' span_id:463))} {(F..M)} {(--)} {(file)}) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(LH)M (B)L (B)H' span_id:475))} {(--parents)} {(F..M)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L J I H G' span_id:489))} {(F..M)} {(--full-history)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(LH)M (K)L (GJ)K (I)J (G)I (G)H (FB)G' span_id:503))} {(F..M)} {(--full-history)} {(--parents)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(LH)M (G)H (J)L (I)J (G)I (FB)G' span_id:519))} {(F..M)} {(--simplify-merges)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L K J I H G' span_id:533))} {(F..M)} {(--ancestry-path)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L J I H G' span_id:543))} {(F..M)} {(--ancestry-path)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(LH)M (K)L (GJ)K (I)J (G)I (G)H (FE)G' span_id:557))} {(F..M)} {(--ancestry-path)} {(--parents)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(LH)M (G)H (J)L (I)J (G)I (FE)G' span_id:573))} {(F..M)} {(--ancestry-path)} {(--simplify-merges)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L K G' span_id:589))} {(F..M)} {(--first-parent)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L G' span_id:599))} {(F..M)} {(--first-parent)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L K J I H G' span_id:620))} {(E..M)} {(--ancestry-path)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L J I H' span_id:630))} {(E..M)} {(--ancestry-path)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(LH)M (K)L (EJ)K (I)J (E)I (E)H' span_id:644))} {(E..M)} {(--ancestry-path)} {(--parents)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(LH)M (E)H (J)L (I)J (E)I' span_id:660))} {(E..M)} {(--ancestry-path)} {(--simplify-merges)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L K J I H' span_id:683))} {(G..M)}) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M H L K J I' span_id:691))} {(G..M)} {(--topo-order)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L H' span_id:701))} {(G..M)} {(--)} {(file)}) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(LH)M (G)L (G)H' span_id:713))} {(G..M)} {(--parents)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L J I H' span_id:727))} {(G..M)} {(--full-history)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L K J I H' span_id:741))} {(G..M)} {(--full-history)} {(--parents)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M H L J I' span_id:757))} {(G..M)} {(--simplify-merges)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L K J I H' span_id:771))} {(G..M)} {(--ancestry-path)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L J I H' span_id:781))} {(G..M)} {(--ancestry-path)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M L K J I H' span_id:795))} {(G..M)} {(--ancestry-path)} {(--parents)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'M H L J I' span_id:811))} {(G..M)} {(--ancestry-path)} {(--simplify-merges)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F D C' span_id:840))} {(B..F)}) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:F span_id:848))} {(B..F)} {(--)} {(file)}) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(B)F' span_id:860))} {(B..F)} {(--parents)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F D' span_id:874))} {(B..F)} {(--full-history)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(D)F (BA)D' span_id:888))} {(B..F)} {(--full-history)} {(--parents)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(B)F' span_id:904))} {(B..F)} {(--simplify-merges)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F D' span_id:918))} {(B..F)} {(--ancestry-path)}) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:F span_id:928))} {(B..F)} {(--ancestry-path)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:F span_id:942))} {(B..F)} {(--ancestry-path)} {(--parents)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:F span_id:958))} {(B..F)} {(--ancestry-path)} {(--simplify-merges)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F D' span_id:974))} {(B..F)} {(--first-parent)}) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:F span_id:984))} {(B..F)} {(--first-parent)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:F span_id:1002))} {(E)} {(F)} {(Id.Lit_Other '^') (B)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:F span_id:1022))} {(E...F)} {(--)} {(file)}) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F D B' span_id:1044))} {(C..F)}) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F B' span_id:1052))} {(C..F)} {(--)} {(file)}) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(B)F (A)B' span_id:1064))} {(C..F)} {(--parents)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F D B' span_id:1078))} {(C..F)} {(--full-history)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(D)F (BC)D (A)B' span_id:1092))} {(C..F)} {(--full-history)} {(--parents)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'(D)F (BC)D (A)B' span_id:1108))} {(C..F)} {(--simplify-merges)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F D' span_id:1122))} {(C..F)} {(--ancestry-path)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F D' span_id:1132))} {(C..F)} {(--ancestry-path)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F D' span_id:1146))} {(C..F)} {(--ancestry-path)} {(--parents)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F D' span_id:1162))} {(C..F)} {(--ancestry-path)} {(--simplify-merges)} {(--)} {(file)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F D B' span_id:1178))} {(C..F)} {(--first-parent)} ) (C {(check_result)} {(SQ (Token id:Id.Lit_Chars val:'F B' span_id:1188))} {(C..F)} {(--first-parent)} {(--)} {(file)} ) (C {(test_done)}) ] )