(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:USAGE) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'<tag>' span_id:6))} spids: [4] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:SUBDIRECTORY_OK) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:Yes span_id:11))} spids: [9] ) ] ) (C {(.)} {(git-sh-setup)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:verbose) op: assign_op.Equal rhs: (word.Empty) spids: [19] ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:21) cond: [(C {(test)} {($ Id.VSub_Pound '$#')} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(0)})] body: (command.DoGroup children: [ (command.Case to_match: {(DQ ($ Id.VSub_Number '$1'))} arms: [ (case_arm pat_list: [ {(-v)} {(--v)} {(--ve)} {(--ver)} {(--verb)} {(--verbo)} {(--verbos)} {(--verbose)} ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:verbose) op: assign_op.Equal rhs: {(t)} spids: [62] ) ] ) ] spids: [44 59 65 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Break val:break span_id:72) ) ] spids: [68 69 74 -1] ) ] ) (C {(shift)}) ] ) ) (command.If arms: [ (if_arm cond: [ (C {(Id.Lit_LBracket '[')} {(DQ ($ Id.VSub_Pound '$#'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(DQ (1))} {(Id.Lit_RBracket ']')} ) ] action: [(C {(usage)})] spids: [85 102] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:type) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:112) command_list: (command.CommandList children: [ (command.Simple words: [{(git)} {(cat-file)} {(-t)} {(DQ ($ Id.VSub_Number '$1'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:123) fd: 2 arg_word: {(/dev/null)} ) ] ) ] ) ) ) } spids: [110] ) ] ) (C {(die)} {(DQ ($ Id.VSub_Number '$1') (': no such object.'))}) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$type'))} {(Id.Lit_Equals '=')} {(tag)}) (C {(die)} { (DQ ($ Id.VSub_Number '$1') (': cannot verify a non-tag object of type ') ($ Id.VSub_DollarName '$type') (.) ) } ) ] ) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$verbose'))} arms: [ (case_arm pat_list: [{(t)}] action: [ (command.Pipeline children: [ (C {(git)} {(cat-file)} {(-p)} {(DQ ($ Id.VSub_Number '$1'))}) (C {(sed)} {(-n)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'/^-----BEGIN PGP SIGNATURE-----/q' span_id:194))} {(-e)} {(p)} ) ] negated: F ) ] spids: [170 171 202 -1] ) ] ) (C {(trap)} {(SQ (Token id:Id.Lit_Chars val:'rm -f "$GIT_DIR/.tmp-vtag"' span_id:210))} {(0)}) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [{(git)} {(cat-file)} {(tag)} {(DQ ($ Id.VSub_Number '$1'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:226) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$GIT_DIR') (/.tmp-vtag))} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:234) arg_word: {(1)} ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Pipeline children: [ (command.Simple words: [ {(sed)} {(-n)} {(-e)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:245) (Token id: Id.Lit_Chars val: '\t/^-----BEGIN PGP SIGNATURE-----$/q\n' span_id: 246 ) (Token id:Id.Lit_Chars val:'\tp\n' span_id:247) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:250) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$GIT_DIR') (/.tmp-vtag))} ) ] ) (C {(gpg)} {(--verify)} {(DQ ($ Id.VSub_DollarName '$GIT_DIR') (/.tmp-vtag))} {(-)}) ] negated: F ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:271) arg_word: {(1)} ) ] ) (C {(rm)} {(-f)} {(DQ ($ Id.VSub_DollarName '$GIT_DIR') (/.tmp-vtag))}) ] )