(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:'<start> <url> [<end>]' span_id:18))} spids: [16] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:LONG_USAGE) op: assign_op.Equal rhs: { (SQ (Token id: Id.Lit_Chars val: 'Summarizes the changes between two commits to the standard output,\n' span_id: 23 ) (Token id:Id.Lit_Chars val:'and includes the given URL in the generated summary.' span_id:24) ) } spids: [21] ) ] ) (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:29))} spids: [27] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OPTIONS_KEEPDASHDASH) op: assign_op.Equal rhs: (word.Empty) spids: [32] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OPTIONS_STUCKLONG) op: assign_op.Equal rhs: (word.Empty) spids: [34] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:OPTIONS_SPEC) op: assign_op.Equal rhs: { (SQ (Token id: Id.Lit_Chars val: 'git request-pull [options] start url [end]\n' span_id: 38 ) (Token id:Id.Lit_Chars val:'--\n' span_id:39) (Token id: Id.Lit_Chars val: 'p show patch text as well\n' span_id: 40 ) ) } spids: [36] ) ] ) (C {(.)} {(git-sh-setup)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GIT_PAGER) op: assign_op.Equal rhs: (word.Empty) spids: [49] ) ] ) (C {(export)} {(GIT_PAGER)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:patch) op: assign_op.Equal rhs: (word.Empty) spids: [56] ) ] ) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:58) cond: [ (command.Case to_match: {(DQ ($ Id.VSub_Pound '$#'))} arms: [ (case_arm pat_list: [{(0)}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Break val:break span_id:71) ) ] spids: [68 69 73 -1] ) ] ) ] body: (command.DoGroup children: [ (command.Case to_match: {(DQ ($ Id.VSub_Number '$1'))} arms: [ (case_arm pat_list: [{(-p)}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:patch) op: assign_op.Equal rhs: {(-p)} spids: [93] ) ] ) ] spids: [89 90 96 -1] ) (case_arm pat_list: [{(--)}] action: [ (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:104) ) (command.ControlFlow token: (Token id:Id.ControlFlow_Break val:break span_id:106) ) ] spids: [99 100 108 -1] ) (case_arm pat_list: [{(-) (Id.Lit_Star '*')}] action: [(C {(usage)})] spids: [111 113 118 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Break val:break span_id:125) ) ] spids: [121 122 127 -1] ) ] ) (C {(shift)}) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:base) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [138] ) (assign_pair lhs: (sh_lhs_expr.Name name:url) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [141] ) (assign_pair lhs: (sh_lhs_expr.Name name:status) op: assign_op.Equal rhs: {(0)} spids: [144] ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$base'))}) (C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$url'))}) (C {(usage)}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:baserev) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:172) command_list: (command.CommandList children: [ (C {(git)} {(rev-parse)} {(--verify)} {(--quiet)} {(DQ ($ Id.VSub_DollarName '$base')) (Id.Lit_Other '^') (0)} ) ] ) ) } spids: [171] ) ] ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$baserev'))})] action: [(C {(die)} {(DQ ('fatal: Not a valid revision: ') ($ Id.VSub_DollarName '$base'))})] spids: [188 198] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:local) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Number val:3 span_id:228) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Percent arg_word:{(':*')}) ) } spids: [226] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:local) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:local span_id:235) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(HEAD)}) ) } spids: [233] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:remote) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Number val:3 span_id:242) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{('*:')}) ) } spids: [240] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:pretty_remote) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:remote span_id:249) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{(refs) (Id.Lit_Slash /)}) ) } spids: [247] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:pretty_remote) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:pretty_remote span_id:257) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{(heads) (Id.Lit_Slash /)}) ) } spids: [255] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:head) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:264) command_list: (command.CommandList children: [ (C {(git)} {(symbolic-ref)} {(-q)} {(DQ ($ Id.VSub_DollarName '$local'))}) ] ) ) } spids: [263] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:head) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:head span_id:278) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:280) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(git)} {(show-ref)} {(--heads)} {(--tags)} {(DQ ($ Id.VSub_DollarName '$local'))} ) (C {(cut)} {(-d) (SQ (Token id:Id.Lit_Chars val:' ' span_id:299))} {(-f2)} ) ] negated: F ) ] ) ) } ) ) } spids: [276] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:head) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:head span_id:308) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:310) command_list: (command.CommandList children: [ (C {(git)} {(rev-parse)} {(--quiet)} {(--verify)} {(DQ ($ Id.VSub_DollarName '$local'))} ) ] ) ) } ) ) } spids: [306] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$head'))}) (C {(die)} {(DQ ('fatal: Not a valid revision: ') ($ Id.VSub_DollarName '$local'))}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:headrev) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:354) command_list: (command.CommandList children: [ (C {(git)} {(rev-parse)} {(--verify)} {(--quiet)} {(DQ ($ Id.VSub_DollarName '$head')) (Id.Lit_Other '^') (0)} ) ] ) ) } spids: [353] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$headrev'))}) (C {(die)} {(DQ ('fatal: Ambiguous revision: ') ($ Id.VSub_DollarName '$local'))}) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:branch_name) op: assign_op.Equal rhs: { (braced_var_sub token: (Token id:Id.VSub_Name val:head span_id:393) suffix_op: (suffix_op.Unary op_id: Id.VOp1_Pound arg_word: {(refs) (Id.Lit_Slash /) (heads) (Id.Lit_Slash /)} ) ) } spids: [391] ) ] ) (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(test)} {(DQ (z) ($ Id.VSub_DollarName '$branch_name'))} {(Id.Lit_Equals '=')} {(DQ (z) ($ Id.VSub_DollarName '$headref'))} ) (command.Pipeline children: [ (command.Simple words: [ {(git)} {(config)} {(DQ (branch.) ($ Id.VSub_DollarName '$branch_name') (.description))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:432) fd: -1 arg_word: {(/dev/null)} ) ] ) ] negated: T ) ] ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:branch_name) op: assign_op.Equal rhs: (word.Empty) spids: [438] ) ] ) ] spids: [401 435] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:merge_base) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:444) command_list: (command.CommandList children: [ (C {(git)} {(merge-base)} {($ Id.VSub_DollarName '$baserev')} {($ Id.VSub_DollarName '$headrev')} ) ] ) ) } spids: [443] ) ] ) (C {(die)} { (DQ ('fatal: No commits in common between ') ($ Id.VSub_DollarName '$base') (' and ') ($ Id.VSub_DollarName '$head') ) } ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:find_matching_ref) op: assign_op.Equal rhs: { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:483) (Token id: Id.Lit_Chars val: '\tmy ($head,$headrev) = (@ARGV);\n' span_id: 484 ) (Token id:Id.Lit_Chars val:'\tmy ($found);\n' span_id:485) (Token id:Id.Lit_Chars val:'\n' span_id:486) (Token id:Id.Lit_Chars val:'\twhile (<STDIN>) {\n' span_id:487) (Token id:Id.Lit_Chars val:'\t\tchomp;\n' span_id:488) (Token id: Id.Lit_Chars val: '\t\tmy ($sha1, $ref, $deref) = /^(\\S+)\\s+([^^]+)(\\S*)$/;\n' span_id: 489 ) (Token id:Id.Lit_Chars val:'\t\tmy ($pattern);\n' span_id:490) (Token id: Id.Lit_Chars val: '\t\tnext unless ($sha1 eq $headrev);\n' span_id: 491 ) (Token id:Id.Lit_Chars val:'\n' span_id:492) (Token id:Id.Lit_Chars val:'\t\t$pattern="/$head\\$";\n' span_id:493) (Token id:Id.Lit_Chars val:'\t\tif ($ref eq $head) {\n' span_id:494) (Token id:Id.Lit_Chars val:'\t\t\t$found = $ref;\n' span_id:495) (Token id:Id.Lit_Chars val:'\t\t}\n' span_id:496) (Token id: Id.Lit_Chars val: '\t\tif ($ref =~ /$pattern/) {\n' span_id: 497 ) (Token id:Id.Lit_Chars val:'\t\t\t$found = $ref;\n' span_id:498) (Token id:Id.Lit_Chars val:'\t\t}\n' span_id:499) (Token id:Id.Lit_Chars val:'\t\tif ($sha1 eq $head) {\n' span_id:500) (Token id:Id.Lit_Chars val:'\t\t\t$found = $sha1;\n' span_id:501) (Token id:Id.Lit_Chars val:'\t\t}\n' span_id:502) (Token id:Id.Lit_Chars val:'\t}\n' span_id:503) (Token id:Id.Lit_Chars val:'\tif ($found) {\n' span_id:504) (Token id:Id.Lit_Chars val:'\t\tprint "$found\\n";\n' span_id:505) (Token id:Id.Lit_Chars val:'\t}\n' span_id:506) ) } spids: [481] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ref) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:511) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(git)} {(ls-remote)} {(DQ ($ Id.VSub_DollarName '$url'))}) (C {(Id.Lit_Other '@') (Id.Lit_Splice '@PERL') (Id.Lit_Other '@') (Id.Lit_Other '@') } {(-e)} {(DQ ($ Id.VSub_DollarName '$find_matching_ref'))} { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:remote span_id:535) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonHyphen arg_word: {(HEAD)} ) ) ) } {(DQ ($ Id.VSub_DollarName '$headrev'))} ) ] negated: F ) ] ) ) } spids: [510] ) ] ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$ref'))})] action: [ (command.Simple words: [ {(echo)} { (DQ ('warn: No match for commit ') ($ Id.VSub_DollarName '$headrev') (' found at ') ($ Id.VSub_DollarName '$url') ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:569) fd: -1 arg_word: {(2)} ) ] ) (command.Simple words: [ {(echo)} { (DQ ("warn: Are you sure you pushed '") (braced_var_sub token: (Token id:Id.VSub_Name val:remote span_id:578) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonHyphen arg_word:{(HEAD)}) ) ("' there?") ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:585) fd: -1 arg_word: {(2)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:status) op: assign_op.Equal rhs: {(1)} spids: [589] ) ] ) ] spids: [547 557] ) ] ) (command.If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$ref'))} {(Id.Lit_Equals '=')} {(DQ (refs/tags/) ($ Id.VSub_DollarName '$pretty_remote'))} ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:pretty_remote) op: assign_op.Equal rhs: {(tags/) ($ Id.VSub_DollarName '$pretty_remote')} spids: [616] ) ] ) ] spids: [598 613] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:url) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:624) command_list: (command.CommandList children: [ (C {(git)} {(ls-remote)} {(--get-url)} {(DQ ($ Id.VSub_DollarName '$url'))}) ] ) ) } spids: [623] ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DPipe] children: [ (C {(git)} {(show)} {(-s)} {(--format) (Id.Lit_Equals '=') (SQ (Token id:Id.Lit_Chars val:'The following changes since commit %H:\n' span_id:646) (Token id:Id.Lit_Chars val:'\n' span_id:647) (Token id:Id.Lit_Chars val:' %s (%ci)\n' span_id:648) (Token id:Id.Lit_Chars val:'\n' span_id:649) (Token id: Id.Lit_Chars val: 'are available in the git repository at:\n' span_id: 650 ) ) } {($ Id.VSub_DollarName '$merge_base')} ) (C {(echo)} {(DQ (' ') ($ Id.VSub_DollarName '$url') (' ') ($ Id.VSub_DollarName '$pretty_remote'))} ) (C {(git)} {(show)} {(-s)} {(--format) (Id.Lit_Equals '=') (SQ (Token id:Id.Lit_Chars val:'\n' span_id:677) (Token id: Id.Lit_Chars val: 'for you to fetch changes up to %H:\n' span_id: 678 ) (Token id:Id.Lit_Chars val:'\n' span_id:679) (Token id:Id.Lit_Chars val:' %s (%ci)\n' span_id:680) (Token id:Id.Lit_Chars val:'\n' span_id:681) (Token id: Id.Lit_Chars val: ---------------------------------------------------------------- span_id: 682 ) ) } {($ Id.VSub_DollarName '$headrev')} ) (command.If arms: [ (if_arm cond: [ (C {(test)} { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:694) command_list: (command.CommandList children: [ (C {(git)} {(cat-file)} {(-t)} {(DQ ($ Id.VSub_DollarName '$head'))}) ] ) ) } {(Id.Lit_Equals '=')} {(tag)} ) ] action: [ (command.Pipeline children: [ (C {(git)} {(cat-file)} {(tag)} {(DQ ($ Id.VSub_DollarName '$head'))}) (C {(sed)} {(-n)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'1,/^$/d' span_id:733))} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'/^-----BEGIN PGP /q' span_id:739))} {(-e)} {(p)} ) ] negated: F ) (C {(echo)}) (C {(echo)} {(DQ (----------------------------------------------------------------))}) ] spids: [690 710] ) ] ) (command.If arms: [ (if_arm cond: [(C {(test)} {(-n)} {(DQ ($ Id.VSub_DollarName '$branch_name'))})] action: [ (C {(echo)} { (DQ ('(from the branch description for ') ($ Id.VSub_DollarName '$branch_name') (' local branch)') ) } ) (C {(echo)}) (C {(git)} {(config)} {(DQ (branch.) ($ Id.VSub_DollarName '$branch_name') (.description))} ) (C {(echo)} {(DQ (----------------------------------------------------------------))}) ] spids: [761 771] ) ] ) (C {(git)} {(shortlog)} {(Id.Lit_Other '^') ($ Id.VSub_DollarName '$baserev')} {($ Id.VSub_DollarName '$headrev')} ) (C {(git)} {(diff)} {(-M)} {(--stat)} {(--summary)} {($ Id.VSub_DollarName '$patch')} {($ Id.VSub_DollarName '$merge_base') (..) ($ Id.VSub_DollarName '$headrev')} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:status) op: assign_op.Equal rhs: {(1)} spids: [837] ) ] ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:841) arg_word: {($ Id.VSub_DollarName '$status')} ) ] )