[Asterisk-code-review] cli: Fix various CLI documentation and completion issues (asterisk[13])
Sean Bright
asteriskteam at digium.com
Mon Feb 13 10:44:55 CST 2017
Sean Bright has uploaded a new change for review. ( https://gerrit.asterisk.org/4935 )
Change subject: cli: Fix various CLI documentation and completion issues
......................................................................
cli: Fix various CLI documentation and completion issues
* app_minivm: Use built-in completion facilities to complete optional
arguments.
* app_voicemail: Use built-in completion facilities to complete
optional arguments.
* app_confbridge: Add missing colons after 'Usage' text.
* chan_alsa: Use built-in completion facilities to complete optional
arguments.
* chan_sip: Use built-in completion facilities to complete optional
arguments. Add completions for 'load' for 'sip show user', 'sip show
peer', and 'sip qualify peer.'
* chan_skinny: Correct and extend completions for 'skinny reset' and
'skinny show line.'
* func_odbc: Correct completions for 'odbc read' and 'odbc write'
* main/asterisk: Correct and extend completions for 'core show file
version.'
* main/astmm: Use built-in completion facilities to complete arguments
for 'memory' commands.
* main/bridge: Correct completions for 'bridge kick.'
* main/ccss: Use built-in completion facilities to complete arguments
for 'cc cancel' command.
* main/cli: Add 'all' completion for 'channel request hangup.' Correct
completions for 'core set debug channel.' Correct completions for 'core
show calls.'
* main/pbx_app: Remove redundant completions for 'core show
applications.'
* main/pbx_hangup_handler: Remove unused completions for 'core show
hanguphandlers all.'
* res_sorcery_memory_cache: Add completion for 'reload' argument of
'sorcery memory cache stale' and properly implement.
Change-Id: Iee58c7392f6fec34ad9d596109117af87697bbca
---
M apps/app_minivm.c
M apps/app_voicemail.c
M apps/confbridge/conf_config_parser.c
M channels/chan_alsa.c
M channels/chan_sip.c
M channels/chan_skinny.c
M funcs/func_odbc.c
M main/asterisk.c
M main/astmm.c
M main/bridge.c
M main/ccss.c
M main/cli.c
M main/pbx_app.c
M main/pbx_hangup_handler.c
M res/res_sorcery_memory_cache.c
15 files changed, 129 insertions(+), 110 deletions(-)
git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/35/4935/1
diff --git a/apps/app_minivm.c b/apps/app_minivm.c
index 789a48a..da2956f 100644
--- a/apps/app_minivm.c
+++ b/apps/app_minivm.c
@@ -3016,11 +3016,9 @@
struct minivm_account *vmu;
const char *domain = "";
- /* 0 - voicemail; 1 - list; 2 - accounts; 3 - for; 4 - <domain> */
+ /* 0 - minivm; 1 - list; 2 - accounts; 3 - for; 4 - <domain> */
if (pos > 4)
return NULL;
- if (pos == 3)
- return (state == 0) ? ast_strdup("for") : NULL;
wordlen = strlen(word);
AST_LIST_TRAVERSE(&minivm_accounts, vmu, list) {
if (!strncasecmp(word, vmu->domain, wordlen)) {
@@ -3042,9 +3040,9 @@
switch (cmd) {
case CLI_INIT:
- e->command = "minivm list accounts";
+ e->command = "minivm list accounts [for]";
e->usage =
- "Usage: minivm list accounts\n"
+ "Usage: minivm list accounts [for <domain>]\n"
" Lists all mailboxes currently set up\n";
return NULL;
case CLI_GENERATE:
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index 1c75105..5e4df8e 100644
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -12668,11 +12668,9 @@
struct ast_vm_user *vmu;
const char *context = "";
- /* 0 - show; 1 - voicemail; 2 - users; 3 - for; 4 - <context> */
+ /* 0 - voicemail; 1 - show; 2 - users; 3 - for; 4 - <context> */
if (pos > 4)
return NULL;
- if (pos == 3)
- return (state == 0) ? ast_strdup("for") : NULL;
wordlen = strlen(word);
AST_LIST_TRAVERSE(&users, vmu, list) {
if (!strncasecmp(word, vmu->context, wordlen)) {
@@ -12695,7 +12693,7 @@
switch (cmd) {
case CLI_INIT:
- e->command = "voicemail show users";
+ e->command = "voicemail show users [for]";
e->usage =
"Usage: voicemail show users [for <context>]\n"
" Lists all mailboxes currently set up\n";
diff --git a/apps/confbridge/conf_config_parser.c b/apps/confbridge/conf_config_parser.c
index f5bb7eb..96ed892 100644
--- a/apps/confbridge/conf_config_parser.c
+++ b/apps/confbridge/conf_config_parser.c
@@ -1343,7 +1343,7 @@
case CLI_INIT:
e->command = "confbridge show profile users";
e->usage =
- "Usage confbridge show profile users\n";
+ "Usage: confbridge show profile users\n";
return NULL;
case CLI_GENERATE:
return NULL;
@@ -1373,7 +1373,7 @@
case CLI_INIT:
e->command = "confbridge show profile user";
e->usage =
- "Usage confbridge show profile user [<profile name>]\n";
+ "Usage: confbridge show profile user [<profile name>]\n";
return NULL;
case CLI_GENERATE:
if (a->pos == 4) {
@@ -1494,7 +1494,7 @@
case CLI_INIT:
e->command = "confbridge show profile bridges";
e->usage =
- "Usage confbridge show profile bridges\n";
+ "Usage: confbridge show profile bridges\n";
return NULL;
case CLI_GENERATE:
return NULL;
@@ -1526,7 +1526,7 @@
case CLI_INIT:
e->command = "confbridge show profile bridge";
e->usage =
- "Usage confbridge show profile bridge <profile name>\n";
+ "Usage: confbridge show profile bridge <profile name>\n";
return NULL;
case CLI_GENERATE:
if (a->pos == 4) {
@@ -1668,7 +1668,7 @@
case CLI_INIT:
e->command = "confbridge show menus";
e->usage =
- "Usage confbridge show profile menus\n";
+ "Usage: confbridge show profile menus\n";
return NULL;
case CLI_GENERATE:
return NULL;
@@ -1702,7 +1702,7 @@
case CLI_INIT:
e->command = "confbridge show menu";
e->usage =
- "Usage confbridge show menu [<menu name>]\n";
+ "Usage: confbridge show menu [<menu name>]\n";
return NULL;
case CLI_GENERATE:
if (a->pos == 3) {
diff --git a/channels/chan_alsa.c b/channels/chan_alsa.c
index 6508a1e..61ea2e7 100644
--- a/channels/chan_alsa.c
+++ b/channels/chan_alsa.c
@@ -639,29 +639,13 @@
return tmp;
}
-static char *autoanswer_complete(const char *line, const char *word, int pos, int state)
-{
- switch (state) {
- case 0:
- if (!ast_strlen_zero(word) && !strncasecmp(word, "on", MIN(strlen(word), 2)))
- return ast_strdup("on");
- case 1:
- if (!ast_strlen_zero(word) && !strncasecmp(word, "off", MIN(strlen(word), 3)))
- return ast_strdup("off");
- default:
- return NULL;
- }
-
- return NULL;
-}
-
static char *console_autoanswer(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
char *res = CLI_SUCCESS;
switch (cmd) {
case CLI_INIT:
- e->command = "console autoanswer";
+ e->command = "console autoanswer [on|off]";
e->usage =
"Usage: console autoanswer [on|off]\n"
" Enables or disables autoanswer feature. If used without\n"
@@ -669,7 +653,7 @@
" The default value of autoanswer is in 'alsa.conf'.\n";
return NULL;
case CLI_GENERATE:
- return autoanswer_complete(a->line, a->word, a->pos, a->n);
+ return NULL;
}
if ((a->argc != 2) && (a->argc != 3))
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 83f72b9..f31302e 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -19527,7 +19527,7 @@
switch (cmd) {
case CLI_INIT:
- e->command = "sip show inuse";
+ e->command = "sip show inuse [all]";
e->usage =
"Usage: sip show inuse [all]\n"
" List all SIP devices usage counters and limits.\n"
@@ -19717,7 +19717,7 @@
switch (cmd) {
case CLI_INIT:
- e->command = "sip show users";
+ e->command = "sip show users [like]";
e->usage =
"Usage: sip show users [like <pattern>]\n"
" Lists all known SIP users.\n"
@@ -19856,7 +19856,7 @@
{
switch (cmd) {
case CLI_INIT:
- e->command = "sip show peers";
+ e->command = "sip show peers [like]";
e->usage =
"Usage: sip show peers [like <pattern>]\n"
" Lists all known SIP peers.\n"
@@ -20570,7 +20570,12 @@
" Option \"load\" forces lookup of peer in realtime storage.\n";
return NULL;
case CLI_GENERATE:
- return complete_sip_show_peer(a->line, a->word, a->pos, a->n);
+ if (a->pos == 4) {
+ static const char * const completions[] = { "load", NULL };
+ return ast_cli_complete(a->word, completions, a->n);
+ } else {
+ return complete_sip_show_peer(a->line, a->word, a->pos, a->n);
+ }
}
return _sip_show_peer(0, a->fd, NULL, NULL, a->argc, (const char **) a->argv);
}
@@ -20740,7 +20745,12 @@
" Option \"load\" forces lookup of peer in realtime storage.\n";
return NULL;
case CLI_GENERATE:
- return complete_sip_show_peer(a->line, a->word, a->pos, a->n);
+ if (a->pos == 4) {
+ static const char * const completions[] = { "load", NULL };
+ return ast_cli_complete(a->word, completions, a->n);
+ } else {
+ return complete_sip_show_peer(a->line, a->word, a->pos, a->n);
+ }
}
return _sip_qualify_peer(0, a->fd, NULL, NULL, a->argc, (const char **) a->argv);
}
@@ -21111,7 +21121,12 @@
" Option \"load\" forces lookup of peer in realtime storage.\n";
return NULL;
case CLI_GENERATE:
- return complete_sip_show_user(a->line, a->word, a->pos, a->n);
+ if (a->pos == 4) {
+ static const char * const completions[] = { "load", NULL };
+ return ast_cli_complete(a->word, completions, a->n);
+ } else {
+ return complete_sip_show_user(a->line, a->word, a->pos, a->n);
+ }
}
if (a->argc < 4)
diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c
index 5cdfe1b..9cde775 100644
--- a/channels/chan_skinny.c
+++ b/channels/chan_skinny.c
@@ -3924,24 +3924,40 @@
static char *complete_skinny_reset(const char *line, const char *word, int pos, int state)
{
- return (pos == 2 ? complete_skinny_devices(word, state) : NULL);
+ if (pos == 2) {
+ static const char * const completions[] = { "all", NULL };
+ char *ret = ast_cli_complete(word, completions, state);
+ if (!ret) {
+ ret = complete_skinny_devices(word, state - 1);
+ }
+ return ret;
+ } else if (pos == 3) {
+ static const char * const completions[] = { "restart", NULL };
+ return ast_cli_complete(word, completions, state);
+ }
+
+ return NULL;
}
static char *complete_skinny_show_line(const char *line, const char *word, int pos, int state)
{
- struct skinny_device *d;
- struct skinny_line *l;
- int wordlen = strlen(word), which = 0;
+ if (pos == 3) {
+ struct skinny_device *d;
+ struct skinny_line *l;
+ int wordlen = strlen(word), which = 0;
- if (pos != 3)
- return NULL;
-
- AST_LIST_TRAVERSE(&devices, d, list) {
- AST_LIST_TRAVERSE(&d->lines, l, list) {
- if (!strncasecmp(word, l->name, wordlen) && ++which > state) {
- return ast_strdup(l->name);
+ AST_LIST_TRAVERSE(&devices, d, list) {
+ AST_LIST_TRAVERSE(&d->lines, l, list) {
+ if (!strncasecmp(word, l->name, wordlen) && ++which > state) {
+ return ast_strdup(l->name);
+ }
}
}
+ } else if (pos == 4) {
+ static const char * const completions[] = { "on", NULL };
+ return ast_cli_complete(word, completions, state);
+ } else if (pos == 5) {
+ return complete_skinny_devices(word, state);
}
return NULL;
@@ -4583,7 +4599,7 @@
case CLI_INIT:
e->command = "skinny show line";
e->usage =
- "Usage: skinny show line <Line> [ on <DeviceID|DeviceName> ]\n"
+ "Usage: skinny show line <Line> [on <DeviceID|DeviceName>]\n"
" List all lineinformation of a specific line known to the Skinny subsystem.\n";
return NULL;
case CLI_GENERATE:
diff --git a/funcs/func_odbc.c b/funcs/func_odbc.c
index e2ca7c8..84b6e68 100644
--- a/funcs/func_odbc.c
+++ b/funcs/func_odbc.c
@@ -1419,7 +1419,8 @@
AST_RWLIST_UNLOCK(&queries);
return NULL;
} else if (a->pos == 4) {
- return a->n == 0 ? ast_strdup("exec") : NULL;
+ static const char * const completions[] = { "exec", NULL };
+ return ast_cli_complete(a->word, completions, a->n);
} else {
return NULL;
}
@@ -1625,7 +1626,8 @@
AST_RWLIST_UNLOCK(&queries);
return NULL;
} else if (a->pos == 5) {
- return a->n == 0 ? ast_strdup("exec") : NULL;
+ static const char * const completions[] = { "exec", NULL };
+ return ast_cli_complete(a->word, completions, a->n);
} else {
return NULL;
}
diff --git a/main/asterisk.c b/main/asterisk.c
index 994dfbe..076ae6d 100644
--- a/main/asterisk.c
+++ b/main/asterisk.c
@@ -1064,35 +1064,30 @@
static char *handle_show_version_files(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
#define FORMAT "%-25.25s %-40.40s\n"
+ static const char * const completions[] = { "like", NULL };
struct registered_file *iterator;
regex_t regexbuf;
int havepattern = 0;
int havename = 0;
int count_files = 0;
char *ret = NULL;
- int matchlen, which = 0;
- struct registered_file *find;
switch (cmd) {
case CLI_INIT:
- e->command = "core show file version [like]";
+ e->command = "core show file version";
e->usage =
- "Usage: core show file version [like <pattern>]\n"
+ "Usage: core show file version [<filename>|like <pattern>]\n"
" Lists the files along with the Asterisk version.\n"
" Optional regular expression pattern is used to filter the file list.\n";
return NULL;
case CLI_GENERATE:
- matchlen = strlen(a->word);
- if (a->pos != 3)
+ if (a->pos != 4) {
return NULL;
- AST_RWLIST_RDLOCK(®istered_files);
- AST_RWLIST_TRAVERSE(®istered_files, find, list) {
- if (!strncasecmp(a->word, find->file, matchlen) && ++which > a->n) {
- ret = ast_strdup(find->file);
- break;
- }
}
- AST_RWLIST_UNLOCK(®istered_files);
+ ret = ast_cli_complete(a->word, completions, a->n);
+ if (!ret) {
+ ret = ast_complete_source_filename(a->word, a->n - 1);
+ }
return ret;
}
@@ -1107,6 +1102,9 @@
return CLI_SHOWUSAGE;
break;
case 5:
+ if (!strcasecmp(a->argv[4], "like")) {
+ return CLI_SHOWUSAGE;
+ }
havename = 1;
break;
case 4:
diff --git a/main/astmm.c b/main/astmm.c
index 3317784..d53323a 100644
--- a/main/astmm.c
+++ b/main/astmm.c
@@ -702,17 +702,12 @@
{
switch (cmd) {
case CLI_INIT:
- e->command = "memory atexit list";
+ e->command = "memory atexit list {on|off}";
e->usage =
"Usage: memory atexit list {on|off}\n"
" Enable dumping a list of still allocated memory segments at exit.\n";
return NULL;
case CLI_GENERATE:
- if (a->pos == 3) {
- const char * const options[] = { "off", "on", NULL };
-
- return ast_cli_complete(a->word, options, a->n);
- }
return NULL;
}
@@ -739,7 +734,7 @@
switch (cmd) {
case CLI_INIT:
- e->command = "memory atexit summary";
+ e->command = "memory atexit summary {off|byline|byfunc|byfile}";
e->usage =
"Usage: memory atexit summary {off|byline|byfunc|byfile}\n"
" Summary of still allocated memory segments at exit options.\n"
@@ -751,11 +746,6 @@
" Note: byline, byfunc, and byfile are cumulative enables.\n";
return NULL;
case CLI_GENERATE:
- if (a->pos == 3) {
- const char * const options[] = { "off", "byline", "byfunc", "byfile", NULL };
-
- return ast_cli_complete(a->word, options, a->n);
- }
return NULL;
}
@@ -1054,7 +1044,7 @@
{
switch (cmd) {
case CLI_INIT:
- e->command = "memory backtrace";
+ e->command = "memory backtrace {on|off}";
e->usage =
"Usage: memory backtrace {on|off}\n"
" Enable dumping an allocation backtrace with memory diagnostics.\n"
@@ -1062,11 +1052,6 @@
" can be CPU intensive.\n";
return NULL;
case CLI_GENERATE:
- if (a->pos == 2) {
- const char * const options[] = { "off", "on", NULL };
-
- return ast_cli_complete(a->word, options, a->n);
- }
return NULL;
}
diff --git a/main/bridge.c b/main/bridge.c
index 6152b1b..7f6fbbe 100644
--- a/main/bridge.c
+++ b/main/bridge.c
@@ -5170,12 +5170,6 @@
return NULL;
}
- if (!state) {
- ao2_ref(bridge, -1);
- return ast_strdup("all");
- }
- state--;
-
{
SCOPED_LOCK(bridge_lock, bridge, ast_bridge_lock, ast_bridge_unlock);
@@ -5197,6 +5191,8 @@
static char *handle_bridge_kick_channel(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
+ static const char * const completions[] = { "all", NULL };
+ char *complete;
struct ast_bridge *bridge;
switch (cmd) {
@@ -5213,7 +5209,11 @@
return complete_bridge_live(a->word, a->n);
}
if (a->pos == 3) {
- return complete_bridge_participant(a->argv[2], a->line, a->word, a->pos, a->n);
+ complete = ast_cli_complete(a->word, completions, a->n);
+ if (!complete) {
+ complete = complete_bridge_participant(a->argv[2], a->line, a->word, a->pos, a->n - 1);
+ }
+ return complete;
}
return NULL;
}
diff --git a/main/ccss.c b/main/ccss.c
index f39eed9..002b9a3 100644
--- a/main/ccss.c
+++ b/main/ccss.c
@@ -4572,11 +4572,9 @@
static char *handle_cc_kill(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
- static const char * const option[] = { "core", "all", NULL };
-
switch (cmd) {
case CLI_INIT:
- e->command = "cc cancel";
+ e->command = "cc cancel [core|all]";
e->usage =
"Usage: cc cancel can be used in two ways.\n"
" 1. 'cc cancel core [core ID]' will cancel the CC transaction with\n"
@@ -4584,10 +4582,7 @@
" 2. 'cc cancel all' will cancel all active CC transactions.\n";
return NULL;
case CLI_GENERATE:
- if (a->pos == 2) {
- return ast_cli_complete(a->word, option, a->n);
- }
- if (a->pos == 3) {
+ if (a->pos == 3 && !strcasecmp(a->argv[2], "core")) {
return complete_core_id(a->line, a->word, a->pos, a->n);
}
return NULL;
diff --git a/main/cli.c b/main/cli.c
index 91350e9..1af9177 100644
--- a/main/cli.c
+++ b/main/cli.c
@@ -917,6 +917,7 @@
static char *handle_showcalls(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
+ static const char * const completions[] = { "seconds", NULL };
struct timeval curtime = ast_tvnow();
int showuptime, printsec;
@@ -924,7 +925,7 @@
case CLI_INIT:
e->command = "core show calls [uptime]";
e->usage =
- "Usage: core show calls [uptime] [seconds]\n"
+ "Usage: core show calls [uptime [seconds]]\n"
" Lists number of currently active calls and total number of calls\n"
" processed through PBX since last restart. If 'uptime' is specified\n"
" the system uptime is also displayed. If 'seconds' is specified in\n"
@@ -934,7 +935,7 @@
case CLI_GENERATE:
if (a->pos != e->args)
return NULL;
- return a->n == 0 ? ast_strdup("seconds") : NULL;
+ return ast_cli_complete(a->word, completions, a->n);
}
/* regular handler */
@@ -1104,7 +1105,9 @@
static char *handle_softhangup(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
- struct ast_channel *c=NULL;
+ struct ast_channel *c = NULL;
+ static const char * const completions[] = { "all", NULL };
+ char *complete;
switch (cmd) {
case CLI_INIT:
@@ -1117,7 +1120,14 @@
" will see the hangup request.\n";
return NULL;
case CLI_GENERATE:
- return ast_complete_channels(a->line, a->word, a->pos, a->n, e->args);
+ if (a->pos != e->args) {
+ return NULL;
+ }
+ complete = ast_cli_complete(a->word, completions, a->n);
+ if (!complete) {
+ complete = ast_complete_channels(a->line, a->word, a->pos, a->n - 1, e->args);
+ }
+ return complete;
}
if (a->argc != 4) {
@@ -1429,6 +1439,8 @@
static char *handle_core_set_debug_channel(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
struct ast_channel *c = NULL;
+ static const char * const completions_all[] = { "all", NULL };
+ static const char * const completions_off[] = { "off", NULL };
struct channel_set_debug_args args = {
.fd = a->fd,
};
@@ -1441,10 +1453,15 @@
" Enables/disables debugging on all or on a specific channel.\n";
return NULL;
case CLI_GENERATE:
- /* XXX remember to handle the optional "off" */
- if (a->pos != e->args)
- return NULL;
- return a->n == 0 ? ast_strdup("all") : ast_complete_channels(a->line, a->word, a->pos, a->n - 1, e->args);
+ if (a->pos == 4) {
+ char *complete = ast_cli_complete(a->word, completions_all, a->n);
+ if (!complete) {
+ complete = ast_complete_channels(a->line, a->word, a->pos, a->n - 1, e->args);
+ }
+ return complete;
+ } else if (a->pos == 5) {
+ return ast_cli_complete(a->word, completions_off, a->n);
+ }
}
if (cmd == (CLI_HANDLER + 1000)) {
diff --git a/main/pbx_app.c b/main/pbx_app.c
index bb60b8e..1d90dac 100644
--- a/main/pbx_app.c
+++ b/main/pbx_app.c
@@ -315,7 +315,6 @@
int like = 0, describing = 0;
int total_match = 0; /* Number of matches in like clause */
int total_apps = 0; /* Number of apps registered */
- static const char * const choices[] = { "like", "describing", NULL };
switch (cmd) {
case CLI_INIT:
@@ -327,7 +326,7 @@
" If 'describing', <text> will be a substring of the description\n";
return NULL;
case CLI_GENERATE:
- return (a->pos != 3) ? NULL : ast_cli_complete(a->word, choices, a->n);
+ return NULL;
}
AST_RWLIST_RDLOCK(&apps);
diff --git a/main/pbx_hangup_handler.c b/main/pbx_hangup_handler.c
index 3b82547..376a984 100644
--- a/main/pbx_hangup_handler.c
+++ b/main/pbx_hangup_handler.c
@@ -260,7 +260,7 @@
" Show hangup handlers for all channels.\n";
return NULL;
case CLI_GENERATE:
- return ast_complete_channels(a->line, a->word, a->pos, a->n, e->args);
+ return NULL;
}
if (a->argc < 4) {
diff --git a/res/res_sorcery_memory_cache.c b/res/res_sorcery_memory_cache.c
index 5f7ffb6..bf2347c 100644
--- a/res/res_sorcery_memory_cache.c
+++ b/res/res_sorcery_memory_cache.c
@@ -1866,6 +1866,7 @@
static char *sorcery_memory_cache_stale(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
{
struct sorcery_memory_cache *cache;
+ int reload = 0;
switch (cmd) {
case CLI_INIT:
@@ -1881,6 +1882,9 @@
return sorcery_memory_cache_complete_name(a->word, a->n);
} else if (a->pos == 5) {
return sorcery_memory_cache_complete_object_name(a->argv[4], a->word, a->n);
+ } else if (a->pos == 6) {
+ static const char * const completions[] = { "reload", NULL };
+ return ast_cli_complete(a->word, completions, a->n);
} else {
return NULL;
}
@@ -1888,6 +1892,14 @@
if (a->argc < 5 || a->argc > 7) {
return CLI_SHOWUSAGE;
+ }
+
+ if (a->argc == 7) {
+ if (!strcasecmp(a->argv[6], "reload")) {
+ reload = 1;
+ } else {
+ return CLI_SHOWUSAGE;
+ }
}
cache = ao2_find(caches, a->argv[4], OBJ_SEARCH_KEY);
@@ -1910,7 +1922,7 @@
if (!mark_object_as_stale_in_cache(cache, a->argv[5])) {
ast_cli(a->fd, "Successfully marked object '%s' in memory cache '%s' as stale\n",
a->argv[5], a->argv[4]);
- if (a->argc == 7 && ast_true(a->argv[6])) {
+ if (reload) {
struct sorcery_memory_cached_object *cached;
cached = ao2_find(cache->objects, a->argv[5], OBJ_SEARCH_KEY | OBJ_NOLOCK);
--
To view, visit https://gerrit.asterisk.org/4935
To unsubscribe, visit https://gerrit.asterisk.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Iee58c7392f6fec34ad9d596109117af87697bbca
Gerrit-PatchSet: 1
Gerrit-Project: asterisk
Gerrit-Branch: 13
Gerrit-Owner: Sean Bright <sean.bright at gmail.com>
More information about the asterisk-code-review
mailing list