Only save history when stdin is a tty (issue #465)

This commit is contained in:
Pieter Noordhuis 2011-03-06 20:00:08 +01:00
parent d9fac6c07a
commit ca36b4ab31

View File

@ -62,7 +62,6 @@ static struct config {
int pubsub_mode; int pubsub_mode;
int stdinarg; /* get last arg from stdin. (-x option) */ int stdinarg; /* get last arg from stdin. (-x option) */
char *auth; char *auth;
char *historyfile;
int raw_output; /* output mode per command */ int raw_output; /* output mode per command */
sds mb_delim; sds mb_delim;
} config; } config;
@ -609,18 +608,31 @@ static char **convertToSds(int count, char** args) {
#define LINE_BUFLEN 4096 #define LINE_BUFLEN 4096
static void repl() { static void repl() {
int argc, j; sds historyfile = NULL;
int history = 0;
char *line; char *line;
int argc;
sds *argv; sds *argv;
config.interactive = 1; config.interactive = 1;
linenoiseSetCompletionCallback(completionCallback); linenoiseSetCompletionCallback(completionCallback);
/* Only use history when stdin is a tty. */
if (isatty(fileno(stdin))) {
history = 1;
if (getenv("HOME") != NULL) {
historyfile = sdscatprintf(sdsempty(),"%s/.rediscli_history",getenv("HOME"));
linenoiseHistoryLoad(historyfile);
}
}
while((line = linenoise(context ? "redis> " : "not connected> ")) != NULL) { while((line = linenoise(context ? "redis> " : "not connected> ")) != NULL) {
if (line[0] != '\0') { if (line[0] != '\0') {
argv = sdssplitargs(line,&argc); argv = sdssplitargs(line,&argc);
linenoiseHistoryAdd(line); if (history) linenoiseHistoryAdd(line);
if (config.historyfile) linenoiseHistorySave(config.historyfile); if (historyfile) linenoiseHistorySave(historyfile);
if (argv == NULL) { if (argv == NULL) {
printf("Invalid argument(s)\n"); printf("Invalid argument(s)\n");
continue; continue;
@ -654,8 +666,7 @@ static void repl() {
} }
} }
/* Free the argument vector */ /* Free the argument vector */
for (j = 0; j < argc; j++) while(argc--) sdsfree(argv[argc]);
sdsfree(argv[j]);
zfree(argv); zfree(argv);
} }
/* linenoise() returns malloc-ed lines like readline() */ /* linenoise() returns malloc-ed lines like readline() */
@ -691,17 +702,10 @@ int main(int argc, char **argv) {
config.pubsub_mode = 0; config.pubsub_mode = 0;
config.stdinarg = 0; config.stdinarg = 0;
config.auth = NULL; config.auth = NULL;
config.historyfile = NULL;
config.raw_output = !isatty(fileno(stdout)) && (getenv("FAKETTY") == NULL); config.raw_output = !isatty(fileno(stdout)) && (getenv("FAKETTY") == NULL);
config.mb_delim = sdsnew("\n"); config.mb_delim = sdsnew("\n");
cliInitHelp(); cliInitHelp();
if (getenv("HOME") != NULL) {
config.historyfile = malloc(256);
snprintf(config.historyfile,256,"%s/.rediscli_history",getenv("HOME"));
linenoiseHistoryLoad(config.historyfile);
}
firstarg = parseOptions(argc,argv); firstarg = parseOptions(argc,argv);
argc -= firstarg; argc -= firstarg;
argv += firstarg; argv += firstarg;