(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:'test describe\n' span_id:6) (Token id:Id.Lit_Chars val:'\n' span_id:7) (Token id:Id.Lit_Chars val:' B\n' span_id:8) (Token id: Id.Lit_Chars val: ' .--------------o----o----o----x\n' span_id: 9 ) (Token id:Id.Lit_Chars val:' / / /\n' span_id:10) (Token id: Id.Lit_Chars val: ' o----o----o----o----o----. /\n' span_id: 11 ) (Token id:Id.Lit_Chars val:' \\ A c /\n' span_id:12) (Token id: Id.Lit_Chars val: ' .------------o---o---o\n' span_id: 13 ) (Token id:Id.Lit_Chars val:' D,R e\n' span_id:14) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: check_describe body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:expect) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [30] ) ] ) (C {(shift)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:R) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:40) command_list: (command.CommandList children: [ (command.Simple words: [{(git)} {(describe)} {(DQ ($ Id.VSub_At '$@'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:49) fd: 2 arg_word: {(err.actual)} ) ] ) ] ) ) } spids: [39] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:S) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [54] ) ] ) (command.Simple words: [{(cat)} {(err.actual)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:62) fd: -1 arg_word: {(3)} ) ] ) (C {(test_expect_success)} {(DQ ('describe ') ($ Id.VSub_Star '$*'))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:74) (Token id:Id.Lit_Chars val:'\ttest $S = 0 &&\n' span_id:75) (Token id:Id.Lit_Chars val:'\tcase "$R" in\n' span_id:76) (Token id: Id.Lit_Chars val: '\t$expect)\techo happy ;;\n' span_id: 77 ) (Token id:Id.Lit_Chars val:'\t*)\techo "Oops - $R is not $expect";\n' span_id:78) (Token id:Id.Lit_Chars val:'\t\tfalse ;;\n' span_id:79) (Token id:Id.Lit_Chars val:'\tesac\n' span_id:80) (Token id:Id.Lit_Chars val:'\t' span_id:81) ) } ) ] ) ) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:92) (Token id:Id.Lit_Chars val:'\n' span_id:93) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:94) (Token id: Id.Lit_Chars val: '\techo one >file && git add file && git commit -m initial &&\n' span_id: 95 ) (Token id:Id.Lit_Chars val:'\tone=$(git rev-parse HEAD) &&\n' span_id:96) (Token id:Id.Lit_Chars val:'\n' span_id:97) (Token id:Id.Lit_Chars val:'\tgit describe --always HEAD &&\n' span_id:98) (Token id:Id.Lit_Chars val:'\n' span_id:99) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:100) (Token id: Id.Lit_Chars val: '\techo two >file && git add file && git commit -m second &&\n' span_id: 101 ) (Token id:Id.Lit_Chars val:'\ttwo=$(git rev-parse HEAD) &&\n' span_id:102) (Token id:Id.Lit_Chars val:'\n' span_id:103) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:104) (Token id: Id.Lit_Chars val: '\techo three >file && git add file && git commit -m third &&\n' span_id: 105 ) (Token id:Id.Lit_Chars val:'\n' span_id:106) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:107) (Token id:Id.Lit_Chars val:'\techo A >file && git add file && git commit -m A &&\n' span_id:108) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:109) (Token id:Id.Lit_Chars val:'\tgit tag -a -m A A &&\n' span_id:110) (Token id:Id.Lit_Chars val:'\n' span_id:111) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:112) (Token id: Id.Lit_Chars val: '\techo c >file && git add file && git commit -m c &&\n' span_id: 113 ) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:114) (Token id:Id.Lit_Chars val:'\tgit tag c &&\n' span_id:115) (Token id:Id.Lit_Chars val:'\n' span_id:116) (Token id:Id.Lit_Chars val:'\tgit reset --hard $two &&\n' span_id:117) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:118) (Token id: Id.Lit_Chars val: '\techo B >side && git add side && git commit -m B &&\n' span_id: 119 ) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:120) (Token id:Id.Lit_Chars val:'\tgit tag -a -m B B &&\n' span_id:121) (Token id:Id.Lit_Chars val:'\n' span_id:122) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:123) (Token id:Id.Lit_Chars val:'\tgit merge -m Merged c &&\n' span_id:124) (Token id:Id.Lit_Chars val:'\tmerged=$(git rev-parse HEAD) &&\n' span_id:125) (Token id:Id.Lit_Chars val:'\n' span_id:126) (Token id:Id.Lit_Chars val:'\tgit reset --hard $two &&\n' span_id:127) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:128) (Token id: Id.Lit_Chars val: '\techo D >another && git add another && git commit -m D &&\n' span_id: 129 ) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:130) (Token id:Id.Lit_Chars val:'\tgit tag -a -m D D &&\n' span_id:131) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:132) (Token id:Id.Lit_Chars val:'\tgit tag -a -m R R &&\n' span_id:133) (Token id:Id.Lit_Chars val:'\n' span_id:134) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:135) (Token id:Id.Lit_Chars val:'\techo DD >another && git commit -a -m another &&\n' span_id:136) (Token id:Id.Lit_Chars val:'\n' span_id:137) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:138) (Token id:Id.Lit_Chars val:'\tgit tag e &&\n' span_id:139) (Token id:Id.Lit_Chars val:'\n' span_id:140) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:141) (Token id:Id.Lit_Chars val:'\techo DDD >another && git commit -a -m "yet another" &&\n' span_id:142) (Token id:Id.Lit_Chars val:'\n' span_id:143) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:144) (Token id:Id.Lit_Chars val:'\tgit merge -m Merged $merged &&\n' span_id:145) (Token id:Id.Lit_Chars val:'\n' span_id:146) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:147) (Token id:Id.Lit_Chars val:'\techo X >file && echo X >side && git add file side &&\n' span_id:148) (Token id:Id.Lit_Chars val:'\tgit commit -m x\n' span_id:149) (Token id:Id.Lit_Chars val:'\n' span_id:150) ) } ) (C {(check_describe)} {(A-) (Id.Lit_Star '*')} {(HEAD)}) (C {(check_describe)} {(A-) (Id.Lit_Star '*')} {(HEAD) (Id.Lit_Other '^')}) (C {(check_describe)} {(R-) (Id.Lit_Star '*')} {(HEAD) (Id.Lit_Other '^') (Id.Lit_Other '^')}) (C {(check_describe)} {(A-) (Id.Lit_Star '*')} {(HEAD) (Id.Lit_Other '^') (Id.Lit_Other '^') (2)}) (C {(check_describe)} {(B)} {(HEAD) (Id.Lit_Other '^') (Id.Lit_Other '^') (2) (Id.Lit_Other '^')}) (C {(check_describe)} {(R-) (Id.Lit_Star '*')} {(HEAD) (Id.Lit_Other '^') (Id.Lit_Other '^') (Id.Lit_Other '^')} ) (C {(check_describe)} {(c-) (Id.Lit_Star '*')} {(--tags)} {(HEAD)}) (C {(check_describe)} {(c-) (Id.Lit_Star '*')} {(--tags)} {(HEAD) (Id.Lit_Other '^')}) (C {(check_describe)} {(e-) (Id.Lit_Star '*')} {(--tags)} {(HEAD) (Id.Lit_Other '^') (Id.Lit_Other '^')} ) (C {(check_describe)} {(c-) (Id.Lit_Star '*')} {(--tags)} {(HEAD) (Id.Lit_Other '^') (Id.Lit_Other '^') (2)} ) (C {(check_describe)} {(B)} {(--tags)} {(HEAD) (Id.Lit_Other '^') (Id.Lit_Other '^') (2) (Id.Lit_Other '^')} ) (C {(check_describe)} {(e)} {(--tags)} {(HEAD) (Id.Lit_Other '^') (Id.Lit_Other '^') (Id.Lit_Other '^')} ) (C {(check_describe)} {(heads/master)} {(--all)} {(HEAD)}) (C {(check_describe)} {(tags/c-) (Id.Lit_Star '*')} {(--all)} {(HEAD) (Id.Lit_Other '^')}) (C {(check_describe)} {(tags/e)} {(--all)} {(HEAD) (Id.Lit_Other '^') (Id.Lit_Other '^') (Id.Lit_Other '^')} ) (C {(check_describe)} {(B-0-) (Id.Lit_Star '*')} {(--long)} {(HEAD) (Id.Lit_Other '^') (Id.Lit_Other '^') (2) (Id.Lit_Other '^')} ) (C {(check_describe)} {(A-3-) (Id.Lit_Star '*')} {(--long)} {(HEAD) (Id.Lit_Other '^') (Id.Lit_Other '^') (2)} ) (C {(check_describe)} {(c-7-) (Id.Lit_Star '*')} {(--tags)}) (C {(check_describe)} {(e-3-) (Id.Lit_Star '*')} {(--first-parent)} {(--tags)}) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'describe --contains defaults to HEAD without commit-ish' span_id: 351 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:355) (Token id:Id.Lit_Chars val:'\techo "A^0" >expect &&\n' span_id:356) (Token id:Id.Lit_Chars val:'\tgit checkout A &&\n' span_id:357) (Token id: Id.Lit_Chars val: '\ttest_when_finished "git checkout -" &&\n' span_id: 358 ) (Token id:Id.Lit_Chars val:'\tgit describe --contains >actual &&\n' span_id:359) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:360) ) } ) (command.Simple words: [{(Id.Lit_Other ':')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:366) fd: -1 arg_word: {(err.expect)} ) ] ) (C {(check_describe)} {(A)} {(--all)} {(A) (Id.Lit_Other '^') (0)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'no warning was displayed for A' span_id:382))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:386) (Token id:Id.Lit_Chars val:'\ttest_cmp err.expect err.actual\n' span_id:387) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rename tag A to Q locally' span_id:394))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:398) (Token id: Id.Lit_Chars val: '\tmv .git/refs/tags/A .git/refs/tags/Q\n' span_id: 399 ) ) } ) (command.Simple words: [{(cat)} {(-)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:406) fd: -1 arg_word: {(err.expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:409) fd: -1 here_begin: {(EOF)} here_end_span_id: 414 stdin_parts: [("warning: tag 'A' is really 'Q' here\n")] ) ] ) (C {(check_describe)} {(A-) (Id.Lit_Star '*')} {(HEAD)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'warning was displayed for Q' span_id:425))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:429) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp err.expect err.actual\n' span_id:430) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'rename tag Q back to A' span_id:436))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:440) (Token id: Id.Lit_Chars val: '\tmv .git/refs/tags/Q .git/refs/tags/A\n' span_id: 441 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'pack tag refs' span_id:448))} {(SQ (Token id:Id.Lit_Chars val:'git pack-refs' span_id:452))} ) (C {(check_describe)} {(A-) (Id.Lit_Star '*')} {(HEAD)}) (C {(check_describe)} {(DQ ('A-*[0-9a-f]'))} {(--dirty)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'set-up dirty work tree' span_id:475))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:479) (Token id:Id.Lit_Chars val:'\techo >>file\n' span_id:480) ) } ) (C {(check_describe)} {(DQ ('A-*[0-9a-f]-dirty'))} {(--dirty)}) (C {(check_describe)} {(DQ ('A-*[0-9a-f].mod'))} {(--dirty) (Id.Lit_Equals '=') (.mod)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'describe --dirty HEAD' span_id:507))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:511) (Token id: Id.Lit_Chars val: '\ttest_must_fail git describe --dirty HEAD\n' span_id: 512 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'set-up matching pattern tests' span_id:519))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:523) (Token id: Id.Lit_Chars val: '\tgit tag -a -m test-annotated test-annotated &&\n' span_id: 524 ) (Token id:Id.Lit_Chars val:'\techo >>file &&\n' span_id:525) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:526) (Token id:Id.Lit_Chars val:'\tgit commit -a -m "one more" &&\n' span_id:527) (Token id:Id.Lit_Chars val:'\tgit tag test1-lightweight &&\n' span_id:528) (Token id:Id.Lit_Chars val:'\techo >>file &&\n' span_id:529) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:530) (Token id:Id.Lit_Chars val:'\tgit commit -a -m "yet another" &&\n' span_id:531) (Token id:Id.Lit_Chars val:'\tgit tag test2-lightweight &&\n' span_id:532) (Token id:Id.Lit_Chars val:'\techo >>file &&\n' span_id:533) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:534) (Token id:Id.Lit_Chars val:'\tgit commit -a -m "even more"\n' span_id:535) (Token id:Id.Lit_Chars val:'\n' span_id:536) ) } ) (C {(check_describe)} {(DQ ('test-annotated-*'))} {(--match) (Id.Lit_Equals '=') (DQ ('test-*'))}) (C {(check_describe)} {(DQ ('test1-lightweight-*'))} {(--tags)} {(--match) (Id.Lit_Equals '=') (DQ ('test1-*'))} ) (C {(check_describe)} {(DQ ('test2-lightweight-*'))} {(--tags)} {(--match) (Id.Lit_Equals '=') (DQ ('test2-*'))} ) (C {(check_describe)} {(DQ ('test2-lightweight-*'))} {(--long)} {(--tags)} {(--match) (Id.Lit_Equals '=') (DQ ('test2-*'))} {(HEAD) (Id.Lit_Other '^')} ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'name-rev with exact tags' span_id:606))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:610) (Token id:Id.Lit_Chars val:'\techo A >expect &&\n' span_id:611) (Token id:Id.Lit_Chars val:'\ttag_object=$(git rev-parse refs/tags/A) &&\n' span_id:612) (Token id: Id.Lit_Chars val: '\tgit name-rev --tags --name-only $tag_object >actual &&\n' span_id: 613 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:614) (Token id:Id.Lit_Chars val:'\n' span_id:615) (Token id:Id.Lit_Chars val:'\techo "A^0" >expect &&\n' span_id:616) (Token id: Id.Lit_Chars val: '\ttagged_commit=$(git rev-parse "refs/tags/A^0") &&\n' span_id: 617 ) (Token id: Id.Lit_Chars val: '\tgit name-rev --tags --name-only $tagged_commit >actual &&\n' span_id: 618 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:619) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'describe --contains with the exact tags' span_id:626))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:630) (Token id:Id.Lit_Chars val:'\techo "A^0" >expect &&\n' span_id:631) (Token id:Id.Lit_Chars val:'\ttag_object=$(git rev-parse refs/tags/A) &&\n' span_id:632) (Token id: Id.Lit_Chars val: '\tgit describe --contains $tag_object >actual &&\n' span_id: 633 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual &&\n' span_id:634) (Token id:Id.Lit_Chars val:'\n' span_id:635) (Token id:Id.Lit_Chars val:'\techo "A^0" >expect &&\n' span_id:636) (Token id: Id.Lit_Chars val: '\ttagged_commit=$(git rev-parse "refs/tags/A^0") &&\n' span_id: 637 ) (Token id:Id.Lit_Chars val:'\tgit describe --contains $tagged_commit >actual &&\n' span_id:638) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:639) ) } ) (C {(test_done)}) ] )