(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)}) ] )