(command.CommandList children: [ (C {<set>} {<-eo>} {<pipefail>}) (C {<shopt>} {<-s>} {<nullglob>}) (C {<export>} {<Id.Lit_VarLike 'DOKKU_ROOT='> (braced_var_sub token: <Id.VSub_Name DOKKU_ROOT> suffix_op: (suffix_op.Unary tok: <Id.VTest_ColonEquals ':='> arg_word: {(word_part.TildeSub token:<Id.Lit_TildeLike '~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_names: [f] iterable: (for_iter.Words words: [{($ Id.VSub_DollarName '$DOKKU_ROOT') <'/.dokkurc/'> <Id.Lit_Star '*'>}] ) body: (command.DoGroup children: [ (command.Sentence child: (C {<source>} {(DQ ($ Id.VSub_DollarName '$f'))}) terminator: <Id.Op_Semi _> ) ] ) ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr:(bool_expr.WordTest w:{($ Id.VSub_DollarName '$DOKKU_TRACE')})) (C {<set>} {<-x>}) ] ) (command.Case to_match: {(DQ (command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<lsb_release>} {<-si>})))} arms: [ (case_arm pat_list: [{<Arch>}] action: [ (C {<export>} {<Id.Lit_VarLike 'DOKKU_DISTRO='> (braced_var_sub token: <Id.VSub_Name DOKKU_DISTRO> suffix_op: (suffix_op.Unary tok:<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: <Id.VSub_Name DOKKU_DISTRO> suffix_op: (suffix_op.Unary tok:<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: <Id.VSub_Name DOKKU_DISTRO> suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonEquals ':='> arg_word:{(DQ <ubuntu>)}) ) } ) ] spids: [140 141 156 -1] ) ] ) (C {<export>} {<Id.Lit_VarLike 'DOKKU_IMAGE='> (braced_var_sub token: <Id.VSub_Name DOKKU_IMAGE> suffix_op: (suffix_op.Unary tok: <Id.VTest_ColonEquals ':='> arg_word: {(DQ <'gliderlabs/herokuish'>)} ) ) } ) (C {<export>} {<Id.Lit_VarLike 'DOKKU_LIB_ROOT='> (braced_var_sub token: <Id.VSub_Name DOKKU_LIB_PATH> suffix_op: (suffix_op.Unary tok: <Id.VTest_ColonEquals ':='> arg_word: {(DQ <'/var/lib/dokku'>)} ) ) } ) (C {<export>} {<Id.Lit_VarLike 'PLUGIN_PATH='> (braced_var_sub token: <Id.VSub_Name PLUGIN_PATH> suffix_op: (suffix_op.Unary tok: <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: <Id.VSub_Name PLUGIN_AVAILABLE_PATH> suffix_op: (suffix_op.Unary tok: <Id.VTest_ColonEquals ':='> arg_word: {(DQ ($ Id.VSub_DollarName '$PLUGIN_PATH') <'/available'>)} ) ) } ) (C {<export>} {<Id.Lit_VarLike 'PLUGIN_ENABLED_PATH='> (braced_var_sub token: <Id.VSub_Name PLUGIN_ENABLED_PATH> suffix_op: (suffix_op.Unary tok: <Id.VTest_ColonEquals ':='> arg_word: {(DQ ($ Id.VSub_DollarName '$PLUGIN_PATH') <'/enabled'>)} ) ) } ) (C {<export>} {<Id.Lit_VarLike 'PLUGIN_CORE_PATH='> (braced_var_sub token: <Id.VSub_Name PLUGIN_CORE_PATH> suffix_op: (suffix_op.Unary tok: <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: <Id.VSub_Name PLUGIN_CORE_AVAILABLE_PATH> suffix_op: (suffix_op.Unary tok: <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: <Id.VSub_Name PLUGIN_CORE_ENABLED_PATH> suffix_op: (suffix_op.Unary tok: <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: <Id.VSub_Name DOKKU_LOGS_DIR> suffix_op: (suffix_op.Unary tok: <Id.VTest_ColonEquals ':='> arg_word: {(DQ <'/var/log/dokku'>)} ) ) } ) (C {<export>} {<Id.Lit_VarLike 'DOKKU_EVENTS_LOGFILE='> (braced_var_sub token: <Id.VSub_Name DOKKU_EVENTS_LOGFILE> suffix_op: (suffix_op.Unary tok: <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:<Id.Op_LParen _> words:[{(DQ ($ Id.VSub_At '$@'))}])} spids: [325] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_EqualTilde left: { (DQ (braced_var_sub token: <Id.VSub_Name args> bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 0>}) ) ) } right: {<Id.Lit_Other '^'> <--> <Id.Lit_Other .> <Id.Lit_Other '*'>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ForEach iter_names: [arg] iterable: (for_iter.Words words:[{(DQ ($ Id.VSub_At '$@'))}]) body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_DollarName '$arg'))} right: {(DQ <--app>)} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [(C {<shift>} {<2>})] spids: [372 389] ) (if_arm cond: (condition.Shell commands: [ (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: <Id.Op_Semi _> ) ] ) action: [(C {<shift>} {<1>})] spids: [397 415] ) ] else_action: [(command.ControlFlow token:<Id.ControlFlow_Break break>)] ) ] ) ) ] 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: (condition.Shell commands: [ (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: <Id.Left_DollarParen '$('> child: (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: <Id.Op_Semi _> ) ] ) action: [ (C {<export>} {<Id.Lit_VarLike 'SSH_USER='> (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<id>} {<-un>}) ) } ) (C {<sudo>} {<-u>} {<dokku>} {<-E>} {<-H>} {(DQ ($ Id.VSub_Number '$0'))} {(DQ ($ Id.VSub_At '$@'))} ) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {($ Id.VSub_QMark '$?')} ) ] spids: [446 497] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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: <Id.Left_DollarParen '$('> child: (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: <Id.Left_DollarParen '$('> child: (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: <Id.Op_Semi _> ) ] ) action: [(C {<dokku_log_fail>} {(DQ <'This command must be run as root'>)})] spids: [536 595] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_n child: {(DQ ($ Id.VSub_DollarName '$SSH_ORIGINAL_COMMAND'))} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<export>} {<-n>} {<SSH_ORIGINAL_COMMAND>}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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: <Id.Op_Semi _> ) ] ) action: [ (command.Simple words: [{<xargs>} {($ Id.VSub_Number '$0')}] redirects: [ (redir op: <Id.Redir_TLess '<<<'> loc: (redir_loc.Fd fd:0) arg: {($ Id.VSub_DollarName '$SSH_ORIGINAL_COMMAND')} ) ] do_fork: T ) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {($ Id.VSub_QMark '$?')} ) ] spids: [630 657] ) ] else_action: [ (C {<set>} {<-f>}) (C {($ Id.VSub_Number '$0')} {($ Id.VSub_DollarName '$SSH_ORIGINAL_COMMAND')}) (C {<set>} {<Id.Lit_Other '+'> <f>}) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {($ Id.VSub_QMark '$?')} ) ] ) ] spids: [607 620] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.Pipeline children: [(C {<dokku_auth>} {(DQ ($ Id.VSub_At '$@'))})] negated: T ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<dokku_log_fail>} {(DQ <'Access denied'>)}) (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [710 722] ) ] ) (command.ShFunction name: execute_dokku_cmd body: (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: <Id.Op_Semi _> ) (C {<local>} {<script>}) (C {<local>} {<Id.Lit_VarLike 'argv='> (sh_array_literal left: <Id.Op_LParen _> words: [{(DQ ($ Id.VSub_At '$@'))}] ) } ) (command.Case to_match: {(DQ ($ Id.VSub_DollarName '$PLUGIN_NAME'))} arms: [ (case_arm pat_list: [{<events>} {<events> <Id.Lit_Colon ':'> <Id.Lit_Star '*'>}] action: [ (C {<local>} {<Id.Lit_VarLike 'PLUGIN_NAME='> (braced_var_sub token: <Id.VSub_Name PLUGIN_NAME> 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_Colon ':'> <Id.Lit_Star '*'>}] action: [ (C {<local>} {<Id.Lit_VarLike 'PLUGIN_NAME='> (braced_var_sub token: <Id.VSub_Name PLUGIN_NAME> 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: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<readlink>} {<-f>} { (DQ ($ Id.VSub_DollarName '$PLUGIN_ENABLED_PATH') <'/'> (braced_var_sub token: <Id.VSub_Name PLUGIN_NAME> suffix_op: (suffix_op.Unary tok: <Id.VOp1_DPercent '%%'> arg_word: {<':'> <Id.Lit_Other '*'>} ) ) ) } ) ) ) } right: {<Id.Lit_Other '*'> <core-plugins> <Id.Lit_Other '*'>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (braced_var_sub token: <Id.VSub_Name argv> bracket_op: (bracket_op.ArrayIndex expr:{<Id.Lit_Digits 0>}) ) } right: {(DQ ($ Id.VSub_DollarName '$PLUGIN_CMD'))} ) ) (C {<shift>} {<1>}) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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: <Id.Op_Semi _> ) ] ) action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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: <Id.VSub_Name argv> bracket_op: (bracket_op.ArrayIndex expr: {<Id.Lit_Digits 1>} ) ) } right: {(DQ <--no-restart>)} ) ) ] ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<shift>} {<1>}) (C {<set>} {<-->} {(DQ <--no-restart>)} {(DQ ($ Id.VSub_DollarName '$DOKKU_APP_NAME'))} {(DQ ($ Id.VSub_At '$@'))} ) ] spids: [971 1006] ) ] else_action: [ (C {<set>} {<-->} {(DQ ($ Id.VSub_DollarName '$DOKKU_APP_NAME'))} {(DQ ($ Id.VSub_At '$@'))} ) ] ) ] spids: [955 968] ) ] ) (C {<set>} {<-->} {(DQ ($ Id.VSub_DollarName '$PLUGIN_CMD'))} {(DQ ($ Id.VSub_At '$@'))} ) ] spids: [895 928] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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: <Id.Op_Semi _> ) ] ) 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: [1099] ) ] ) ] spids: [1070 1084] ) (if_arm cond: (condition.Shell commands: [ (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: <Id.Op_Semi _> ) ] ) 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: [1134] ) ] ) ] spids: [1103 1118] ) (if_arm cond: (condition.Shell commands: [ (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: <Id.VSub_Name PLUGIN_NAME> suffix_op: (suffix_op.Unary tok: <Id.VOp1_DPercent '%%'> arg_word: {<':'> <Id.Lit_Other '*'>} ) ) <'/subcommands/'> (braced_var_sub token: <Id.VSub_Number 1> suffix_op: (suffix_op.Unary tok: <Id.VOp1_Pound '#'> arg_word: {<Id.Lit_Other '*'> <':'>} ) ) } ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C { (DQ ($ Id.VSub_DollarName '$PLUGIN_ENABLED_PATH') <'/'> (braced_var_sub token: <Id.VSub_Name PLUGIN_NAME> suffix_op: (suffix_op.Unary tok: <Id.VOp1_DPercent '%%'> arg_word: {<':'> <Id.Lit_Other '*'>} ) ) <'/subcommands/'> (braced_var_sub token: <Id.VSub_Number 1> suffix_op: (suffix_op.Unary tok: <Id.VOp1_Pound '#'> arg_word: {<Id.Lit_Other '*'> <':'>} ) ) ) } {(DQ ($ Id.VSub_At '$@'))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:implemented) op: assign_op.Equal rhs: {<1>} spids: [1189] ) ] ) ] spids: [1138 1163] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_eq left: {($ Id.VSub_DollarName '$implemented')} right: {<0>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.ForEach iter_names: [script] iterable: (for_iter.Words words: [ {($ Id.VSub_DollarName '$PLUGIN_ENABLED_PATH') <'/'> <Id.Lit_Star '*'> <'/commands'> } ] ) body: (command.DoGroup children: [ (command.Sentence child: (C {<set>} {<Id.Lit_Other '+'> <e>}) terminator: <Id.Op_Semi _> ) (command.Sentence child: (C {($ Id.VSub_DollarName '$script')} {(DQ ($ Id.VSub_At '$@'))}) terminator: <Id.Op_Semi _> ) (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: [1241] ) ] ) terminator: <Id.Op_Semi _> ) (C {<set>} {<-e>}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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: <Id.Op_Semi _> ) ] ) action: [ (command.ControlFlow token: <Id.ControlFlow_Continue continue> ) ] spids: [1251 1268] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:implemented) op: assign_op.Equal rhs: {<1>} spids: [1277] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (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: <Id.Op_Semi _> ) ] ) action: [ (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {($ Id.VSub_DollarName '$exit_code')} ) ] spids: [1281 1298] ) ] ) ] ) ) ] spids: [1197 1209] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_eq left: {(DQ ($ Id.VSub_DollarName '$implemented'))} right: {<0>} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<dokku_log_warn>} { (DQ (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\`'>) ($ Id.VSub_Star '$*') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\`'>) <' is not a dokku command.'> ) } ) (C {<dokku_log_warn>} { (DQ <'See '> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\`'>) <'dokku help'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\`'>) <' for a list of available commands.'> ) } ) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {<1>} ) ] spids: [1316 1331] ) ] ) ] ) ) (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: <Id.Left_DollarParen '$('> child: (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [ {<find>} {<-L>} {(DQ ($ Id.VSub_DollarName '$PLUGIN_PATH') <'/enabled'>)} {<-name>} {<commands>} ] redirects: [ (redir op: <Id.Redir_Great '2>'> loc: (redir_loc.Fd fd:2) arg: {<'/dev/null'>} ) ] do_fork: T ) (C {<true>}) ] ) ) } spids: [1390] ) ] ) (command.ForEach iter_names: [plugin_command] iterable: (for_iter.Words words:[{($ Id.VSub_DollarName '$ALL_PLUGIN_COMMANDS')}]) body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<readlink>} {<-f>} {(DQ ($ Id.VSub_DollarName '$plugin_command'))} ) ) ) } right: {<Id.Lit_Other '*'> <core-plugins> <Id.Lit_Other '*'>} ) ) terminator: <Id.Op_Semi _> ) ] ) 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: [1459] ) ] ) ] spids: [1431 1456] ) ] ) ] ) ) (command.ForEach iter_names: [plugin_command] iterable: (for_iter.Words words:[{($ Id.VSub_DollarName '$ALL_PLUGIN_COMMANDS')}]) body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobNEqual left: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<readlink>} {<-f>} {(DQ ($ Id.VSub_DollarName '$plugin_command'))} ) ) ) } right: {<Id.Lit_Other '*'> <core-plugins> <Id.Lit_Other '*'>} ) ) terminator: <Id.Op_Semi _> ) ] ) 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: [1515] ) ] ) ] spids: [1487 1512] ) ] ) ] ) ) (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:<Id.Lit_EscapedChar '\\"'>) <'dokku COMMAND:help'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) <' 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: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Binary op_id: Id.BoolBinary_GlobDEqual left: {(DQ ($ Id.VSub_Number '$2'))} right: {(DQ <--all>)} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Pipeline children: [ (command.ForEach iter_names: [core_plugin_command] iterable: (for_iter.Words words: [{($ Id.VSub_DollarName '$CORE_PLUGIN_COMMANDS')}] ) 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_names: [community_plugin_command] iterable: (for_iter.Words words: [{($ Id.VSub_DollarName '$COMMUNITY_PLUGIN_COMMANDS')}] ) 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: [1577 1595] ) ] else_action: [ (command.Pipeline children: [ (command.ForEach iter_names: [core_plugin_command] iterable: (for_iter.Words words: [{($ Id.VSub_DollarName '$CORE_PLUGIN_COMMANDS')}] ) body: (command.DoGroup children: [(C {($ Id.VSub_DollarName '$core_plugin_command')} {<help>})] ) ) (C {<sort>}) (C {<sed>} {<-e>} {(SQ <'/^.*:/d'>)} {<-e>} {(SQ <'s/\\s[\\[\\<\\-\\(].*,/,/'>)}) (C {<column>} {<-c2>} {<-t>} {<-s> <Id.Lit_Comma ','>}) ] negated: F ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_n child: {(DQ ($ Id.VSub_DollarName '$COMMUNITY_PLUGIN_COMMANDS'))} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<echo>} {(DQ )}) (C {<echo>} {(DQ <'Community plugin commands:'>)}) (C {<echo>} {(DQ )}) (command.Pipeline children: [ (command.ForEach iter_names: [community_plugin_command] iterable: (for_iter.Words words: [{($ Id.VSub_DollarName '$COMMUNITY_PLUGIN_COMMANDS')}] ) 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: [1745 1758] ) ] ) ] ) ] spids: [1374 1378 1821 -1] ) (case_arm pat_list: [{<Id.Lit_Star '*'>}] action: [(C {<execute_dokku_cmd>} {(DQ ($ Id.VSub_At '$@'))})] spids: [1825 1826 1836 -1] ) ] ) ] )