(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description spids:[4]) op: Equal rhs: {(SQ <'merge simplification'>)} spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (FuncDef name: note body: (BraceGroup children:[(C {(git)} {(tag)} {(DQ ($ VSub_Number '$1'))})] spids:[20]) spids: [15 19] ) (FuncDef name: unnote body: (BraceGroup children: [ (Pipeline children: [ (C {(git)} {(name-rev)} {(--tags)} {(--stdin)}) (C {(sed)} {(-e)} { (DQ ('s|') ($ VSub_Name '$_x40') (' (tags/') (Lit_Other '\\') ('([^)]*') (Lit_Other '\\') (')) |') (Lit_Other '\\') ('1 |g') ) } ) ] negated: F ) ] spids: [39] ) spids: [34 38] ) (C {(test_expect_success)} {(setup)} { (SQ <'\n'> <'\techo "Hi there" >file &&\n'> <'\techo "initial" >lost &&\n'> <'\tgit add file lost &&\n'> <'\ttest_tick && git commit -m "Initial file and lost" &&\n'> <'\tnote A &&\n'> <'\n'> <'\tgit branch other-branch &&\n'> <'\n'> <'\techo "Hello" >file &&\n'> <'\techo "second" >lost &&\n'> <'\tgit add file lost &&\n'> <'\ttest_tick && git commit -m "Modified file and lost" &&\n'> <'\tnote B &&\n'> <'\n'> <'\tgit checkout other-branch &&\n'> <'\n'> <'\techo "Hello" >file &&\n'> <'\t>lost &&\n'> <'\tgit add file lost &&\n'> <'\ttest_tick && git commit -m "Modified the file identically" &&\n'> <'\tnote C &&\n'> <'\n'> <'\techo "This is a stupid example" >another-file &&\n'> <'\tgit add another-file &&\n'> <'\ttest_tick && git commit -m "Add another file" &&\n'> <'\tnote D &&\n'> <'\n'> <'\ttest_tick &&\n'> <'\ttest_must_fail git merge -m "merge" master &&\n'> <'\t>lost && git commit -a -m "merge" &&\n'> <'\tnote E &&\n'> <'\n'> <'\techo "Yet another" >elif &&\n'> <'\tgit add elif &&\n'> <'\ttest_tick && git commit -m "Irrelevant change" &&\n'> <'\tnote F &&\n'> <'\n'> <'\tgit checkout master &&\n'> <'\techo "Yet another" >elif &&\n'> <'\tgit add elif &&\n'> <'\ttest_tick && git commit -m "Another irrelevant change" &&\n'> <'\tnote G &&\n'> <'\n'> <'\ttest_tick && git merge -m "merge" other-branch &&\n'> <'\tnote H &&\n'> <'\n'> <'\techo "Final change" >file &&\n'> <'\ttest_tick && git commit -a -m "Final change" &&\n'> <'\tnote I &&\n'> <'\n'> <'\tgit symbolic-ref HEAD refs/heads/unrelated &&\n'> <'\tgit rm -f "*" &&\n'> <'\techo "Unrelated branch" >side &&\n'> <'\tgit add side &&\n'> <'\ttest_tick && git commit -m "Side root" &&\n'> <'\tnote J &&\n'> <'\n'> <'\tgit checkout master &&\n'> <'\ttest_tick && git merge --allow-unrelated-histories -m "Coolest" unrelated &&\n'> <'\tnote K &&\n'> <'\n'> <'\techo "Immaterial" >elif &&\n'> <'\tgit add elif &&\n'> <'\ttest_tick && git commit -m "Last" &&\n'> <'\tnote L\n'> ) } ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:FMT spids:[145]) op: Equal rhs: {(SQ <'tformat:%P \t%H | %s'>)} spids: [145] ) ] spids: [145] ) (FuncDef name: check_outcome body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:outcome spids:[159]) op: Equal rhs: {($ VSub_Number '$1')} spids: [159] ) ] spids: [159] ) (C {(shift)}) (AndOr ops: [Op_DAmp Op_DAmp Op_DAmp] children: [ (ForEach iter_name: c iter_words: [{($ VSub_Number '$1')}] do_arg_iter: F body: (DoGroup children:[(C {(echo)} {(DQ ($ VSub_Name '$c'))})] spids:[175 185]) redirects: [(Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(expect)})] spids: [171 16777215] ) (C {(shift)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:param spids:[198]) op: Equal rhs: {(DQ ($ VSub_Star '$*'))} spids: [198] ) ] spids: [198] ) (C {(test_expect_) ($ VSub_Name '$outcome')} {(DQ ('log ') ($ VSub_Name '$param'))} { (SQ <'\n'> <'\t\tgit log --pretty="$FMT" --parents $param |\n'> <'\t\tunnote >actual &&\n'> <'\t\tsed -e "s/^.*\t\\([^ ]*\\) .*/\\1/" >check <actual &&\n'> <'\t\ttest_cmp expect check\n'> <'\t'> ) } ) ] ) ] spids: [156] ) spids: [151 155] ) (FuncDef name: check_result body: (BraceGroup children: [(C {(check_outcome)} {(success)} {(DQ ($ VSub_At '$@'))})] spids: [231] ) spids: [226 230] ) (C {(check_result)} {(SQ <'L K J I H G F E D C B A'>)} {(--full-history)}) (C {(check_result)} {(SQ <'K I H E C B A'>)} {(--full-history)} {(--)} {(file)}) (C {(check_result)} {(SQ <'K I H E C B A'>)} {(--full-history)} {(--topo-order)} {(--)} {(file)}) (C {(check_result)} {(SQ <'K I H E C B A'>)} {(--full-history)} {(--date-order)} {(--)} {(file)}) (C {(check_result)} {(SQ <'I E C B A'>)} {(--simplify-merges)} {(--)} {(file)}) (C {(check_result)} {(SQ <'I B A'>)} {(--)} {(file)}) (C {(check_result)} {(SQ <'I B A'>)} {(--topo-order)} {(--)} {(file)}) (C {(check_result)} {(SQ <H>)} {(--first-parent)} {(--)} {(another-file)}) (C {(check_result)} {(SQ <'E C B A'>)} {(--full-history)} {(E)} {(--)} {(lost)}) (C {(test_expect_success)} {(SQ <'full history simplification without parent'>)} { (SQ <'\n'> <'\tprintf "%s\\n" E C B A >expect &&\n'> <'\tgit log --pretty="$FMT" --full-history E -- lost |\n'> <'\tunnote >actual &&\n'> <'\tsed -e "s/^.*\t\\([^ ]*\\) .*/\\1/" >check <actual &&\n'> <'\ttest_cmp expect check\n'> ) } ) (C {(test_expect_success)} {(SQ <'--full-diff is not affected by --parents'>)} { (SQ <'\n'> <'\tgit log -p --pretty="%H" --full-diff -- file >expected &&\n'> <'\tgit log -p --pretty="%H" --full-diff --parents -- file >actual &&\n'> <'\ttest_cmp expected actual\n'> ) } ) (C {(test_done)}) ] )