(List (= scope= flags=0 words=[] bindings=[('test_description', {[SQ ] [LIT_CHARS c1] [SQ ] [LIT_CHARS c1] [SQ ]})]) (Com {[LIT_CHARS .]} {[LIT_CHARS ./test-lib.sh]} ) (Com {[LIT_CHARS .]} {[DQ [VarSub TEST_DIRECTORY]] [LIT_CHARS /lib-gpg.sh]} ) (Com {[LIT_CHARS printf]} {[SQ ]} {[LIT_CHARS 1]} {[LIT_CHARS 2]} {[LIT_CHARS 3]} {[LIT_CHARS 4]} {[LIT_CHARS 5]} {[LIT_CHARS 6]} {[LIT_CHARS 7]} {[LIT_CHARS 8]} {[LIT_CHARS 9]} < (FilenameRedirectNode filename={[LIT_CHARS file]} "> 1), > ) (Com {[LIT_CHARS printf]} {[SQ ]} {[SQ ]} {[LIT_CHARS 2]} {[LIT_CHARS 3]} {[LIT_CHARS 4]} {[LIT_CHARS 5]} {[LIT_CHARS 6]} {[LIT_CHARS 7]} {[LIT_CHARS 8]} {[LIT_CHARS 9]} < (FilenameRedirectNode filename={[LIT_CHARS file.1]} "> 1), > ) (Com {[LIT_CHARS printf]} {[SQ ]} {[LIT_CHARS 1]} {[LIT_CHARS 2]} {[LIT_CHARS 3]} {[LIT_CHARS 4]} {[SQ ]} {[LIT_CHARS 6]} {[LIT_CHARS 7]} {[LIT_CHARS 8]} {[LIT_CHARS 9]} < (FilenameRedirectNode filename={[LIT_CHARS file.5]} "> 1), > ) (Com {[LIT_CHARS printf]} {[SQ ]} {[LIT_CHARS 1]} {[LIT_CHARS 2]} {[LIT_CHARS 3]} {[LIT_CHARS 4]} {[LIT_CHARS 5]} {[LIT_CHARS 6]} {[LIT_CHARS 7]} {[LIT_CHARS 8]} {[SQ ]} < (FilenameRedirectNode filename={[LIT_CHARS file.9]} "> 1), > ) (Com {[LIT_CHARS printf]} {[SQ ]} {[SQ ]} {[LIT_CHARS 2]} {[LIT_CHARS 3]} {[LIT_CHARS 4]} {[LIT_CHARS 5]} {[LIT_CHARS 6]} {[LIT_CHARS 7]} {[LIT_CHARS 8]} {[LIT_CHARS 9]} < (FilenameRedirectNode filename={[LIT_CHARS result.1]} "> 1), > ) (Com {[LIT_CHARS printf]} {[SQ ]} {[SQ ]} {[LIT_CHARS 2]} {[LIT_CHARS 3]} {[LIT_CHARS 4]} {[SQ ]} {[LIT_CHARS 6]} {[LIT_CHARS 7]} {[LIT_CHARS 8]} {[LIT_CHARS 9]} < (FilenameRedirectNode filename={[LIT_CHARS result.1-5]} "> 1), > ) (Com {[LIT_CHARS printf]} {[SQ ]} {[SQ ]} {[LIT_CHARS 2]} {[LIT_CHARS 3]} {[LIT_CHARS 4]} {[SQ ]} {[LIT_CHARS 6]} {[LIT_CHARS 7]} {[LIT_CHARS 8]} {[SQ ]} < (FilenameRedirectNode filename={[LIT_CHARS result.1-5-9]} "> 1), > ) (Com < (FilenameRedirectNode filename={[LIT_CHARS empty]} "> 1), > ) (FunctionDef create_merge_msgs [] (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Merge tag 'c2'"]]} < (FilenameRedirectNode filename={[LIT_CHARS msg.1-5]} "> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Merge tags 'c2' and 'c3'"]]} < (FilenameRedirectNode filename={[LIT_CHARS msg.1-5-9]} "> 1), > ) (AndOr OP_AND_IF (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Squashed commit of the following:"]]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS git]} {[LIT_CHARS log]} {[LIT_CHARS --no-merges]} {[LIT_OTHER "^"] [LIT_CHARS HEAD]} {[LIT_CHARS c1]} ) ) ) (AndOr OP_AND_IF (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Squashed commit of the following:"]]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS git]} {[LIT_CHARS log]} {[LIT_CHARS --no-merges]} {[LIT_OTHER "^"] [LIT_CHARS HEAD]} {[LIT_CHARS c2]} ) ) ) (AndOr OP_AND_IF (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Squashed commit of the following:"]]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} ) (Com {[LIT_CHARS git]} {[LIT_CHARS log]} {[LIT_CHARS --no-merges]} {[LIT_OTHER "^"] [LIT_CHARS HEAD]} {[LIT_CHARS c2]} {[LIT_CHARS c3]} ) ) ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} < (FilenameRedirectNode filename={[LIT_CHARS msg.nolog]} "> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "* tag 'c3':"]]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS " commit 3"]]} ) (Com {[LIT_CHARS echo]} ) ) ) ) ) ) ) ) ) ) (FunctionDef verify_merge [] (AndOr OP_AND_IF (Com {[LIT_CHARS test_cmp]} {[DQ [VarSub 2]]} {[DQ [VarSub 1]]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS update-index]} {[LIT_CHARS --refresh]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS diff]} {[LIT_CHARS --exit-code]} ) (If (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub 3]]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS show]} {[LIT_CHARS -s]} {[LIT_CHARS --pretty] [LIT_DBRACKET_LIKE "="] [LIT_CHARS format] [LIT_OTHER ":"] [LIT_OTHER "%"] [LIT_CHARS s]} {[LIT_CHARS HEAD]} < (FilenameRedirectNode filename={[LIT_CHARS msg.act]} "> 1), > ) (Com {[LIT_CHARS test_cmp]} {[DQ [VarSub 3]]} {[LIT_CHARS msg.act]} ) ) ) ) ) ) ) (FunctionDef verify_head [] (AndOr OP_AND_IF (Com {[LIT_CHARS echo]} {[DQ [VarSub 1]]} < (FilenameRedirectNode filename={[LIT_CHARS head.expected]} "> 1), > ) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS HEAD]} < (FilenameRedirectNode filename={[LIT_CHARS head.actual]} "> 1), > ) (Com {[LIT_CHARS test_cmp]} {[LIT_CHARS head.expected]} {[LIT_CHARS head.actual]} ) ) ) ) (FunctionDef verify_parents [] (AndOr OP_AND_IF (Com {[LIT_CHARS printf]} {[SQ ]} {[DQ [VarSub @]]} < (FilenameRedirectNode filename={[LIT_CHARS parents.expected]} "> 1), > ) (AndOr OP_AND_IF (Com < (FilenameRedirectNode filename={[LIT_CHARS parents.actual]} "> 1), > ) (AndOr OP_AND_IF (= scope= flags=0 words=[] bindings=[('i', {[LIT_CHARS 1]})]) (AndOr OP_AND_IF (While (Com {[LIT_CHARS test]} {[VarSub i]} {[LIT_CHARS -le]} {[VarSub #]} ) (AndOr OP_AND_IF (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS HEAD] [LIT_OTHER "^"] [VarSub i]} < (FilenameRedirectNode filename={[LIT_CHARS parents.actual]} >"> 1), > ) (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('i', {[ComSub (Com {[LIT_CHARS expr]} {[VarSub i]} {[LIT_OTHER "+"]} {[LIT_CHARS 1]})]})]) (Com {[LIT_CHARS return]} {[LIT_CHARS 1]} ) ) ) ) (AndOr OP_AND_IF (Com {[LIT_CHARS test_must_fail]} {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[DQ [LIT_CHARS "HEAD^"][VarSub i]]} ) (Com {[LIT_CHARS test_cmp]} {[LIT_CHARS parents.expected]} {[LIT_CHARS parents.actual]} ) ) ) ) ) ) ) (FunctionDef verify_mergeheads [] (AndOr OP_AND_IF (Com {[LIT_CHARS printf]} {[SQ ]} {[DQ [VarSub @]]} < (FilenameRedirectNode filename={[LIT_CHARS mergehead.expected]} "> 1), > ) (AndOr OP_AND_IF (While (Com {[LIT_CHARS read]} {[LIT_CHARS sha1]} {[LIT_CHARS rest]} ) (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[VarSub sha1]} ) ) (Com {[LIT_CHARS test_cmp]} {[LIT_CHARS mergehead.expected]} {[LIT_CHARS mergehead.actual]} ) ) ) ) (FunctionDef verify_no_mergehead [] (Pipeline! (Com {[LIT_CHARS test]} {[LIT_CHARS -e]} {[LIT_CHARS .git/MERGE_HEAD]} ) ) ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ .git/index &&\n"> usage\n"> ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ reflog.expected &&\n"> reflog.actual &&\n"> reflog.fuzzy &&\n"> ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ reflog.expected &&\n"> reflog.actual &&\n"> reflog.fuzzy &&\n"> ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ expect &&\n"> actual &&\n"> ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ expect &&\n"> actual &&\n"> ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ diffstat.txt &&\n"> ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ diffstat.txt &&\n"> ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ diffstat.txt &&\n"> ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ message &&\n"> ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ msg.act &&\n"> msg.act &&\n"> msg.act &&\n"> ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ file &&\n"> ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ out &&\n"> ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS expected.branch]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "Merge branch 'c5-branch' (early part)\n"]} 0), > ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS expected.tag]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "Merge commit 'c5~1'\n"]} 0), > ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ c4.c &&\n"> c5.c &&\n"> c6.c &&\n"> actual.branch &&\n"> actual.tag &&\n"> ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]} ) (Com {[LIT_CHARS test_debug]} {[SQ ]} ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS editor]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=False body_word={[LIT_CHARS "#!/bin/sh\n"] [LIT_CHARS "# Add a new message string that was not in the template\n"] [LIT_CHARS "(\n"] [LIT_CHARS "\techo \"Merge work done on the side branch c1\"\n"] [LIT_CHARS "\techo\n"] [LIT_CHARS "\tcat <\"$1\"\n"] [LIT_CHARS ") >\"$1.tmp\" && mv \"$1.tmp\" \"$1\"\n"] [LIT_CHARS "# strip comments and blank lines from end of message\n"] [LIT_CHARS "sed -e '/^#/d' < \"$1\" | sed -e :a -e '/^\\n*$/{$d;N;ba' -e '}' > expected\n"]} 0), > ) (Com {[LIT_CHARS chmod]} {[LIT_CHARS 755]} {[LIT_CHARS editor]} ) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ raw &&\n"> actual raw &&\n"> ]} ) (Com {[LIT_CHARS test_expect_success]} {[LIT_CHARS GPG]} {[SQ ]} {[SQ expect &&\n"> actual &&\n"> ]} ) (Com {[LIT_CHARS test_expect_success]} {[LIT_CHARS GPG]} {[SQ ]} {[SQ expect &&\n"> actual &&\n"> ]} ) (Com {[LIT_CHARS test_done]} ) )