(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: { (SQ <'test describe\n'> <'\n'> <' B\n'> <' .--------------o----o----o----x\n'> <' / / /\n'> <' o----o----o----o----o----. /\n'> <' \\ A c /\n'> <' .------------o---o---o\n'> <' D,R e\n'> ) } spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (FuncDef name: check_describe body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:expect) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [30] ) ] spids: [30] ) (C {(shift)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:R) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (SimpleCommand words: [{(git)} {(describe)} {(DQ ($ VSub_At '$@'))}] redirects: [ (Redir op_id: Redir_Great fd: 2 arg_word: {(err.actual)} spids: [49] ) ] ) ] ) left_token: <Left_CommandSub '$('> spids: [40 51] ) } spids: [39] ) ] spids: [39] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:S) op: Equal rhs: {($ VSub_QMark '$?')} spids: [54] ) ] spids: [54] ) (SimpleCommand words: [{(cat)} {(err.actual)}] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(3)} spids:[62])] ) (C {(test_expect_success)} {(DQ ('describe ') ($ VSub_Star '$*'))} { (SQ <'\n'> <'\ttest $S = 0 &&\n'> <'\tcase "$R" in\n'> <'\t$expect)\techo happy ;;\n'> <'\t*)\techo "Oops - $R is not $expect";\n'> <'\t\tfalse ;;\n'> <'\tesac\n'> <'\t'> ) } ) ] spids: [27] ) spids: [22 26] ) (C {(test_expect_success)} {(setup)} { (SQ <'\n'> <'\n'> <'\ttest_tick &&\n'> <'\techo one >file && git add file && git commit -m initial &&\n'> <'\tone=$(git rev-parse HEAD) &&\n'> <'\n'> <'\tgit describe --always HEAD &&\n'> <'\n'> <'\ttest_tick &&\n'> <'\techo two >file && git add file && git commit -m second &&\n'> <'\ttwo=$(git rev-parse HEAD) &&\n'> <'\n'> <'\ttest_tick &&\n'> <'\techo three >file && git add file && git commit -m third &&\n'> <'\n'> <'\ttest_tick &&\n'> <'\techo A >file && git add file && git commit -m A &&\n'> <'\ttest_tick &&\n'> <'\tgit tag -a -m A A &&\n'> <'\n'> <'\ttest_tick &&\n'> <'\techo c >file && git add file && git commit -m c &&\n'> <'\ttest_tick &&\n'> <'\tgit tag c &&\n'> <'\n'> <'\tgit reset --hard $two &&\n'> <'\ttest_tick &&\n'> <'\techo B >side && git add side && git commit -m B &&\n'> <'\ttest_tick &&\n'> <'\tgit tag -a -m B B &&\n'> <'\n'> <'\ttest_tick &&\n'> <'\tgit merge -m Merged c &&\n'> <'\tmerged=$(git rev-parse HEAD) &&\n'> <'\n'> <'\tgit reset --hard $two &&\n'> <'\ttest_tick &&\n'> <'\techo D >another && git add another && git commit -m D &&\n'> <'\ttest_tick &&\n'> <'\tgit tag -a -m D D &&\n'> <'\ttest_tick &&\n'> <'\tgit tag -a -m R R &&\n'> <'\n'> <'\ttest_tick &&\n'> <'\techo DD >another && git commit -a -m another &&\n'> <'\n'> <'\ttest_tick &&\n'> <'\tgit tag e &&\n'> <'\n'> <'\ttest_tick &&\n'> <'\techo DDD >another && git commit -a -m "yet another" &&\n'> <'\n'> <'\ttest_tick &&\n'> <'\tgit merge -m Merged $merged &&\n'> <'\n'> <'\ttest_tick &&\n'> <'\techo X >file && echo X >side && git add file side &&\n'> <'\tgit commit -m x\n'> <'\n'> ) } ) (C {(check_describe)} {(A-) (Lit_Other '*')} {(HEAD)}) (C {(check_describe)} {(A-) (Lit_Other '*')} {(HEAD) (Lit_Other '^')}) (C {(check_describe)} {(R-) (Lit_Other '*')} {(HEAD) (Lit_Other '^') (Lit_Other '^')}) (C {(check_describe)} {(A-) (Lit_Other '*')} {(HEAD) (Lit_Other '^') (Lit_Other '^') (2)}) (C {(check_describe)} {(B)} {(HEAD) (Lit_Other '^') (Lit_Other '^') (2) (Lit_Other '^')}) (C {(check_describe)} {(R-) (Lit_Other '*')} {(HEAD) (Lit_Other '^') (Lit_Other '^') (Lit_Other '^')} ) (C {(check_describe)} {(c-) (Lit_Other '*')} {(--tags)} {(HEAD)}) (C {(check_describe)} {(c-) (Lit_Other '*')} {(--tags)} {(HEAD) (Lit_Other '^')}) (C {(check_describe)} {(e-) (Lit_Other '*')} {(--tags)} {(HEAD) (Lit_Other '^') (Lit_Other '^')}) (C {(check_describe)} {(c-) (Lit_Other '*')} {(--tags)} {(HEAD) (Lit_Other '^') (Lit_Other '^') (2)}) (C {(check_describe)} {(B)} {(--tags)} {(HEAD) (Lit_Other '^') (Lit_Other '^') (2) (Lit_Other '^')}) (C {(check_describe)} {(e)} {(--tags)} {(HEAD) (Lit_Other '^') (Lit_Other '^') (Lit_Other '^')}) (C {(check_describe)} {(heads/master)} {(--all)} {(HEAD)}) (C {(check_describe)} {(tags/c-) (Lit_Other '*')} {(--all)} {(HEAD) (Lit_Other '^')}) (C {(check_describe)} {(tags/e)} {(--all)} {(HEAD) (Lit_Other '^') (Lit_Other '^') (Lit_Other '^')}) (C {(check_describe)} {(B-0-) (Lit_Other '*')} {(--long)} {(HEAD) (Lit_Other '^') (Lit_Other '^') (2) (Lit_Other '^')} ) (C {(check_describe)} {(A-3-) (Lit_Other '*')} {(--long)} {(HEAD) (Lit_Other '^') (Lit_Other '^') (2)} ) (C {(check_describe)} {(c-7-) (Lit_Other '*')} {(--tags)}) (C {(check_describe)} {(e-3-) (Lit_Other '*')} {(--first-parent)} {(--tags)}) (C {(test_expect_success)} {(SQ <'describe --contains defaults to HEAD without commit-ish'>)} { (SQ <'\n'> <'\techo "A^0" >expect &&\n'> <'\tgit checkout A &&\n'> <'\ttest_when_finished "git checkout -" &&\n'> <'\tgit describe --contains >actual &&\n'> <'\ttest_cmp expect actual\n'> ) } ) (SimpleCommand words: [{(Lit_Other ':')}] redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(err.expect)} spids:[366])] ) (C {(check_describe)} {(A)} {(--all)} {(A) (Lit_Other '^') (0)}) (C {(test_expect_success)} {(SQ <'no warning was displayed for A'>)} {(SQ <'\n'> <'\ttest_cmp err.expect err.actual\n'>)} ) (C {(test_expect_success)} {(SQ <'rename tag A to Q locally'>)} {(SQ <'\n'> <'\tmv .git/refs/tags/A .git/refs/tags/Q\n'>)} ) (SimpleCommand words: [{(cat)} {(-)}] redirects: [ (Redir op_id:Redir_Great fd:-1 arg_word:{(err.expect)} spids:[406]) (HereDoc op_id: Redir_DLess fd: -1 body: {(DQ ("warning: tag 'A' is really 'Q' here\n"))} do_expansion: True here_end: EOF was_filled: True spids: [409] ) ] ) (C {(check_describe)} {(A-) (Lit_Other '*')} {(HEAD)}) (C {(test_expect_success)} {(SQ <'warning was displayed for Q'>)} {(SQ <'\n'> <'\ttest_i18ncmp err.expect err.actual\n'>)} ) (C {(test_expect_success)} {(SQ <'rename tag Q back to A'>)} {(SQ <'\n'> <'\tmv .git/refs/tags/Q .git/refs/tags/A\n'>)} ) (C {(test_expect_success)} {(SQ <'pack tag refs'>)} {(SQ <'git pack-refs'>)}) (C {(check_describe)} {(A-) (Lit_Other '*')} {(HEAD)}) (C {(check_describe)} {(DQ ('A-*[0-9a-f]'))} {(--dirty)}) (C {(test_expect_success)} {(SQ <'set-up dirty work tree'>)} {(SQ <'\n'> <'\techo >>file\n'>)}) (C {(check_describe)} {(DQ ('A-*[0-9a-f]-dirty'))} {(--dirty)}) (C {(check_describe)} {(DQ ('A-*[0-9a-f].mod'))} {(--dirty) (Lit_Other '=') (.mod)}) (C {(test_expect_success)} {(SQ <'describe --dirty HEAD'>)} {(SQ <'\n'> <'\ttest_must_fail git describe --dirty HEAD\n'>)} ) (C {(test_expect_success)} {(SQ <'set-up matching pattern tests'>)} { (SQ <'\n'> <'\tgit tag -a -m test-annotated test-annotated &&\n'> <'\techo >>file &&\n'> <'\ttest_tick &&\n'> <'\tgit commit -a -m "one more" &&\n'> <'\tgit tag test1-lightweight &&\n'> <'\techo >>file &&\n'> <'\ttest_tick &&\n'> <'\tgit commit -a -m "yet another" &&\n'> <'\tgit tag test2-lightweight &&\n'> <'\techo >>file &&\n'> <'\ttest_tick &&\n'> <'\tgit commit -a -m "even more"\n'> <'\n'> ) } ) (C {(check_describe)} {(DQ ('test-annotated-*'))} {(--match) (Lit_Other '=') (DQ ('test-*'))}) (C {(check_describe)} {(DQ ('test1-lightweight-*'))} {(--tags)} {(--match) (Lit_Other '=') (DQ ('test1-*'))} ) (C {(check_describe)} {(DQ ('test2-lightweight-*'))} {(--tags)} {(--match) (Lit_Other '=') (DQ ('test2-*'))} ) (C {(check_describe)} {(DQ ('test2-lightweight-*'))} {(--long)} {(--tags)} {(--match) (Lit_Other '=') (DQ ('test2-*'))} {(HEAD) (Lit_Other '^')} ) (C {(test_expect_success)} {(SQ <'name-rev with exact tags'>)} { (SQ <'\n'> <'\techo A >expect &&\n'> <'\ttag_object=$(git rev-parse refs/tags/A) &&\n'> <'\tgit name-rev --tags --name-only $tag_object >actual &&\n'> <'\ttest_cmp expect actual &&\n'> <'\n'> <'\techo "A^0" >expect &&\n'> <'\ttagged_commit=$(git rev-parse "refs/tags/A^0") &&\n'> <'\tgit name-rev --tags --name-only $tagged_commit >actual &&\n'> <'\ttest_cmp expect actual\n'> ) } ) (C {(test_expect_success)} {(SQ <'describe --contains with the exact tags'>)} { (SQ <'\n'> <'\techo "A^0" >expect &&\n'> <'\ttag_object=$(git rev-parse refs/tags/A) &&\n'> <'\tgit describe --contains $tag_object >actual &&\n'> <'\ttest_cmp expect actual &&\n'> <'\n'> <'\techo "A^0" >expect &&\n'> <'\ttagged_commit=$(git rev-parse "refs/tags/A^0") &&\n'> <'\tgit describe --contains $tagged_commit >actual &&\n'> <'\ttest_cmp expect actual\n'> ) } ) (C {(test_done)}) ] )