(command.CommandList children: [ (C {(Id.KW_Set set)} {(-eo)} {(pipefail)}) (C {(shopt)} {(-s)} {(nullglob)}) (C {(export)} {(Id.Lit_VarLike 'DOKKU_ROOT=') (braced_var_sub token: (Token id:Id.VSub_Name val:DOKKU_ROOT span_id:20) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonEquals arg_word:{('~dokku')}) ) } ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_f child: {($ Id.VSub_DollarName '$DOKKU_ROOT') (/dokkurc)} ) ) (C {(source)} {(DQ ($ Id.VSub_DollarName '$DOKKU_ROOT') (/dokkurc))}) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_d child: {($ Id.VSub_DollarName '$DOKKU_ROOT') (/.dokkurc)} ) ) (command.ForEach iter_name: f iter_words: [{($ Id.VSub_DollarName '$DOKKU_ROOT') (/.dokkurc/) (Id.Lit_Star '*')}] do_arg_iter: F body: (command.DoGroup children: [ (command.Sentence child: (C {(source)} {(DQ ($ Id.VSub_DollarName '$f'))}) terminator: (Token id:Id.Op_Semi val:';' span_id:72) ) ] ) ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr:(bool_expr.WordTest w:{($ Id.VSub_DollarName '$DOKKU_TRACE')})) (C {(Id.KW_Set set)} {(-x)}) ] ) (command.Case to_match: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:92) command_list: (command.CommandList children:[(C {(lsb_release)} {(-si)})]) ) ) } arms: [ (case_arm pat_list: [{(Arch)}] action: [ (C {(export)} {(Id.Lit_VarLike 'DOKKU_DISTRO=') (braced_var_sub token: (Token id:Id.VSub_Name val:DOKKU_DISTRO span_id:110) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonEquals arg_word:{(DQ (arch))}) ) } ) ] spids: [102 103 118 -1] ) (case_arm pat_list: [{(Debian)}] action: [ (C {(export)} {(Id.Lit_VarLike 'DOKKU_DISTRO=') (braced_var_sub token: (Token id:Id.VSub_Name val:DOKKU_DISTRO span_id:129) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonEquals arg_word:{(DQ (debian))}) ) } ) ] spids: [121 122 137 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (C {(export)} {(Id.Lit_VarLike 'DOKKU_DISTRO=') (braced_var_sub token: (Token id:Id.VSub_Name val:DOKKU_DISTRO span_id:148) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonEquals arg_word:{(DQ (ubuntu))}) ) } ) ] spids: [140 141 156 -1] ) ] ) (C {(export)} {(Id.Lit_VarLike 'DOKKU_IMAGE=') (braced_var_sub token: (Token id:Id.VSub_Name val:DOKKU_IMAGE span_id:165) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonEquals arg_word:{(DQ (gliderlabs/herokuish))}) ) } ) (C {(export)} {(Id.Lit_VarLike 'DOKKU_LIB_ROOT=') (braced_var_sub token: (Token id:Id.VSub_Name val:DOKKU_LIB_PATH span_id:176) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonEquals arg_word:{(DQ (/var/lib/dokku))}) ) } ) (C {(export)} {(Id.Lit_VarLike 'PLUGIN_PATH=') (braced_var_sub token: (Token id:Id.VSub_Name val:PLUGIN_PATH span_id:188) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonEquals arg_word: {(DQ ($ Id.VSub_DollarName '$DOKKU_LIB_ROOT') (/plugins))} ) ) } ) (C {(export)} {(Id.Lit_VarLike 'PLUGIN_AVAILABLE_PATH=') (braced_var_sub token: (Token id:Id.VSub_Name val:PLUGIN_AVAILABLE_PATH span_id:200) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonEquals arg_word: {(DQ ($ Id.VSub_DollarName '$PLUGIN_PATH') (/available))} ) ) } ) (C {(export)} {(Id.Lit_VarLike 'PLUGIN_ENABLED_PATH=') (braced_var_sub token: (Token id:Id.VSub_Name val:PLUGIN_ENABLED_PATH span_id:212) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonEquals arg_word: {(DQ ($ Id.VSub_DollarName '$PLUGIN_PATH') (/enabled))} ) ) } ) (C {(export)} {(Id.Lit_VarLike 'PLUGIN_CORE_PATH=') (braced_var_sub token: (Token id:Id.VSub_Name val:PLUGIN_CORE_PATH span_id:224) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonEquals arg_word: {(DQ ($ Id.VSub_DollarName '$DOKKU_LIB_ROOT') (/core-plugins))} ) ) } ) (C {(export)} {(Id.Lit_VarLike 'PLUGIN_CORE_AVAILABLE_PATH=') (braced_var_sub token: (Token id:Id.VSub_Name val:PLUGIN_CORE_AVAILABLE_PATH span_id:236) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonEquals arg_word: {(DQ ($ Id.VSub_DollarName '$PLUGIN_CORE_PATH') (/available))} ) ) } ) (C {(export)} {(Id.Lit_VarLike 'PLUGIN_CORE_ENABLED_PATH=') (braced_var_sub token: (Token id:Id.VSub_Name val:PLUGIN_CORE_ENABLED_PATH span_id:248) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonEquals arg_word: {(DQ ($ Id.VSub_DollarName '$PLUGIN_CORE_PATH') (/enabled))} ) ) } ) (C {(export)} {(Id.Lit_VarLike 'DOKKU_API_VERSION=') (1)}) (C {(export)} {(Id.Lit_VarLike 'DOKKU_NOT_IMPLEMENTED_EXIT=') (10)}) (C {(export)} {(Id.Lit_VarLike 'DOKKU_VALID_EXIT=') (0)}) (C {(export)} {(Id.Lit_VarLike 'DOKKU_LOGS_DIR=') (braced_var_sub token: (Token id:Id.VSub_Name val:DOKKU_LOGS_DIR span_id:277) suffix_op: (suffix_op.Unary op_id:Id.VTest_ColonEquals arg_word:{(DQ (/var/log/dokku))}) ) } ) (C {(export)} {(Id.Lit_VarLike 'DOKKU_EVENTS_LOGFILE=') (braced_var_sub token: (Token id:Id.VSub_Name val:DOKKU_EVENTS_LOGFILE span_id:288) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonEquals arg_word: {(DQ ($ Id.VSub_DollarName '$DOKKU_LOGS_DIR') (/events.log))} ) ) } ) (C {(export)} {(Id.Lit_VarLike 'DOKKU_CONTAINER_LABEL=') (dokku)}) (C {(export)} {(Id.Lit_VarLike 'DOKKU_GLOBAL_RUN_ARGS=') (DQ ('--label=') ($ Id.VSub_DollarName '$DOKKU_CONTAINER_LABEL')) } ) (C {(source)} {(DQ ($ Id.VSub_DollarName '$PLUGIN_CORE_AVAILABLE_PATH') (/common/functions))}) (C {(parse_args)} {(DQ ($ Id.VSub_At '$@'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:args) op: assign_op.Equal rhs: { (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:326) words: [{(DQ ($ Id.VSub_At '$@'))}] ) } spids: [325] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: { (DQ (braced_var_sub token: (Token id:Id.VSub_Name val:args span_id:338) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 0)}) ) ) ) } right: {(Id.Lit_Other '^') (--) (Id.Lit_Other .) (Id.Lit_Other '*')} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:353) ) ] action: [ (command.ForEach iter_name: arg iter_words: [{(DQ ($ Id.VSub_At '$@'))}] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$arg'))} right: {(DQ (--app))} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:387) ) ] action: [(C {(shift)} {(2)})] spids: [372 389] ) (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: {(DQ ($ Id.VSub_DollarName '$arg'))} right: {(Id.Lit_Other '^') (--) (Id.Lit_Other .) (Id.Lit_Other '*')} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:413) ) ] action: [(C {(shift)} {(1)})] spids: [397 415] ) ] else_action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Break val:break span_id:426) ) ] ) ] ) ) ] spids: [332 355] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Pipeline children:[(C {(has_tty)})] negated:T) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:DOKKU_QUIET_OUTPUT) op: assign_op.Equal rhs: {(1)} spids: [442] ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:450) command_list: (command.CommandList children:[(C {(id)} {(-un)})]) ) } right: {(DQ (dokku))} ) ) (command.DBracket expr: (bool_expr.LogicalNot child: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: {($ Id.VSub_Number '$1')} right: {(plugin) (Id.Lit_Other ':') (Id.Lit_Other '*')} ) ) ) (command.DBracket expr: (bool_expr.LogicalNot child: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_Number '$1')} right: {(DQ ('ssh-keys:add'))} ) ) ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:495) ) ] action: [ (C {(export)} {(Id.Lit_VarLike 'SSH_USER=') (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:503) command_list: (command.CommandList children:[(C {(id)} {(-un)})]) ) } ) (C {(sudo)} {(-u)} {(dokku)} {(-E)} {(-H)} {(DQ ($ Id.VSub_Number '$0'))} {(DQ ($ Id.VSub_At '$@'))} ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:529) arg_word: {($ Id.VSub_QMark '$?')} ) ] spids: [446 497] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DPipe] children: [ (command.DBracket expr: (bool_expr.LogicalAnd left: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:540) command_list: (command.CommandList children:[(C {(id)} {(-un)})]) ) } right: {(DQ (root))} ) right: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: {($ Id.VSub_Number '$1')} right: {(Id.Lit_Other '^') (plugin) (Id.Lit_Other ':') (Id.Lit_Other .) (Id.Lit_Other '*') } ) ) ) (command.DBracket expr: (bool_expr.LogicalAnd left: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:570) command_list: (command.CommandList children:[(C {(id)} {(-un)})]) ) } right: {(DQ (root))} ) right: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {($ Id.VSub_Number '$1')} right: {(DQ ('ssh-keys:add'))} ) ) ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:593) ) ] action: [(C {(dokku_log_fail)} {(DQ ('This command must be run as root'))})] spids: [536 595] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_n child: {(DQ ($ Id.VSub_DollarName '$SSH_ORIGINAL_COMMAND'))} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:618) ) ] action: [ (C {(export)} {(-n)} {(SSH_ORIGINAL_COMMAND)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DPipe] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: {($ Id.VSub_Number '$1')} right: {(config-) (Id.Lit_Other '*')} ) ) (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: {($ Id.VSub_Number '$1')} right: {(docker-options) (Id.Lit_Other '*')} ) ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:655) ) ] action: [ (command.Simple words: [{(xargs)} {($ Id.VSub_Number '$0')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_TLess val:'<<<' span_id:668) fd: -1 arg_word: {($ Id.VSub_DollarName '$SSH_ORIGINAL_COMMAND')} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:672) arg_word: {($ Id.VSub_QMark '$?')} ) ] spids: [630 657] ) ] else_action: [ (C {(Id.KW_Set set)} {(-f)}) (C {($ Id.VSub_Number '$0')} {($ Id.VSub_DollarName '$SSH_ORIGINAL_COMMAND')}) (C {(Id.KW_Set set)} {(Id.Lit_Other '+') (f)}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:700) arg_word: {($ Id.VSub_QMark '$?')} ) ] ) ] spids: [607 620] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children: [(C {(dokku_auth)} {(DQ ($ Id.VSub_At '$@'))})] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:720) ) ] action: [ (C {(dokku_log_fail)} {(DQ ('Access denied'))}) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:732) arg_word: {(1)} ) ] spids: [710 722] ) ] ) (command.ShFunction name: execute_dokku_cmd body: (command.BraceGroup children: [ (C {(declare)} {(Id.Lit_VarLike 'desc=') (DQ ('executes dokku sub-commands'))}) (C {(local)} {(Id.Lit_VarLike 'PLUGIN_NAME=') (DQ ($ Id.VSub_Number '$1'))}) (C {(local)} {(Id.Lit_VarLike 'PLUGIN_CMD=') ($ Id.VSub_DollarName '$PLUGIN_NAME')}) (command.Sentence child: (C {(local)} {(Id.Lit_VarLike 'implemented=') (0)}) terminator: (Token id:Id.Op_Semi val:';' span_id:772) ) (C {(local)} {(script)}) (C {(local)} {(Id.Lit_VarLike 'argv=') (sh_array_literal left: (Token id:Id.Op_LParen val:'(' span_id:782) words: [{(DQ ($ Id.VSub_At '$@'))}] ) } ) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$PLUGIN_NAME'))} arms: [ (case_arm pat_list: [{(events)} {(events) (Id.Lit_Other ':') (Id.Lit_Star '*')}] action: [ (C {(local)} {(Id.Lit_VarLike 'PLUGIN_NAME=') (braced_var_sub token: (Token id:Id.VSub_Name val:PLUGIN_NAME span_id:811) suffix_op: (suffix_op.PatSub pat: {(events)} replace: {(20_events)} replace_mode: Id.Undefined_Tok ) ) } ) ] spids: [799 804 819 -1] ) (case_arm pat_list: [{(nginx)} {(nginx) (Id.Lit_Other ':') (Id.Lit_Star '*')}] action: [ (C {(local)} {(Id.Lit_VarLike 'PLUGIN_NAME=') (braced_var_sub token: (Token id:Id.VSub_Name val:PLUGIN_NAME span_id:834) suffix_op: (suffix_op.PatSub pat: {(nginx)} replace: {(nginx-vhosts)} replace_mode: Id.Undefined_Tok ) ) } ) ] spids: [822 827 842 -1] ) (case_arm pat_list: [{(deploy)} {(delete)} {(ls)} {(run)} {(cleanup)}] action: [(C {(local)} {(Id.Lit_VarLike 'PLUGIN_NAME=') (DQ (00_dokku-standard))})] spids: [845 854 865 -1] ) (case_arm pat_list: [{(trace)} {(url)} {(urls)} {(report)} {(version)}] action: [(C {(local)} {(Id.Lit_VarLike 'PLUGIN_NAME=') (DQ (00_dokku-standard))})] spids: [868 877 888 -1] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:900) command_list: (command.CommandList children: [ (C {(readlink)} {(-f)} { (DQ ($ Id.VSub_DollarName '$PLUGIN_ENABLED_PATH') (/) (braced_var_sub token: (Token id: Id.VSub_Name val: PLUGIN_NAME span_id: 909 ) suffix_op: (suffix_op.Unary op_id: Id.VOp1_DPercent arg_word: {(':*')} ) ) ) } ) ] ) ) ) } right: {(Id.Lit_Other '*') (core-plugins) (Id.Lit_Other '*')} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:925) ) ] action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (braced_var_sub token: (Token id:Id.VSub_Name val:argv span_id:933) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w:{(Id.Lit_Digits 0)}) ) ) } right: {(DQ ($ Id.VSub_DollarName '$PLUGIN_CMD'))} ) ) (C {(shift)} {(1)}) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.LogicalNot child: (bool_expr.Unary op_id: Id.BoolUnary_z child: {($ Id.VSub_DollarName '$DOKKU_APP_NAME')} ) ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:965) ) ] action: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$PLUGIN_CMD'))} right: {(config) (Id.Lit_Other '*')} ) ) (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (braced_var_sub token: (Token id: Id.VSub_Name val: argv span_id: 990 ) bracket_op: (bracket_op.ArrayIndex expr: (arith_expr.ArithWord w: {(Id.Lit_Digits 1)} ) ) ) } right: {(DQ (--no-restart))} ) ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1003) ) ] action: [ (C {(shift)} {(1)}) (C {(Id.KW_Set set)} {(--)} {(DQ (--no-restart))} {(DQ ($ Id.VSub_DollarName '$DOKKU_APP_NAME'))} {(DQ ($ Id.VSub_At '$@'))} ) ] spids: [970 1005] ) ] else_action: [ (C {(Id.KW_Set set)} {(--)} {(DQ ($ Id.VSub_DollarName '$DOKKU_APP_NAME'))} {(DQ ($ Id.VSub_At '$@'))} ) ] ) ] spids: [954 967] ) ] ) (C {(Id.KW_Set set)} {(--)} {(DQ ($ Id.VSub_DollarName '$PLUGIN_CMD'))} {(DQ ($ Id.VSub_At '$@'))} ) ] spids: [895 927] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_x child: {($ Id.VSub_DollarName '$PLUGIN_ENABLED_PATH') (/) ($ Id.VSub_DollarName '$PLUGIN_NAME') (/subcommands/default) } ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1081) ) ] action: [ (C { (DQ ($ Id.VSub_DollarName '$PLUGIN_ENABLED_PATH') (/) ($ Id.VSub_DollarName '$PLUGIN_NAME') (/subcommands/default) ) } {(DQ ($ Id.VSub_At '$@'))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:implemented) op: assign_op.Equal rhs: {(1)} spids: [1098] ) ] ) ] spids: [1069 1083] ) (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_x child: {($ Id.VSub_DollarName '$PLUGIN_ENABLED_PATH') (/) ($ Id.VSub_DollarName '$PLUGIN_NAME') (/subcommands/) ($ Id.VSub_DollarName '$PLUGIN_CMD') } ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1115) ) ] action: [ (C { (DQ ($ Id.VSub_DollarName '$PLUGIN_ENABLED_PATH') (/) ($ Id.VSub_DollarName '$PLUGIN_NAME') (/subcommands/) ($ Id.VSub_DollarName '$PLUGIN_CMD') ) } {(DQ ($ Id.VSub_At '$@'))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:implemented) op: assign_op.Equal rhs: {(1)} spids: [1133] ) ] ) ] spids: [1102 1117] ) (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_x child: {($ Id.VSub_DollarName '$PLUGIN_ENABLED_PATH') (/) (braced_var_sub token: (Token id:Id.VSub_Name val:PLUGIN_NAME span_id:1146) suffix_op: (suffix_op.Unary op_id: Id.VOp1_DPercent arg_word: {(':*')} ) ) (/subcommands/) (braced_var_sub token: (Token id:Id.VSub_Number val:1 span_id:1152) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{('*:')}) ) } ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1158) ) ] action: [ (C { (DQ ($ Id.VSub_DollarName '$PLUGIN_ENABLED_PATH') (/) (braced_var_sub token: (Token id:Id.VSub_Name val:PLUGIN_NAME span_id:1167) suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPercent arg_word:{(':*')}) ) (/subcommands/) (braced_var_sub token: (Token id:Id.VSub_Number val:1 span_id:1173) suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{('*:')}) ) ) } {(DQ ($ Id.VSub_At '$@'))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:implemented) op: assign_op.Equal rhs: {(1)} spids: [1184] ) ] ) ] spids: [1137 1160] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_eq left: {($ Id.VSub_DollarName '$implemented')} right: {(0)} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1203) ) ] action: [ (command.ForEach iter_name: script iter_words: [ {($ Id.VSub_DollarName '$PLUGIN_ENABLED_PATH') (/) (Id.Lit_Star '*') (/commands) } ] do_arg_iter: F body: (command.DoGroup children: [ (command.Sentence child: (C {(Id.KW_Set set)} {(Id.Lit_Other '+') (e)}) terminator: (Token id:Id.Op_Semi val:';' span_id:1226) ) (command.Sentence child: (C {($ Id.VSub_DollarName '$script')} {(DQ ($ Id.VSub_At '$@'))}) terminator: (Token id:Id.Op_Semi val:';' span_id:1234) ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:exit_code) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [1236] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:1239) ) (C {(Id.KW_Set set)} {(-e)}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_eq left: {(DQ ($ Id.VSub_DollarName '$exit_code'))} right: { (DQ ($ Id.VSub_DollarName '$DOKKU_NOT_IMPLEMENTED_EXIT' ) ) } ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1261) ) ] action: [ (command.ControlFlow token: (Token id: Id.ControlFlow_Continue val: continue span_id: 1266 ) ) ] spids: [1246 1263] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:implemented) op: assign_op.Equal rhs: {(1)} spids: [1272] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_ne left: {(DQ ($ Id.VSub_DollarName '$exit_code'))} right: {(DQ ($ Id.VSub_DollarName '$DOKKU_VALID_EXIT'))} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1291) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:1296) arg_word: {($ Id.VSub_DollarName '$exit_code')} ) ] spids: [1276 1293] ) ] ) ] ) ) ] spids: [1192 1204] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_eq left: {(DQ ($ Id.VSub_DollarName '$implemented'))} right: {(0)} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1324) ) ] action: [ (C {(dokku_log_warn)} { (DQ (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\`' span_id:1332) ) ($ Id.VSub_Star '$*') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\`' span_id:1334) ) (' is not a dokku command.') ) } ) (C {(dokku_log_warn)} { (DQ ('See ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\`' span_id:1343) ) ('dokku help') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\`' span_id:1345)) (' for a list of available commands.') ) } ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:1350) arg_word: {(1)} ) ] spids: [1311 1326] ) ] ) ] ) ) (command.Case to_match: {(DQ ($ Id.VSub_Number '$1'))} arms: [ (case_arm pat_list: [{(help)} {(SQ )}] action: [ (C {(export)} {(Id.Lit_VarLike 'LC_ALL=') (C)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ALL_PLUGIN_COMMANDS) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1386) command_list: (command.CommandList children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [ {(find)} {(-L)} {(DQ ($ Id.VSub_DollarName '$PLUGIN_PATH') (/enabled))} {(-name)} {(commands)} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:1400) fd: 2 arg_word: {(/dev/null)} ) ] ) (C {(true)}) ] ) ] ) ) } spids: [1385] ) ] ) (command.ForEach iter_name: plugin_command iter_words: [{($ Id.VSub_DollarName '$ALL_PLUGIN_COMMANDS')}] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 1431 ) command_list: (command.CommandList children: [ (C {(readlink)} {(-f)} {(DQ ($ Id.VSub_DollarName '$plugin_command'))} ) ] ) ) ) } right: {(Id.Lit_Other '*') (core-plugins) (Id.Lit_Other '*')} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1449) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CORE_PLUGIN_COMMANDS) op: assign_op.PlusEqual rhs: {(DQ ($ Id.VSub_DollarName '$plugin_command') (' '))} spids: [1454] ) ] ) ] spids: [1426 1451] ) ] ) ] ) ) (command.ForEach iter_name: plugin_command iter_words: [{($ Id.VSub_DollarName '$ALL_PLUGIN_COMMANDS')}] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 1487 ) command_list: (command.CommandList children: [ (C {(readlink)} {(-f)} {(DQ ($ Id.VSub_DollarName '$plugin_command'))} ) ] ) ) ) } right: {(Id.Lit_Other '*') (core-plugins) (Id.Lit_Other '*')} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1505) ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:COMMUNITY_PLUGIN_COMMANDS) op: assign_op.PlusEqual rhs: {(DQ ($ Id.VSub_DollarName '$plugin_command') (' '))} spids: [1510] ) ] ) ] spids: [1482 1507] ) ] ) ] ) ) (C {(echo)} { (DQ ( 'Usage: dokku [--quiet|--trace|--rm-container|--rm|--force] COMMAND <app> [command-specific-options]' ) ) } ) (C {(echo)} {(DQ )}) (C {(echo)} { (DQ ('Primary help options, type ') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:1545) ) ('dokku COMMAND:help') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:1547) ) (' for more details, or dokku help --all to see all commands.') ) } ) (C {(echo)} {(DQ )}) (C {(echo)} {(DQ ('Commands:'))}) (C {(echo)} {(DQ )}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_Number '$2'))} right: {(DQ (--all))} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1588) ) ] action: [ (command.Pipeline children: [ (command.ForEach iter_name: core_plugin_command iter_words: [{($ Id.VSub_DollarName '$CORE_PLUGIN_COMMANDS')}] do_arg_iter: F body: (command.DoGroup children: [(C {($ Id.VSub_DollarName '$core_plugin_command')} {(help)})] ) ) (C {(sort)}) (C {(column)} {(-c2)} {(-t)} {(-s) (Id.Lit_Comma ',')}) ] negated: F ) (C {(echo)} {(DQ )}) (C {(echo)} {(DQ ('Community plugin commands:'))}) (C {(echo)} {(DQ )}) (command.Pipeline children: [ (command.ForEach iter_name: community_plugin_command iter_words: [{($ Id.VSub_DollarName '$COMMUNITY_PLUGIN_COMMANDS')}] do_arg_iter: F body: (command.DoGroup children: [ (C {($ Id.VSub_DollarName '$community_plugin_command')} {(help)}) ] ) ) (C {(sort)}) (C {(column)} {(-c2)} {(-t)} {(-s) (Id.Lit_Comma ',')}) ] negated: F ) ] spids: [1572 1590] ) ] else_action: [ (command.Pipeline children: [ (command.ForEach iter_name: core_plugin_command iter_words: [{($ Id.VSub_DollarName '$CORE_PLUGIN_COMMANDS')}] do_arg_iter: F body: (command.DoGroup children: [(C {($ Id.VSub_DollarName '$core_plugin_command')} {(help)})] ) ) (C {(sort)}) (C {(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'/^.*:/d' span_id:1719))} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/\\s[\\[\\<\\-\\(].*,/,/' span_id:1725))} ) (C {(column)} {(-c2)} {(-t)} {(-s) (Id.Lit_Comma ',')}) ] negated: F ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_n child: {(DQ ($ Id.VSub_DollarName '$COMMUNITY_PLUGIN_COMMANDS'))} ) ) terminator: (Token id:Id.Op_Semi val:';' span_id:1751) ) ] action: [ (C {(echo)} {(DQ )}) (C {(echo)} {(DQ ('Community plugin commands:'))}) (C {(echo)} {(DQ )}) (command.Pipeline children: [ (command.ForEach iter_name: community_plugin_command iter_words: [{($ Id.VSub_DollarName '$COMMUNITY_PLUGIN_COMMANDS')}] do_arg_iter: F body: (command.DoGroup children: [ (C {($ Id.VSub_DollarName '$community_plugin_command')} {(help)}) ] ) ) (C {(sort)}) (C {(column)} {(-c2)} {(-t)} {(-s) (Id.Lit_Comma ',')}) ] negated: F ) ] spids: [1740 1753] ) ] ) ] ) ] spids: [1369 1373 1816 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [(C {(execute_dokku_cmd)} {(DQ ($ Id.VSub_At '$@'))})] spids: [1820 1821 1831 -1] ) ] ) ] )