diff options
Diffstat (limited to 'cli/src/cli-cmd-misc.c')
| -rw-r--r-- | cli/src/cli-cmd-misc.c | 77 | 
1 files changed, 62 insertions, 15 deletions
diff --git a/cli/src/cli-cmd-misc.c b/cli/src/cli-cmd-misc.c index 9f8c159f073..c887515af85 100644 --- a/cli/src/cli-cmd-misc.c +++ b/cli/src/cli-cmd-misc.c @@ -23,6 +23,9 @@ extern struct rpc_clnt *global_rpc;  extern rpc_clnt_prog_t *cli_rpc_prog;  extern struct cli_cmd volume_cmds[]; +extern struct cli_cmd bitrot_cmds[]; +extern struct cli_cmd quota_cmds[]; +extern struct cli_cmd tier_cmds[];  extern struct cli_cmd cli_probe_cmds[];  extern struct cli_cmd cli_log_cmds[];  extern struct cli_cmd cli_system_cmds[]; @@ -38,37 +41,76 @@ cli_cmd_quit_cbk (struct cli_state *state, struct cli_cmd_word *word,          exit (0);  } + +static gf_boolean_t +cli_is_help_command (const char *pattern) +{ +        /* FixFixFix +         * This is not the best way to determine whether +         * this is a help command +         */ +        if (strstr (pattern, "help")) +                return _gf_true; + +        return _gf_false; +} + +  int  cli_cmd_display_help (struct cli_state *state, struct cli_cmd_word *in_word,                        const char **words, int wordcount)  { -        struct cli_cmd        *cmd[] = {volume_cmds, cli_probe_cmds, -                                       cli_misc_cmds, snapshot_cmds, -                                       global_cmds, NULL}; -        struct cli_cmd        *cmd_ind = NULL; -        int                   i = 0; +        struct cli_cmd        *cmd[] = {cli_misc_cmds, cli_probe_cmds, +                                        volume_cmds, bitrot_cmds, quota_cmds, +#if !defined(__NetBSD__) +                                        tier_cmds, +#endif +                                        snapshot_cmds, global_cmds, NULL}; +        struct cli_cmd        *cmd_ind      = NULL; +        int                    i            = 0; +        gf_boolean_t           list_all     = _gf_false;           /* cli_system_cmds commands for internal usage             they are not exposed           */ -        for (i=0; cmd[i]!=NULL; i++) -                for (cmd_ind = cmd[i]; cmd_ind->pattern; cmd_ind++) -                        if (_gf_false == cmd_ind->disable) -                                cli_out ("%s - %s", cmd_ind->pattern, -                                         cmd_ind->desc); +        /* If "help all" */ +        if (wordcount == 2) +                list_all = _gf_true; + +        for (i = 0; cmd[i] != NULL; i++) { +                for (cmd_ind = cmd[i]; cmd_ind->pattern; cmd_ind++) { +                        if ((_gf_false == cmd_ind->disable) && +                            cli_is_help_command (cmd_ind->pattern)) { +                                if (list_all && (cmd_ind->cbk)) { +                                        cmd_ind->cbk (state, in_word, words, +                                                      wordcount); +                                } else { +                                        cli_out (" %-25s- %s", cmd_ind->pattern, +                                                 cmd_ind->desc); +                                } +                        } +                } +        } + +        cli_out ("\n");          return 0;  } + +struct cli_cmd cli_help_cmds[] = { +        { "help [all]", +           cli_cmd_display_help, +           "display help for command classes"}, + +        { NULL, NULL, NULL } +}; + +  struct cli_cmd cli_misc_cmds[] = {          { "quit",            cli_cmd_quit_cbk,            "quit"}, - -        { "help", -           cli_cmd_display_help, -           "display command options"}, -          { "exit",            cli_cmd_quit_cbk,            "exit"}, @@ -84,7 +126,12 @@ cli_cmd_misc_register (struct cli_state *state)          struct cli_cmd *cmd = NULL;          for (cmd = cli_misc_cmds; cmd->pattern; cmd++) { +                ret = cli_cmd_register (&state->tree, cmd); +                if (ret) +                        goto out; +        } +        for (cmd = cli_help_cmds; cmd->pattern; cmd++) {                  ret = cli_cmd_register (&state->tree, cmd);                  if (ret)                          goto out;  | 
