X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/96e34b3ce11e4cda35b9127b6a75756fb42f12ba..497fc8775fd4b85289a6998bb4eaddbe657e6be7:/src/redis-cli.c diff --git a/src/redis-cli.c b/src/redis-cli.c index fc2d4d73..b53a4c82 100644 --- a/src/redis-cli.c +++ b/src/redis-cli.c @@ -64,6 +64,7 @@ static struct config { char *auth; int raw_output; /* output mode per command */ sds mb_delim; + char prompt[32]; } config; static void usage(); @@ -84,6 +85,13 @@ static long long mstime(void) { return mst; } +static void cliRefreshPrompt(void) { + if (config.dbnum == 0) + snprintf(config.prompt,sizeof(config.prompt),"redis> "); + else + snprintf(config.prompt,sizeof(config.prompt),"redis:%d> ",config.dbnum); +} + /*------------------------------------------------------------------------------ * Help functions *--------------------------------------------------------------------------- */ @@ -386,15 +394,18 @@ static sds cliFormatReplyRaw(redisReply *r) { switch (r->type) { case REDIS_REPLY_NIL: /* Nothing... */ - break; + break; case REDIS_REPLY_ERROR: + out = sdscatlen(out,r->str,r->len); + out = sdscatlen(out,"\n",1); + break; case REDIS_REPLY_STATUS: case REDIS_REPLY_STRING: out = sdscatlen(out,r->str,r->len); - break; + break; case REDIS_REPLY_INTEGER: out = sdscatprintf(out,"%lld",r->integer); - break; + break; case REDIS_REPLY_ARRAY: for (i = 0; i < r->elements; i++) { if (i > 0) out = sdscat(out,config.mb_delim); @@ -402,7 +413,7 @@ static sds cliFormatReplyRaw(redisReply *r) { out = sdscatlen(out,tmp,sdslen(tmp)); sdsfree(tmp); } - break; + break; default: fprintf(stderr,"Unknown reply type: %d\n", r->type); exit(1); @@ -456,7 +467,18 @@ static int cliSendCommand(int argc, char **argv, int repeat) { return REDIS_OK; } - output_raw = !strcasecmp(command,"info"); + output_raw = 0; + if (!strcasecmp(command,"info") || + (argc == 2 && !strcasecmp(command,"cluster") && + (!strcasecmp(argv[1],"nodes") || + !strcasecmp(argv[1],"info"))) || + (argc == 2 && !strcasecmp(command,"client") && + !strcasecmp(argv[1],"list"))) + + { + output_raw = 1; + } + if (!strcasecmp(command,"help") || !strcasecmp(command,"?")) { cliOutputHelp(--argc, ++argv); return REDIS_OK; @@ -491,8 +513,10 @@ static int cliSendCommand(int argc, char **argv, int repeat) { return REDIS_ERR; } else { /* Store database number when SELECT was successfully executed. */ - if (!strcasecmp(command,"select") && argc == 2) + if (!strcasecmp(command,"select") && argc == 2) { config.dbnum = atoi(argv[1]); + cliRefreshPrompt(); + } } } @@ -633,7 +657,8 @@ static void repl() { } } - while((line = linenoise(context ? "redis> " : "not connected> ")) != NULL) { + cliRefreshPrompt(); + while((line = linenoise(context ? config.prompt : "not connected> ")) != NULL) { if (line[0] != '\0') { argv = sdssplitargs(line,&argc); if (history) linenoiseHistoryAdd(line);