(List (= scope= flags=0 words=[] bindings=[('USAGE', {[SQ ]] -l [] | [-a | -s | -u ] [-f | -d | -v] [-m ] []">]})]) (= scope= flags=0 words=[] bindings=[('SUBDIRECTORY_OK', {[SQ ]})]) (Com {[LIT_CHARS .]} {[LIT_CHARS git-sh-setup]}) (= scope= flags=0 words=[] bindings=[('message_given', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('annotate', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('signed', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('force', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('message', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('username', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('list', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('verify', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('LINES', {[LIT_CHARS 0]})]) (While (Com {[LIT_CHARS test]} {[VarSub #]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS 0]}) (Case to_match={[DQ [VarSub 1]]}, pat_word_list=[[{[LIT_CHARS -a]}], [{[LIT_CHARS -s]}], [{[LIT_CHARS -f]}], [{[LIT_CHARS -n]}], [{[LIT_CHARS -l]}], [{[LIT_CHARS -m]}], [{[LIT_CHARS -F]}], [{[LIT_CHARS -u]}], [{[LIT_CHARS -d]}], [{[LIT_CHARS -v]}], [{[LIT_CHARS -] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (List (= scope= flags=0 words=[] bindings=[('annotate', {[LIT_CHARS 1]})]) (Com {[LIT_CHARS shift]}) ) (List (= scope= flags=0 words=[] bindings=[('annotate', {[LIT_CHARS 1]})]) (= scope= flags=0 words=[] bindings=[('signed', {[LIT_CHARS 1]})]) (Com {[LIT_CHARS shift]}) ) (List (= scope= flags=0 words=[] bindings=[('force', {[LIT_CHARS 1]})]) (Com {[LIT_CHARS shift]}) ) (List (Case to_match={[DQ [VarSub #][LIT_CHARS ","][VarSub 2]]}, pat_word_list=[[{[LIT_CHARS 1] [LIT_COMMA ","] [LIT_OTHER "*"]}, {[LIT_OTHER "*"] [LIT_COMMA ","] [LIT_CHARS -] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (= scope= flags=0 words=[] bindings=[('LINES', {[LIT_CHARS 1]})]) (List (Com {[LIT_CHARS shift]}) (= scope= flags=0 words=[] bindings=[('LINES', {[ComSub (Com {[LIT_CHARS expr]} {[DQ [VarSub 1]]} {[LIT_OTHER ":"]} {[SQ ]})]})]) (AndOr OP_AND_IF (Com {[LIT_OTHER "["]} {[LIT_CHARS -z]} {[DQ [VarSub LINES]]} {[LIT_OTHER "]"]}) (= scope= flags=0 words=[] bindings=[('LINES', {[LIT_CHARS 1]})]) ) ) ) (Com {[LIT_CHARS shift]}) ) (List (= scope= flags=0 words=[] bindings=[('list', {[LIT_CHARS 1]})]) (Com {[LIT_CHARS shift]}) (Case to_match={[VarSub #]}, pat_word_list=[[{[LIT_CHARS 0]}], [{[LIT_OTHER "*"]}]] (= scope= flags=0 words=[] bindings=[('PATTERN', {[SQ ]})]) (List (= scope= flags=0 words=[] bindings=[('PATTERN', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]}) ) ) (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --symbolic]} {[LIT_CHARS --tags]}) (Com {[LIT_CHARS sort]}) (While (Com {[LIT_CHARS read]} {[LIT_CHARS TAG]}) (List (Case to_match={[DQ [VarSub TAG]]}, pat_word_list=[[{[LIT_OTHER "*"] [VarSub PATTERN] [LIT_OTHER "*"]}], [{[LIT_OTHER "*"]}]] (ElseTrue) (Com {[LIT_CHARS continue]}) ) (AndOr OP_AND_IF (Com {[LIT_OTHER "["]} {[DQ [VarSub LINES]]} {[LIT_CHARS -le]} {[LIT_CHARS 0]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS echo]} {[DQ [VarSub TAG]]}) (Com {[LIT_CHARS continue]}) ) ) (= scope= flags=0 words=[] bindings=[('OBJTYPE', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS cat-file]} {[LIT_CHARS -t]} {[DQ [VarSub TAG]]})]})]) (Case to_match={[VarSub OBJTYPE]}, pat_word_list=[[{[LIT_CHARS tag]}], [{[LIT_OTHER "*"]}]] (List (= scope= flags=0 words=[] bindings=[('ANNOTATION', {[ComSub (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS cat-file]} {[LIT_CHARS tag]} {[DQ [VarSub TAG]]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[SQ ]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -n]} {[LIT_CHARS -e]} {[DQ [LIT_CHARS "\n"][LIT_CHARS "\t\t\t\t\t/^-----BEGIN PGP SIGNATURE-----"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "/q\n"][LIT_CHARS "\t\t\t\t\t2,"][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "s/^/ /\n"][LIT_CHARS "\t\t\t\t\tp\n"][LIT_CHARS "\t\t\t\t\t"][VarSub LINES][LIT_CHARS "q\n"][LIT_CHARS "\t\t\t\t"]]}) )]})]) (Com {[LIT_CHARS printf]} {[DQ [LIT_CHARS "%-15s %s"][\ LIT_ESCAPED_CHAR "\\n"]]} {[DQ [VarSub TAG]]} {[DQ [VarSub ANNOTATION]]}) ) (Com {[LIT_CHARS echo]} {[DQ [VarSub TAG]]}) ) ) ) ) ) (List (= scope= flags=0 words=[] bindings=[('annotate', {[LIT_CHARS 1]})]) (Com {[LIT_CHARS shift]}) (= scope= flags=0 words=[] bindings=[('message', {[DQ [VarSub 1]]})]) (If (Com {[LIT_CHARS test]} {[DQ [VarSub #]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS 0]]}) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "error: option -m needs an argument"]]}) (ElseTrue) (List (= scope= flags=0 words=[] bindings=[('message', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('message_given', {[LIT_CHARS 1]})]) (Com {[LIT_CHARS shift]}) ) ) ) (List (= scope= flags=0 words=[] bindings=[('annotate', {[LIT_CHARS 1]})]) (Com {[LIT_CHARS shift]}) (If (Com {[LIT_CHARS test]} {[DQ [VarSub #]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS 0]]}) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "error: option -F needs an argument"]]}) (ElseTrue) (List (= scope= flags=0 words=[] bindings=[('message', {[DQ [ComSub (Com {[LIT_CHARS cat]} {[DQ [VarSub 1]]})]]})]) (= scope= flags=0 words=[] bindings=[('message_given', {[LIT_CHARS 1]})]) (Com {[LIT_CHARS shift]}) ) ) ) (List (= scope= flags=0 words=[] bindings=[('annotate', {[LIT_CHARS 1]})]) (= scope= flags=0 words=[] bindings=[('signed', {[LIT_CHARS 1]})]) (Com {[LIT_CHARS shift]}) (If (Com {[LIT_CHARS test]} {[DQ [VarSub #]]} {[LIT_OTHER "="]} {[DQ [LIT_CHARS 0]]}) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "error: option -u needs an argument"]]}) (ElseTrue) (List (= scope= flags=0 words=[] bindings=[('username', {[DQ [VarSub 1]]})]) (Com {[LIT_CHARS shift]}) ) ) ) (List (Com {[LIT_CHARS shift]}) (= scope= flags=0 words=[] bindings=[('had_error', {[LIT_CHARS 0]})]) (For tag do_arg_iter) (List (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('cur', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS show-ref]} {[LIT_CHARS --verify]} {[LIT_CHARS --hash]} {[LIT_CHARS --]} {[DQ [LIT_CHARS refs/tags/][VarSub tag]]})]})]) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Seriously, what tag are you talking about?"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (= scope= flags=0 words=[] bindings=[('had_error', {[LIT_CHARS 1]})]) (Com {[LIT_CHARS continue]}) ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS git]} {[LIT_CHARS update-ref]} {[LIT_CHARS -m]} {[SQ ]} {[LIT_CHARS -d]} {[DQ [LIT_CHARS refs/tags/][VarSub tag]]} {[DQ [VarSub cur]]}) (List (= scope= flags=0 words=[] bindings=[('had_error', {[LIT_CHARS 1]})]) (Com {[LIT_CHARS continue]}) ) ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Deleted tag "][VarSub tag][LIT_CHARS .]]}) ) ) (Com {[LIT_CHARS exit]} {[VarSub had_error]}) ) (List (Com {[LIT_CHARS shift]}) (= scope= flags=0 words=[] bindings=[('tag_name', {[DQ [VarSub 1]]})]) (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('tag', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS show-ref]} {[LIT_CHARS --verify]} {[LIT_CHARS --hash]} {[LIT_CHARS --]} {[DQ [LIT_CHARS refs/tags/][VarSub tag_name]]})]})]) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "Seriously, what tag are you talking about?"]]}) ) (Com {[LIT_CHARS git-verify-tag]} {[LIT_CHARS -v]} {[DQ [VarSub tag]]}) (Com {[LIT_CHARS exit]} {[VarSub ?]}) ) (Com {[LIT_CHARS usage]}) (Com {[LIT_CHARS break]}) ) ) (AndOr OP_AND_IF (Com {[LIT_OTHER "["]} {[LIT_CHARS -n]} {[DQ [VarSub list]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]}) ) (= scope= flags=0 words=[] bindings=[('name', {[DQ [VarSub 1]]})]) (AndOr OP_OR_IF (Com {[LIT_OTHER "["]} {[DQ [VarSub name]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS usage]}) ) (= scope= flags=0 words=[] bindings=[('prev', {[LIT_CHARS 0000000000000000000000000000000000000000]})]) (If (Com {[LIT_CHARS git]} {[LIT_CHARS show-ref]} {[LIT_CHARS --verify]} {[LIT_CHARS --quiet]} {[LIT_CHARS --]} {[DQ [LIT_CHARS refs/tags/][VarSub name]]}) (List (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub force]]}) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "tag '"][VarSub name][LIT_CHARS "' already exists"]]}) ) (= scope= flags=0 words=[] bindings=[('prev', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[DQ [LIT_CHARS refs/tags/][VarSub name]]})]})]) ) ) (Com {[LIT_CHARS shift]}) (AndOr OP_OR_IF (Com {[LIT_CHARS git]} {[LIT_CHARS check-ref-format]} {[DQ [LIT_CHARS tags/][VarSub name]]}) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "we do not like '"][VarSub name][LIT_CHARS "' as a tag name."]]}) ) (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('object', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS --verify]} {[LIT_CHARS --default]} {[LIT_CHARS HEAD]} {[DQ [VarSub @]]})]})]) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('type', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS cat-file]} {[LIT_CHARS -t]} {[VarSub object]})]})]) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('tagger', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS var]} {[LIT_CHARS GIT_COMMITTER_IDENT]})]})]) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -n]} {[DQ [VarSub username]]}) (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('username', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS config]} {[LIT_CHARS user.signingkey]})]})]) (= scope= flags=0 words=[] bindings=[('username', {[ComSub (Com {[LIT_CHARS expr]} {[DQ [LIT_CHARS z][VarSub tagger]]} {[LIT_OTHER ":"]} {[SQ \\)">]})]})]) ) ) (Com {[LIT_CHARS trap]} {[SQ ]} {[LIT_CHARS 0]}) (If (Com {[LIT_OTHER "["]} {[DQ [VarSub annotate]]} {[LIT_OTHER "]"]}) (List (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -z]} {[DQ [VarSub message_given]]} {[LIT_OTHER "]"]}) (List (Subshell (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "#"]]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "# Write a tag message"]]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "#"]]}) ) ) (AndOr OP_OR_IF (Com {[LIT_CHARS git_editor]} {[DQ [VarSub GIT_DIR]] [LIT_CHARS /TAG_EDITMSG]}) (Com {[LIT_CHARS exit]}) ) ) (ElseTrue) (Com {[LIT_CHARS printf]} {[SQ ]} {[DQ [VarSub message]]} < (FilenameRedirectNode filename={[DQ [VarSub GIT_DIR]] [LIT_CHARS /TAG_EDITMSG]} "> 1), > ) ) (Pipeline (Com {[LIT_CHARS grep]} {[LIT_CHARS -v]} {[SQ ]} < (FilenameRedirectNode filename={[DQ [VarSub GIT_DIR]] [LIT_CHARS /TAG_EDITMSG]} 0), > ) (Com {[LIT_CHARS git]} {[LIT_CHARS stripspace]} < (FilenameRedirectNode filename={[DQ [VarSub GIT_DIR]] [LIT_CHARS /TAG_FINALMSG]} "> 1), > ) ) (AndOr OP_OR_IF (Com {[LIT_OTHER "["]} {[LIT_CHARS -s]} {[DQ [VarSub GIT_DIR]] [LIT_CHARS /TAG_FINALMSG]} {[LIT_CHARS -o]} {[LIT_CHARS -n]} {[DQ [VarSub message_given]]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "No tag message?"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (Subshell (List (Com {[LIT_CHARS printf]} {[SQ ]} {[DQ [VarSub object]]} {[DQ [VarSub type]]} {[DQ [VarSub name]]} {[DQ [VarSub tagger]]}) (Com {[LIT_CHARS cat]} {[DQ [VarSub GIT_DIR]] [LIT_CHARS /TAG_FINALMSG]}) ) ) (Com {[LIT_CHARS rm]} {[LIT_CHARS -f]} {[DQ [VarSub GIT_DIR]] [LIT_CHARS /TAG_TMP.asc]} {[DQ [VarSub GIT_DIR]] [LIT_CHARS /TAG_FINALMSG]}) (If (Com {[LIT_OTHER "["]} {[DQ [VarSub signed]]} {[LIT_OTHER "]"]}) (AndOr OP_AND_IF (Com {[LIT_CHARS gpg]} {[LIT_CHARS -bsa]} {[LIT_CHARS -u]} {[DQ [VarSub username]]} {[DQ [VarSub GIT_DIR]] [LIT_CHARS /TAG_TMP]}) (AndOr OP_OR_IF (Com {[LIT_CHARS cat]} {[DQ [VarSub GIT_DIR]] [LIT_CHARS /TAG_TMP.asc]} < (FilenameRedirectNode filename={[DQ [VarSub GIT_DIR]] [LIT_CHARS /TAG_TMP]} >"> 1), > ) (Com {[LIT_CHARS die]} {[DQ [LIT_CHARS "failed to sign the tag with GPG."]]}) ) ) ) (= scope= flags=0 words=[] bindings=[('object', {[ComSub (Com redirects=[(FilenameRedirectNode filename={[DQ [VarSub GIT_DIR]] [LIT_CHARS /TAG_TMP]} 0)]{[LIT_CHARS git-mktag]})]})]) ) ) (Com {[LIT_CHARS git]} {[LIT_CHARS update-ref]} {[DQ [LIT_CHARS refs/tags/][VarSub name]]} {[DQ [VarSub object]]} {[DQ [VarSub prev]]}) )