(command.CommandList children: [ (command.Simple blame_tok: <set> more_env: [] words: [{<set>} {<-euo>} {<pipefail>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'IFS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'IFS='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'IFS='> name:IFS) op: assign_op.Equal rhs: { (SingleQuoted left: <Id.Left_DollarSingleQuote '$\''> tokens: [<Id.Char_OneChar '\\t'> <Id.Char_OneChar '\\n'>] right: <Id.Right_SingleQuote '\''> ) } ) ] redirects: [] ) (command.ShFunction name_tok: <usage> name: usage body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> 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 '> (CommandSub left_token: <Id.Left_Backtick '`'> child: (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<checkout>}] redirects: [] do_fork: T ) right: <Id.Backtick_Right '`'> ) <' 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 ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShFunction name_tok: <error_exit> name: error_exit body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.Simple blame_tok: <usage> more_env: [] words: [{<usage>}] redirects: [] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShAssignment left: <Id.Lit_VarLike 'new_version='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'new_version='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'new_version='> name:new_version) op: assign_op.Equal rhs: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Number 1> var_name: 1 suffix_op: (suffix_op.Unary op:<Id.VTest_ColonHyphen _> arg_word:(rhs_word__Empty)) right: <Id.Right_DollarBrace '}'> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'new_tag_name='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'new_tag_name='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'new_tag_name='> name:new_tag_name) op: assign_op.Equal rhs: {(DQ <v> ($ Id.VSub_DollarName new_version))} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Unary op_id: Id.BoolUnary_z child: {(DQ ($ Id.VSub_DollarName new_version))} ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'ERROR: no new version specified'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <error_exit> more_env: [] words: [{<error_exit>}] redirects: [] do_fork: T ) ] spids: [119 131] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name new_version> var_name: new_version suffix_op: (suffix_op.Slice begin: {<Id.Lit_Digits 0>} length: {<Id.Lit_Digits 1>} ) right: <Id.Arith_RBrace _> ) ) } right: {<Id.Lit_Other '^'> <Id.Lit_Other '['> <0-9> <Id.Lit_Other ']'> <Id.Lit_Other '+'> <Id.Lit_Other '$'> } ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] 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 ) (command.Simple blame_tok: <error_exit> more_env: [] words: [{<error_exit>}] redirects: [] do_fork: T ) ] spids: [152 180] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [ (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<tag>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <grep> more_env: [] 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 ) ] ops: [<Id.Op_Pipe _>] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] 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 keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [201 220] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'INFO: Checking that all changes are commited and pushed'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok:<git> more_env:[] words:[{<git>} {<pull>}] redirects:[] do_fork:T) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <git> more_env: [] 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 ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] 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 keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [254 274] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline negated: <Id.KW_Bang '!'> children: [ (command.Simple blame_tok: <git> more_env: [] 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 ) ] ops: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] 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 keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [297 321] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.Simple blame_tok: <sed> more_env: [] words: [ {<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>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] 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 ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'INFO: Committing and tagging new version'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<add>} {<README.md>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<add>} {<VERSION>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <git> more_env: [] words: [{<git>} {<commit>} {<-m>} {(DQ <'Update version to '> ($ Id.VSub_DollarName new_version))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <git> more_env: [] words: [ {<git>} {<tag>} {<-a>} {(DQ ($ Id.VSub_DollarName new_tag_name))} {<-m>} {(DQ <'Version '> (${ Id.VSub_Name new_version))} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'INFO: done.'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ <'INFO: Now you can push this local branch to the GitHub repository.'>)}] redirects: [] do_fork: T ) ] )