(command.CommandList children: [ (C {<set>} {<-euo>} {<pipefail>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:IFS) op: assign_op.Equal rhs: { (single_quoted left: <Id.Left_DollarSingleQuote '$\''> tokens: [<Id.Char_OneChar '\\t'> <Id.Char_OneChar '\\n'>] multiline: F ) } spids: [19] ) ] ) (command.ShFunction name: usage body: (BraceGroup children: [ (command.Simple words: [{<cat>}] redirects: [ (redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_span_id: 80 stdin_parts: [ <'\n'> <'Usage: release.sh [new version]\n'> <'\n'> < 'This script is only intended for use by asdf maintainers when releasing new\n' > < 'versions of asdf. Plugin developers and asdf users do not need this script.\n' > <'\n'> < 'This script updates the hardcoded versions in the source code and README and\n' > < 'then commits them on the current branch. It then tags that commit with the\n' > <'specified version.\n'> <'\n'> < 'If you run this script in error, or with the wrong version, you can undo the\n' > < 'changes by finding the original state in the list of actions listed in the\n' > <'reflog:\n'> <'\n'> <' git reflog\n'> <'\n'> <'Then revert to the original state by running '> (command_sub left_token: <Id.Left_Backtick '`'> child: (C {<git>} {<checkout>}) ) <' with the reference\n'> <'previous to the release tagging changes:\n'> <'\n'> <' git checkout HEAD@{21}\n'> <'\n'> <'Then checkout the original branch again:\n'> <'\n'> <' git checkout master\n'> <'\n'> <'You are back to the original state!\n'> <'\n'> ] ) ) ] do_fork: T ) ] ) ) (command.ShFunction name: error_exit body: (BraceGroup children: [(C {<usage>}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:new_version) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: <Id.VSub_Number 1> suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:(word.Empty)) ) ) } spids: [101] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:new_tag_name) op: assign_op.Equal rhs: {(DQ <v> ($ Id.VSub_DollarName '$new_version'))} spids: [109] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_z child: {(DQ ($ Id.VSub_DollarName '$new_version'))} ) ) ] ) action: [(C {<echo>} {(DQ <'ERROR: no new version specified'>)}) (C {<error_exit>})] spids: [119 131] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: { (DQ (braced_var_sub token: <Id.VSub_Name new_version> suffix_op: (suffix_op.Slice begin: {<Id.Lit_Digits 0>} length: {<Id.Lit_Digits 1>} ) ) ) } right: {<Id.Lit_Other '^'> <Id.Lit_Other '['> <0-9> <Id.Lit_Other ']'> <Id.Lit_Other '+'> <Id.Lit_Other '$'> } ) ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Simple words: [{<echo>} {(DQ <'ERROR: semantic version should not start with a letter'>)}] redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (C {<error_exit>}) ] spids: [152 180] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (C {<git>} {<tag>}) (command.Simple words: [{<grep>} {(DQ ($ Id.VSub_DollarName '$new_tag_name'))}] redirects: [ (redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {<'/dev/null'>} ) ] do_fork: T ) ] negated: F ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Simple words: [{<echo>} {(DQ <'ERROR: git tag with that version already exists'>)}] redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [201 220] ) ] ) (C {<echo>} {(DQ <'INFO: Checking that all changes are commited and pushed'>)}) (C {<git>} {<pull>}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (command.Simple words: [ {<git>} {<diff-files>} {<--check>} {<--exit-code>} {<--ignore-submodules>} {<-->} ] redirects: [ (redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Simple words: [{<echo>} {(DQ <'ERROR: You have unstaged changes.'>)}] redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [254 274] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (command.Simple words: [ {<git>} {<diff-index>} {<--cached>} {<--exit-code>} {<-r>} {<--ignore-submodules>} {<HEAD>} {<-->} ] redirects: [ (redir op: <Id.Redir_GreatAnd '>&'> loc: (redir_loc.Fd fd:1) arg: {<2>} ) ] do_fork: T ) ] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Simple words: [{<echo>} {(DQ <'ERROR: Your index contains uncommitted changes.'>)}] redirects: [(redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [297 321] ) ] ) (C {<sed>} {<-i.bak>} { (DQ <'s|^'> <Id.Lit_BadBackslash '\\'> <'(git clone.*--branch '> <Id.Lit_BadBackslash '\\'> <').*'> <Id.Lit_Dollar '$'> <'|'> <Id.Lit_BadBackslash '\\'> <1> ($ Id.VSub_DollarName '$new_tag_name') <'|'> ) } {<README.md>} ) (command.Simple words: [{<echo>} {(DQ ($ Id.VSub_DollarName '$new_tag_name'))}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<VERSION>})] do_fork: T ) (C {<echo>} {(DQ <'INFO: Committing and tagging new version'>)}) (C {<git>} {<add>} {<README.md>}) (C {<git>} {<add>} {<VERSION>}) (C {<git>} {<commit>} {<-m>} {(DQ <'Update version to '> ($ Id.VSub_DollarName '$new_version'))}) (C {<git>} {<tag>} {<-a>} {(DQ ($ Id.VSub_DollarName '$new_tag_name'))} {<-m>} {(DQ <'Version '> (${ Id.VSub_Name new_version))} ) (C {<echo>} {(DQ <'INFO: done.'>)}) (C {<echo>} {(DQ <'INFO: Now you can push this local branch to the GitHub repository.'>)}) ] )