(CommandList children: [ (C {(set)} {(-eu)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RELNOTES_TYPES) op: Equal rhs: {(ArrayLiteralPart words:[{(DQ (INC))}{(DQ (NEW))}{(DQ )}])} spids: [74] ) ] spids: [74] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RELNOTES_DESC) op: Equal rhs: { (ArrayLiteralPart words: [ {(DQ ("Incompatible changes"))} {(DQ ("New features"))} {(DQ ("Important changes"))} ] ) } spids: [88] ) ] spids: [88] ) (FuncDef name: get_last_release body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:changelog) op: Equal rhs: {($ VSub_Number "$1")} spids: [133] ) ] spids: [131] ) (AndOr children: [ (C {(Lit_Other "[")} {(-f)} {(DQ ($ VSub_Name "$changelog"))} {(Lit_Other "]")}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] op_id: Op_DPipe ) (AndOr children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:BASELINE_LINE) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(grep)} {(-m)} {(1)} {(-n)} {(SQ <"^Baseline: ">)} {(DQ ($ VSub_Name "$changelog"))} ) ] ) left_token: <Left_CommandSub "$("> spids: [160 176] ) } spids: [159] ) ] spids: [157] ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] op_id: Op_DPipe ) (AndOr children: [ (C {(Lit_Other "[")} {(-n)} {(DQ (${ VSub_Name BASELINE_LINE))} {(Lit_Other "]")}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] op_id: Op_DPipe ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:BASELINE_LINENB) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ (${ VSub_Name BASELINE_LINE))}) (C {(cut)} {(-d)} {(DQ (":"))} {(-f)} {(1)}) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [210 232] ) } spids: [209] ) ] spids: [207] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:BASELINE) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ (${ VSub_Name BASELINE_LINE))}) (C {(cut)} {(-d)} {(DQ (" "))} {(-f)} {(2)}) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [236 258] ) } spids: [235] ) ] spids: [235] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:CHERRYPICK_LINE) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Plus left: (ArithWord w:{($ VSub_Name "$BASELINE_LINENB")}) right: (ArithWord w:{(Lit_Digits 3)}) ) spids: [264 271] ) } spids: [263] ) ] spids: [261] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:CHERRY_PICKS) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(tail)} {(-n)} {(Lit_Other "+") (${ VSub_Name CHERRYPICK_LINE)} {(DQ ($ VSub_Name "$changelog"))} ) (C {(grep)} {(-m)} {(1)} {(DQ ("^") (Lit_Other "$"))} {(-B999)}) (C {(grep)} {(-E)} {(SQ <"^ \\+ [a-z0-9]+:">)}) (C {(cut)} {(-d)} {(DQ (":"))} {(-f)} {(1)}) (C {(cut)} {(-d)} {(DQ ("+"))} {(-f)} {(2)}) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [289 361] ) } spids: [288] ) ] spids: [286] ) (C {(echo)} {($ VSub_Name "$BASELINE")} {($ VSub_Name "$CHERRY_PICKS")}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] spids: [128] ) spids: [122 127] ) (FuncDef name: get_release_notes_commits body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:baseline) op: Equal rhs: {($ VSub_Number "$1")} spids: [398] ) ] spids: [396] ) (C {(shift)}) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:cherry_picks) op: Equal rhs: {(DQ ($ VSub_At "$@"))} spids: [407] ) ] spids: [405] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:rollback_commits) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(git)} {(log)} {(--oneline)} {(-E)} {(--grep) (Lit_Other "=") (SQ <"^Rollback of commit [a-z0-9]+.$">)} {(${ VSub_Name baseline) (..)} ) (C {(grep)} {(-E)} {(SQ <"^[a-z0-9]+ Rollback of commit [a-z0-9]+.$">)}) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [416 447] ) } spids: [415] ) ] spids: [413] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:rollback_hashes) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name "$rollback_commits"))}) (C {(cut)} {(-d)} {(DQ (" "))} {(-f)} {(1)}) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [453 473] ) } spids: [452] ) ] spids: [450] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:rolledback_hashes) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name "$rollback_commits"))}) (C {(cut)} {(-d)} {(DQ (" "))} {(-f)} {(5)}) (C {(sed)} {(-E)} {(SQ <"s/^(.......).*$/\\1/">)}) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [479 509] ) } spids: [478] ) ] spids: [476] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:exclude_hashes) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {($ VSub_Name "$cherry_picks")} {($ VSub_Name "$rollback_hashes")} {($ VSub_Name "$rolledback_hashes")} ) (C {(xargs)} {(echo)}) (C {(sed)} {(SQ <"s/ /|/g">)}) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [515 537] ) } spids: [514] ) ] spids: [512] ) (Pipeline children: [ (C {(git)} {(log)} {(--reverse)} {(--pretty) (Lit_Other "=") (format) (Lit_Other ":") (Lit_Other "%") (h)} {(${ VSub_Name baseline) (..)} {(-E)} {(--grep) (Lit_Other "=") (SQ <"^RELNOTES(\\[[^\\]+\\])?:">)} ) (C {(grep)} {(-Ev)} {(DQ ("^(") (${ VSub_Name exclude_hashes) (")"))}) ] negated: False ) ] spids: [393] ) spids: [387 392] ) (FuncDef name: extract_release_note body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:relnote) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(git)} {(show)} {(-s)} {($ VSub_Number "$1")} {(--pretty) (Lit_Other "=") (format) (Lit_Other ":") (Lit_Other "%") (B) } ) (C {(awk)} {(SQ <"/^RELNOTES(\\[[^\\]]+\\])?:/,/^$/">)}) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [619 642] ) ) } spids: [617] ) ] spids: [615] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:regex) op: Equal rhs: { (DQ ("^RELNOTES(") (EscapedLiteralPart token:<Lit_EscapedChar "\\[">) ("([a-zA-Z]*)") (EscapedLiteralPart token:<Lit_EscapedChar "\\]">) (")?:[[:space:]]*([^[:space:]].*[^[:space:]])[[:space:]]*") (Lit_Other "$") ) } spids: [648] ) ] spids: [646] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id: BoolBinary_EqualTilde left: {(DQ ($ VSub_Name "$relnote"))} right: {($ VSub_Name "$regex")} ) ) terminator: <Op_Semi ";"> ) ] action: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:relnote_kind) op: Equal rhs: { (BracedVarSub token: <VSub_Name BASH_REMATCH> bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 2)})) spids: [680 685] ) } spids: [679] ) ] spids: [677] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:relnote_text) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name BASH_REMATCH> bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 3)})) spids: [692 697] ) ) } spids: [690] ) ] spids: [688] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (LogicalNot child: (BoolBinary op_id: BoolBinary_EqualTilde left: { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {($ VSub_Name "$relnote_text")}) (C {(awk)} {(SQ <"{print tolower($0)}">)}) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [708 720] ) ) } right: {(Lit_Other "^") ("(") (none) ("|") (n/a) (")") (Lit_Other "?") (.) (Lit_Other "?") (Lit_Other "$") } ) ) ) terminator: <Op_Semi ";"> ) ] action: [ (C {(eval)} { (DQ (RELNOTES_) (${ VSub_Name relnote_kind) ("+=(") (EscapedLiteralPart token: <Lit_EscapedChar "\\\""> ) (EscapedLiteralPart token:<Lit_EscapedChar "\\$">) ("{relnote_text}") (EscapedLiteralPart token: <Lit_EscapedChar "\\\""> ) (")") ) } ) ] spids: [-1 739] ) ] spids: [-1 758] ) ] spids: [-1 674] ) ] spids: [-1 761] ) ] spids: [612] ) spids: [606 611] ) (FuncDef name: get_release_notes body: (BraceGroup children: [ (ForEach iter_name: i iter_words: [ { (DQ (BracedVarSub token: <VSub_Name RELNOTES_TYPES> bracket_op: (WholeArray op_id:Lit_At) spids: [788 793] ) ) } ] do_arg_iter: False body: (DoGroup children: [(C {(eval)} {(DQ (RELNOTES_) (${ VSub_Name i) ("=()"))})] spids: [797 811] ) spids: [786 795] ) (ForEach iter_name: i iter_words: [{($ VSub_At "$@")}] do_arg_iter: False body: (DoGroup children: [(C {(extract_release_note)} {($ VSub_Name "$i")})] spids: [823 831] ) spids: [819 821] ) ] spids: [778] ) spids: [772 777] ) (FuncDef name: wrap_text body: (BraceGroup children: [ (Pipeline children: [(C {(fold)} {(-s)} {(-w)} {($ VSub_Number "$1")}) (C {(sed)} {(SQ <"s/ *$//">)})] negated: False ) ] spids: [845] ) spids: [839 844] ) (FuncDef name: format_release_notes body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:i) op:Equal spids:[887])] spids: [885] ) (ForExpr init: (BinaryAssign op_id: Arith_Equal left: (LhsName name:i) right: (ArithWord w:{(Lit_Digits 1)}) ) cond: (ArithBinary op_id: Arith_LessEqual left: (ArithWord w:{($ VSub_Name "$i")}) right: (ArithWord w:{($ VSub_Pound "$#")}) ) update: (BinaryAssign op_id: Arith_Equal left: (LhsName name:i) right: (ArithBinary op_id: Arith_Plus left: (ArithWord w:{($ VSub_Name "$i")}) right: (ArithWord w:{(Lit_Digits 1)}) ) ) body: (DoGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:relnote) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name i> prefix_op: VSub_Bang spids: [923 926] ) ) } spids: [921] ) ] spids: [919] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:lines) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name "$relnote"))}) (C {(wrap_text)} {(66)}) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [933 945] ) } spids: [932] ) ] spids: [930] ) (Pipeline children: [(C {(echo)} {(DQ (" - ") ($ VSub_Name "$lines"))}) (C {(head)} {(-1)})] negated: False ) (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name "$lines"))}) (C {(tail)} {(-n)} {(Lit_Other "+") (2)}) (C {(sed)} {(SQ <"s/^/ /">)}) ] negated: False ) ] spids: [916 989] ) ) ] spids: [882] ) spids: [876 881] ) (FuncDef name: release_notes body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:i) op:Equal spids:[1011])] spids: [1009] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:commits) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(get_release_notes_commits)} {($ VSub_At "$@")})] ) left_token: <Left_CommandSub "$("> spids: [1017 1021] ) } spids: [1016] ) ] spids: [1014] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:length) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name RELNOTES_TYPES> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [1028 1034] ) ) } spids: [1026] ) ] spids: [1024] ) (C {(get_release_notes)} {(DQ ($ VSub_Name "$commits"))}) (ForExpr init: (BinaryAssign op_id: Arith_Equal left: (LhsName name:i) right: (ArithWord w:{(Lit_Digits 0)}) ) cond: (ArithBinary op_id: Arith_Less left: (ArithWord w:{($ VSub_Name "$i")}) right: (ArithWord w:{($ VSub_Name "$length")}) ) update: (BinaryAssign op_id: Arith_Equal left: (LhsName name:i) right: (ArithBinary op_id: Arith_Plus left: (ArithWord w:{($ VSub_Name "$i")}) right: (ArithWord w:{(Lit_Digits 1)}) ) ) body: (DoGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:relnotes_title) op: Equal rhs: { (DQ (BracedVarSub token: <VSub_Name RELNOTES_DESC> bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$i")})) spids: [1078 1083] ) ) } spids: [1076] ) ] spids: [1074] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:relnotes_type) op: Equal rhs: { (BracedVarSub token: <VSub_Name RELNOTES_TYPES> bracket_op: (ArrayIndex expr:(ArithWord w:{($ VSub_Name "$i")})) spids: [1090 1095] ) } spids: [1089] ) ] spids: [1087] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:relnotes) op: Equal rhs: {(DQ (RELNOTES_) (${ VSub_Name relnotes_type) ("[@]"))} spids: [1100] ) ] spids: [1098] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:nb_relnotes) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(eval)} { (DQ ("echo ") (EscapedLiteralPart token: <Lit_EscapedChar "\\$"> ) ("{#") ($ VSub_Name "$relnotes") ("}") ) } ) ] ) left_token: <Left_CommandSub "$("> spids: [1113 1123] ) } spids: [1112] ) ] spids: [1110] ) (If arms: [ (if_arm cond: [ (Sentence child: (DParen child: (ArithBinary op_id: Arith_Great left: (ArithWord w:{(DQ (${ VSub_Name nb_relnotes))}) right: (ArithWord w:{(Lit_Digits 0)}) ) ) terminator: <Op_Semi ";"> ) ] action: [ (C {(echo)} {(DQ (${ VSub_Name relnotes_title) (":"))}) (C {(echo)}) (C {(format_release_notes)} { (DQ (BracedVarSub token: <VSub_Name relnotes> prefix_op: VSub_Bang spids: [1163 1166] ) ) } ) (C {(echo)}) ] spids: [-1 1144] ) ] spids: [-1 1173] ) ] spids: [1071 1176] ) ) ] spids: [1006] ) spids: [1000 1005] ) (FuncDef name: create_release_notes body: (BraceGroup children: [ (AndOr children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:last_release) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(get_last_release)} {(DQ ($ VSub_Number "$1"))})] ) left_token: <Left_CommandSub "$("> spids: [1199 1205] ) } spids: [1198] ) ] spids: [1196] ) (BraceGroup children: [ (Sentence child: (C {(echo)} {(DQ ("Initial release."))}) terminator: <Op_Semi ";"> ) (Sentence child: (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) terminator: <Op_Semi ";"> ) ] spids: [1211] ) ] op_id: Op_DPipe ) (AndOr children: [ (C {(Lit_Other "[")} {(-n)} {(DQ (${ VSub_Name last_release))} {(Lit_Other "]")}) (BraceGroup children: [ (Sentence child: (C {(echo)} {(DQ ("Initial release."))}) terminator: <Op_Semi ";"> ) (Sentence child: (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) terminator: <Op_Semi ";"> ) ] spids: [1242] ) ] op_id: Op_DPipe ) (C {(release_notes)} {(${ VSub_Name last_release)}) ] spids: [1193] ) spids: [1187 1192] ) (FuncDef name: create_revision_information body: (BraceGroup children: [ (C {(echo)} { (DQ ("Baseline: ") (CommandSubPart command_list: (CommandList children: [(C {(git)} {(rev-parse)} {(--short)} {(DQ (${ VSub_Number 1))})] ) left_token: <Left_CommandSub "$("> spids: [1308 1320] ) ) } ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:first) op:Equal rhs:{(1)} spids:[1324])] spids: [1324] ) (C {(shift)}) (While cond: [ (Sentence child: (C {(Lit_Other "[")} {(-n)} { (DQ (BracedVarSub token: <VSub_Number 1> suffix_op: (StringUnary op_id:VTest_Hyphen arg_word:{(SQ )}) spids: [1338 1341] ) ) } {(Lit_Other "]")} ) terminator: <Op_Semi ";"> ) ] body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id: BoolBinary_eq left: {(DQ ($ VSub_Name "$first"))} right: {(1)} ) ) terminator: <Op_Semi ";"> ) ] action: [ (C {(echo)} {(-e)} { (DQ (EscapedLiteralPart token:<Lit_EscapedChar "\\n">) ("Cherry picks:") ) } ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:first) op: Equal rhs: {(0)} spids: [1378] ) ] spids: [1378] ) ] spids: [-1 1365] ) ] spids: [-1 1382] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:hash) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(git)} {(rev-parse)} {(--short)} {(DQ (${ VSub_Number 1))}) ] ) left_token: <Left_CommandSub "$("> spids: [1390 1402] ) ) } spids: [1388] ) ] spids: [1386] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:subject) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(git)} {(show)} {(-s)} {(--pretty) (Lit_Other "=") (format) (Lit_Other ":") (Lit_Other "%") (s) } {($ VSub_Name "$hash")} ) ] ) left_token: <Left_CommandSub "$("> spids: [1409 1424] ) } spids: [1408] ) ] spids: [1406] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:lines) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name "$subject"))}) (C {(wrap_text)} {(56)}) ] negated: False ) ] ) left_token: <Left_CommandSub "$("> spids: [1430 1442] ) } spids: [1429] ) ] spids: [1427] ) (Pipeline children: [ (C {(echo)} {(DQ (" + ") ($ VSub_Name "$hash") (": ") ($ VSub_Name "$lines"))}) (C {(head)} {(-1)}) ] negated: False ) (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name "$lines"))}) (C {(tail)} {(-n)} {(Lit_Other "+") (2)}) (C {(sed)} {(SQ <"s/^/ /">)}) ] negated: False ) (C {(shift)}) ] spids: [1347 1491] ) ) ] spids: [1301] ) spids: [1295 1300] ) ] )