Adds MODULE HELP and implements addReplySubSyntaxError

This commit is contained in:
Itamar Haber 2018-06-07 18:34:58 +03:00
parent f847dd3ad8
commit 76ad23d012
3 changed files with 24 additions and 2 deletions

View File

@ -4499,7 +4499,15 @@ int moduleUnload(sds name) {
* MODULE LOAD <path> [args...] */ * MODULE LOAD <path> [args...] */
void moduleCommand(client *c) { void moduleCommand(client *c) {
char *subcmd = c->argv[1]->ptr; char *subcmd = c->argv[1]->ptr;
if (c->argc == 2 && !strcasecmp(subcmd,"help")) {
const char *help[] = {
"list -- Return a list of loaded modules.",
"load <path> [arg ...] -- Load a module library from <path>.",
"unload <name> -- Unload a module.",
NULL
};
addReplyHelp(c, help);
} else
if (!strcasecmp(subcmd,"load") && c->argc >= 3) { if (!strcasecmp(subcmd,"load") && c->argc >= 3) {
robj **argv = NULL; robj **argv = NULL;
int argc = 0; int argc = 0;
@ -4548,7 +4556,8 @@ void moduleCommand(client *c) {
} }
dictReleaseIterator(di); dictReleaseIterator(di);
} else { } else {
addReply(c,shared.syntaxerr); addReplySubSyntaxError(c);
return;
} }
} }

View File

@ -560,6 +560,18 @@ void addReplyHelp(client *c, const char **help) {
setDeferredMultiBulkLength(c,blenp,blen); setDeferredMultiBulkLength(c,blenp,blen);
} }
/* Add a suggestive error reply.
* This function is typically invoked by from commands that support
* subcommands in response to an unknown subcommand or argument error. */
void addReplySubSyntaxError(client *c) {
sds cmd = sdsnew((char*) c->argv[0]->ptr);
sdstoupper(cmd);
addReplyErrorFormat(c,
"Unknown subcommand or wrong number of arguments for '%s'. Try %s HELP.",
c->argv[1]->ptr,cmd);
sdsfree(cmd);
}
/* Copy 'src' client output buffers into 'dst' client output buffers. /* Copy 'src' client output buffers into 'dst' client output buffers.
* The function takes care of freeing the old output buffers of the * The function takes care of freeing the old output buffers of the
* destination client. */ * destination client. */

View File

@ -1410,6 +1410,7 @@ void addReplyHumanLongDouble(client *c, long double d);
void addReplyLongLong(client *c, long long ll); void addReplyLongLong(client *c, long long ll);
void addReplyMultiBulkLen(client *c, long length); void addReplyMultiBulkLen(client *c, long length);
void addReplyHelp(client *c, const char **help); void addReplyHelp(client *c, const char **help);
void addReplySubSyntaxError(client *c);
void copyClientOutputBuffer(client *dst, client *src); void copyClientOutputBuffer(client *dst, client *src);
size_t sdsZmallocSize(sds s); size_t sdsZmallocSize(sds s);
size_t getStringObjectSdsUsedMemory(robj *o); size_t getStringObjectSdsUsedMemory(robj *o);