summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cli/src/cli-cmd-log.c25
-rw-r--r--cli/src/cli-cmd-peer.c26
-rw-r--r--cli/src/cli-cmd-volume.c24
-rw-r--r--cli/src/cli-cmd.c8
-rw-r--r--cli/src/cli.c58
5 files changed, 85 insertions, 56 deletions
diff --git a/cli/src/cli-cmd-log.c b/cli/src/cli-cmd-log.c
index 1b71f2f92..e67f28091 100644
--- a/cli/src/cli-cmd-log.c
+++ b/cli/src/cli-cmd-log.c
@@ -37,6 +37,9 @@ extern struct rpc_clnt *global_rpc;
extern rpc_clnt_prog_t *cli_rpc_prog;
+int cli_cmd_log_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,
+ const char **words, int wordcount);
+
int
cli_cmd_log_cbk (struct cli_state *state, struct cli_cmd_word *word,
const char **words, int wordcount)
@@ -49,10 +52,32 @@ struct cli_cmd cli_log_cmds[] = {
{ "log <VOLNAME> ...",
cli_cmd_log_cbk,
"set log level for <VOLNAME>"},
+
+ { "log --help",
+ cli_cmd_log_help_cbk,
+ "help command for log"},
{ NULL, NULL, NULL }
};
+int
+cli_cmd_log_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,
+ const char **words, int wordcount)
+{
+ struct cli_cmd *cmd = NULL;
+
+
+
+ for (cmd = cli_log_cmds; cmd->pattern; cmd++)
+ cli_out ("%s - %s", cmd->pattern, cmd->desc);
+
+
+
+ if (!state->rl_enabled)
+ exit (0);
+
+ return 0;
+}
int
cli_cmd_log_register (struct cli_state *state)
diff --git a/cli/src/cli-cmd-peer.c b/cli/src/cli-cmd-peer.c
index f1847a68c..fef29c164 100644
--- a/cli/src/cli-cmd-peer.c
+++ b/cli/src/cli-cmd-peer.c
@@ -37,6 +37,9 @@ extern struct rpc_clnt *global_rpc;
extern rpc_clnt_prog_t *cli_rpc_prog;
+int cli_cmd_peer_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,
+ const char **words, int wordcount);
+
void
cli_cmd_probe_usage ()
{
@@ -184,10 +187,33 @@ struct cli_cmd cli_probe_cmds[] = {
{ "peer status",
cli_cmd_peer_status_cbk,
"list status of peers"},
+
+ { "peer --help",
+ cli_cmd_peer_help_cbk,
+ "Help command for peer "},
+
{ NULL, NULL, NULL }
};
+int
+cli_cmd_peer_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,
+ const char **words, int wordcount)
+{
+ struct cli_cmd *cmd = NULL;
+
+
+
+ for (cmd = cli_probe_cmds; cmd->pattern; cmd++)
+ cli_out ("%s - %s", cmd->pattern, cmd->desc);
+
+
+
+ if (!state->rl_enabled)
+ exit (0);
+
+ return 0;
+}
int
cli_cmd_probe_register (struct cli_state *state)
diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c
index ae2b6b2aa..283233cf9 100644
--- a/cli/src/cli-cmd-volume.c
+++ b/cli/src/cli-cmd-volume.c
@@ -36,6 +36,10 @@ extern struct rpc_clnt *global_rpc;
extern rpc_clnt_prog_t *cli_rpc_prog;
+int
+cli_cmd_volume_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,
+ const char **words, int wordcount);
+
void
cli_cmd_volume_start_usage ()
{
@@ -503,9 +507,29 @@ struct cli_cmd volume_cmds[] = {
cli_cmd_volume_set_cbk,
"set options for volume <VOLNAME>"},
+ { "volume --help",
+ cli_cmd_volume_help_cbk,
+ "display help for the volume command"},
+
+
{ NULL, NULL, NULL }
};
+int
+cli_cmd_volume_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,
+ const char **words, int wordcount)
+{
+ struct cli_cmd *cmd = NULL;
+
+ for (cmd = volume_cmds; cmd->pattern; cmd++)
+ cli_out ("%s - %s", cmd->pattern, cmd->desc);
+
+
+ if (!state->rl_enabled)
+ exit (0);
+
+ return 0;
+}
int
cli_cmd_volume_register (struct cli_state *state)
diff --git a/cli/src/cli-cmd.c b/cli/src/cli-cmd.c
index e526fe889..ae4e2db2c 100644
--- a/cli/src/cli-cmd.c
+++ b/cli/src/cli-cmd.c
@@ -44,6 +44,9 @@ static pthread_mutex_t conn_mutex = PTHREAD_MUTEX_INITIALIZER;
int cli_op_ret = 0;
int connected = 0;
+int cli_cmd_log_help_cbk (struct cli_state *state, struct cli_cmd_word *in_word,
+ const char **words, int wordcount);
+
static gf_boolean_t
cli_cmd_needs_connection (struct cli_cmd_word *word)
{
@@ -92,6 +95,9 @@ cli_cmd_process (struct cli_state *state, int argc, char **argv)
return -1;
}
+ if ( strcmp (word->word,"--help")==0 )
+ goto callback;
+
await_conn = cli_cmd_needs_connection (word);
if (await_conn) {
@@ -104,7 +110,7 @@ cli_cmd_process (struct cli_state *state, int argc, char **argv)
}
}
-
+callback:
ret = word->cbkfn (state, word, (const char **)argv, argc);
return ret;
diff --git a/cli/src/cli.c b/cli/src/cli.c
index c165255a0..48490ddf4 100644
--- a/cli/src/cli.c
+++ b/cli/src/cli.c
@@ -76,9 +76,6 @@
extern int connected;
/* using argp for command line parsing */
-static char gf_doc[] = "";
-
-static char argp_doc[] = "COMMAND [PARAM ...]";
const char *argp_program_version = "" \
PACKAGE_NAME" "PACKAGE_VERSION" built on "__DATE__" "__TIME__ \
@@ -91,14 +88,7 @@ const char *argp_program_version = "" \
const char *argp_program_bug_address = "<" PACKAGE_BUGREPORT ">";
-static struct argp_option gf_options[] = {
- {0, 0, 0, 0, "Basic options:"},
- {"debug", ARGP_DEBUG_KEY, 0, 0,
- "Process runs in foreground and logs to console"},
- {"remote-port", ARGP_PORT_KEY, "PORT", 0,
- "glusterd port to connect with"},
- {0, }
-};
+
struct rpc_clnt *global_rpc;
@@ -107,44 +97,7 @@ rpc_clnt_prog_t *cli_rpc_prog;
extern struct rpc_clnt_program cli3_1_prog;
-static error_t
-parse_opts (int key, char *arg, struct argp_state *argp_state)
-{
- struct cli_state *state = NULL;
- char **argv = NULL;
-
- state = argp_state->input;
-
- switch (key) {
- case ARGP_DEBUG_KEY:
- break;
- case ARGP_PORT_KEY:
- state->remote_port = strtol (arg, NULL, 0);
- break;
- case ARGP_KEY_ARG:
- if (!state->argc) {
- argv = calloc (state->argc + 2,
- sizeof (*state->argv));
- } else {
- argv = realloc (state->argv, (state->argc + 2) *
- sizeof (*state->argv));
- }
- if (!argv)
- return -1;
-
- state->argv = argv;
-
- argv[state->argc] = strdup (arg);
- if (!argv[state->argc])
- return -1;
- state->argc++;
- argv[state->argc] = NULL;
-
- break;
- }
- return 0;
-}
static char *
@@ -375,14 +328,9 @@ int
parse_cmdline (int argc, char *argv[], struct cli_state *state)
{
int ret = 0;
- struct argp argp = { 0,};
-
- argp.options = gf_options;
- argp.parser = parse_opts;
- argp.args_doc = argp_doc;
- argp.doc = gf_doc;
- ret = argp_parse (&argp, argc, argv, ARGP_IN_ORDER, NULL, state);
+ state->argc=argc-1;
+ state->argv=&argv[1];
return ret;
}