From 0042fb0eb09aceb279f073d84bbc05068ea5e3ff Mon Sep 17 00:00:00 2001 From: Matt Stancliff Date: Fri, 1 Aug 2014 11:44:28 -0400 Subject: [PATCH] redis-cli: stop showing incorrectly selected DB Previously redis-cli would happily show "-1" or "99999" as valid DB choices. Now, if the SELECT call returned an error, we don't update the DB number in the CLI. Inspired by @anupshendkar in #1313 Fixes #566, #1313 --- src/redis-cli.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/redis-cli.c b/src/redis-cli.c index 8c3e013eb755..28d3e0cd9edb 100644 --- a/src/redis-cli.c +++ b/src/redis-cli.c @@ -94,6 +94,7 @@ static struct config { sds mb_delim; char prompt[128]; char *eval; + int last_cmd_type; } config; static volatile sig_atomic_t force_cancel_loop = 0; @@ -131,7 +132,7 @@ static void cliRefreshPrompt(void) { strchr(config.hostip,':') ? "[%s]:%d" : "%s:%d", config.hostip, config.hostport); /* Add [dbnum] if needed */ - if (config.dbnum != 0) + if (config.dbnum != 0 && config.last_cmd_type != REDIS_REPLY_ERROR) len += snprintf(config.prompt+len,sizeof(config.prompt)-len,"[%d]", config.dbnum); snprintf(config.prompt+len,sizeof(config.prompt)-len,"> "); @@ -532,6 +533,8 @@ static int cliReadReply(int output_raw_strings) { reply = (redisReply*)_reply; + config.last_cmd_type = reply->type; + /* Check if we need to connect to a different node and reissue the * request. */ if (config.cluster_mode && reply->type == REDIS_REPLY_ERROR && @@ -1887,6 +1890,8 @@ int main(int argc, char **argv) { config.stdinarg = 0; config.auth = NULL; config.eval = NULL; + config.last_cmd_type = -1; + if (!isatty(fileno(stdout)) && (getenv("FAKETTY") == NULL)) config.output = OUTPUT_RAW; else