Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
046b4f66
Commit
046b4f66
authored
Jun 14, 2011
by
antirez
Browse files
redis-cli updated to the same version as the 2.4 branch
parent
5d919263
Changes
1
Show whitespace changes
Inline
Side-by-side
src/redis-cli.c
View file @
046b4f66
...
@@ -55,6 +55,7 @@ static struct config {
...
@@ -55,6 +55,7 @@ static struct config {
int
hostport
;
int
hostport
;
char
*
hostsocket
;
char
*
hostsocket
;
long
repeat
;
long
repeat
;
long
interval
;
int
dbnum
;
int
dbnum
;
int
interactive
;
int
interactive
;
int
shutdown
;
int
shutdown
;
...
@@ -62,7 +63,6 @@ static struct config {
...
@@ -62,7 +63,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
;
char
prompt
[
32
];
char
prompt
[
32
];
...
@@ -88,9 +88,11 @@ static long long mstime(void) {
...
@@ -88,9 +88,11 @@ static long long mstime(void) {
static
void
cliRefreshPrompt
(
void
)
{
static
void
cliRefreshPrompt
(
void
)
{
if
(
config
.
dbnum
==
0
)
if
(
config
.
dbnum
==
0
)
snprintf
(
config
.
prompt
,
sizeof
(
config
.
prompt
),
"redis> "
);
snprintf
(
config
.
prompt
,
sizeof
(
config
.
prompt
),
"redis %s:%d> "
,
config
.
hostip
,
config
.
hostport
);
else
else
snprintf
(
config
.
prompt
,
sizeof
(
config
.
prompt
),
"redis:%d> "
,
config
.
dbnum
);
snprintf
(
config
.
prompt
,
sizeof
(
config
.
prompt
),
"redis %s:%d[%d]> "
,
config
.
hostip
,
config
.
hostport
,
config
.
dbnum
);
}
}
/*------------------------------------------------------------------------------
/*------------------------------------------------------------------------------
...
@@ -315,10 +317,9 @@ static int cliConnect(int force) {
...
@@ -315,10 +317,9 @@ static int cliConnect(int force) {
return
REDIS_OK
;
return
REDIS_OK
;
}
}
static
void
cliPrintContextError
AndExit
()
{
static
void
cliPrintContextError
()
{
if
(
context
==
NULL
)
return
;
if
(
context
==
NULL
)
return
;
fprintf
(
stderr
,
"Error: %s
\n
"
,
context
->
errstr
);
fprintf
(
stderr
,
"Error: %s
\n
"
,
context
->
errstr
);
exit
(
1
);
}
}
static
sds
cliFormatReplyTTY
(
redisReply
*
r
,
char
*
prefix
)
{
static
sds
cliFormatReplyTTY
(
redisReply
*
r
,
char
*
prefix
)
{
...
@@ -397,6 +398,9 @@ static sds cliFormatReplyRaw(redisReply *r) {
...
@@ -397,6 +398,9 @@ static sds cliFormatReplyRaw(redisReply *r) {
/* Nothing... */
/* Nothing... */
break
;
break
;
case
REDIS_REPLY_ERROR
:
case
REDIS_REPLY_ERROR
:
out
=
sdscatlen
(
out
,
r
->
str
,
r
->
len
);
out
=
sdscatlen
(
out
,
"
\n
"
,
1
);
break
;
case
REDIS_REPLY_STATUS
:
case
REDIS_REPLY_STATUS
:
case
REDIS_REPLY_STRING
:
case
REDIS_REPLY_STRING
:
out
=
sdscatlen
(
out
,
r
->
str
,
r
->
len
);
out
=
sdscatlen
(
out
,
r
->
str
,
r
->
len
);
...
@@ -434,7 +438,8 @@ static int cliReadReply(int output_raw_strings) {
...
@@ -434,7 +438,8 @@ static int cliReadReply(int output_raw_strings) {
if
(
context
->
err
==
REDIS_ERR_EOF
)
if
(
context
->
err
==
REDIS_ERR_EOF
)
return
REDIS_ERR
;
return
REDIS_ERR
;
}
}
cliPrintContextErrorAndExit
();
cliPrintContextError
();
exit
(
1
);
return
REDIS_ERR
;
/* avoid compiler warning */
return
REDIS_ERR
;
/* avoid compiler warning */
}
}
...
@@ -460,12 +465,17 @@ static int cliSendCommand(int argc, char **argv, int repeat) {
...
@@ -460,12 +465,17 @@ static int cliSendCommand(int argc, char **argv, int repeat) {
size_t
*
argvlen
;
size_t
*
argvlen
;
int
j
,
output_raw
;
int
j
,
output_raw
;
if
(
context
==
NULL
)
{
if
(
context
==
NULL
)
return
REDIS_ERR
;
printf
(
"Not connected, please use: connect <host> <port>
\n
"
);
return
REDIS_OK
;
output_raw
=
0
;
if
(
!
strcasecmp
(
command
,
"info"
)
||
(
argc
==
2
&&
!
strcasecmp
(
command
,
"client"
)
&&
!
strcasecmp
(
argv
[
1
],
"list"
)))
{
output_raw
=
1
;
}
}
output_raw
=
!
strcasecmp
(
command
,
"info"
);
if
(
!
strcasecmp
(
command
,
"help"
)
||
!
strcasecmp
(
command
,
"?"
))
{
if
(
!
strcasecmp
(
command
,
"help"
)
||
!
strcasecmp
(
command
,
"?"
))
{
cliOutputHelp
(
--
argc
,
++
argv
);
cliOutputHelp
(
--
argc
,
++
argv
);
return
REDIS_OK
;
return
REDIS_OK
;
...
@@ -505,6 +515,8 @@ static int cliSendCommand(int argc, char **argv, int repeat) {
...
@@ -505,6 +515,8 @@ static int cliSendCommand(int argc, char **argv, int repeat) {
cliRefreshPrompt
();
cliRefreshPrompt
();
}
}
}
}
if
(
config
.
interval
)
usleep
(
config
.
interval
);
fflush
(
stdout
);
/* Make it grep friendly */
}
}
free
(
argvlen
);
free
(
argvlen
);
...
@@ -540,6 +552,10 @@ static int parseOptions(int argc, char **argv) {
...
@@ -540,6 +552,10 @@ static int parseOptions(int argc, char **argv) {
}
else
if
(
!
strcmp
(
argv
[
i
],
"-r"
)
&&
!
lastarg
)
{
}
else
if
(
!
strcmp
(
argv
[
i
],
"-r"
)
&&
!
lastarg
)
{
config
.
repeat
=
strtoll
(
argv
[
i
+
1
],
NULL
,
10
);
config
.
repeat
=
strtoll
(
argv
[
i
+
1
],
NULL
,
10
);
i
++
;
i
++
;
}
else
if
(
!
strcmp
(
argv
[
i
],
"-i"
)
&&
!
lastarg
)
{
double
seconds
=
atof
(
argv
[
i
+
1
]);
config
.
interval
=
seconds
*
1000000
;
i
++
;
}
else
if
(
!
strcmp
(
argv
[
i
],
"-n"
)
&&
!
lastarg
)
{
}
else
if
(
!
strcmp
(
argv
[
i
],
"-n"
)
&&
!
lastarg
)
{
config
.
dbnum
=
atoi
(
argv
[
i
+
1
]);
config
.
dbnum
=
atoi
(
argv
[
i
+
1
]);
i
++
;
i
++
;
...
@@ -592,6 +608,8 @@ static void usage() {
...
@@ -592,6 +608,8 @@ static void usage() {
" -s <socket> Server socket (overrides hostname and port)
\n
"
" -s <socket> Server socket (overrides hostname and port)
\n
"
" -a <password> Password to use when connecting to the server
\n
"
" -a <password> Password to use when connecting to the server
\n
"
" -r <repeat> Execute specified command N times
\n
"
" -r <repeat> Execute specified command N times
\n
"
" -i <interval> When -r is used, waits <interval> seconds per command.
\n
"
" It is possible to specify sub-second times like -i 0.1.
\n
"
" -n <db> Database number
\n
"
" -n <db> Database number
\n
"
" -x Read last argument from STDIN
\n
"
" -x Read last argument from STDIN
\n
"
" -d <delimiter> Multi-bulk delimiter in for raw formatting (default:
\\
n)
\n
"
" -d <delimiter> Multi-bulk delimiter in for raw formatting (default:
\\
n)
\n
"
...
@@ -603,6 +621,7 @@ static void usage() {
...
@@ -603,6 +621,7 @@ static void usage() {
" cat /etc/passwd | redis-cli -x set mypasswd
\n
"
" cat /etc/passwd | redis-cli -x set mypasswd
\n
"
" redis-cli get mypasswd
\n
"
" redis-cli get mypasswd
\n
"
" redis-cli -r 100 lpush mylist x
\n
"
" redis-cli -r 100 lpush mylist x
\n
"
" redis-cli -r 100 -i 1 info | grep used_memory_human:
\n
"
"
\n
"
"
\n
"
"When no command is given, redis-cli starts in interactive mode.
\n
"
"When no command is given, redis-cli starts in interactive mode.
\n
"
"Type
\"
help
\"
in interactive mode for information on available commands.
\n
"
"Type
\"
help
\"
in interactive mode for information on available commands.
\n
"
...
@@ -625,19 +644,32 @@ static char **convertToSds(int count, char** args) {
...
@@ -625,19 +644,32 @@ 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
);
}
}
cliRefreshPrompt
();
cliRefreshPrompt
();
while
((
line
=
linenoise
(
context
?
config
.
prompt
:
"not connected> "
))
!=
NULL
)
{
while
((
line
=
linenoise
(
context
?
config
.
prompt
:
"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
;
...
@@ -655,14 +687,25 @@ static void repl() {
...
@@ -655,14 +687,25 @@ static void repl() {
linenoiseClearScreen
();
linenoiseClearScreen
();
}
else
{
}
else
{
long
long
start_time
=
mstime
(),
elapsed
;
long
long
start_time
=
mstime
(),
elapsed
;
int
repeat
,
skipargs
=
0
;
repeat
=
atoi
(
argv
[
0
]);
if
(
repeat
)
{
skipargs
=
1
;
}
else
{
repeat
=
1
;
}
if
(
cliSendCommand
(
argc
,
argv
,
1
)
!=
REDIS_OK
)
{
if
(
cliSendCommand
(
argc
-
skipargs
,
argv
+
skipargs
,
repeat
)
!=
REDIS_OK
)
{
cliConnect
(
1
);
cliConnect
(
1
);
/* If we still cannot send the command,
/* If we still cannot send the command print error.
* print error and abort. */
* We'll try to reconnect the next time. */
if
(
cliSendCommand
(
argc
,
argv
,
1
)
!=
REDIS_OK
)
if
(
cliSendCommand
(
argc
-
skipargs
,
argv
+
skipargs
,
repeat
)
cliPrintContextErrorAndExit
();
!=
REDIS_OK
)
cliPrintContextError
();
}
}
elapsed
=
mstime
()
-
start_time
;
elapsed
=
mstime
()
-
start_time
;
if
(
elapsed
>=
500
)
{
if
(
elapsed
>=
500
)
{
...
@@ -671,8 +714,7 @@ static void repl() {
...
@@ -671,8 +714,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() */
...
@@ -701,6 +743,7 @@ int main(int argc, char **argv) {
...
@@ -701,6 +743,7 @@ int main(int argc, char **argv) {
config
.
hostport
=
6379
;
config
.
hostport
=
6379
;
config
.
hostsocket
=
NULL
;
config
.
hostsocket
=
NULL
;
config
.
repeat
=
1
;
config
.
repeat
=
1
;
config
.
interval
=
0
;
config
.
dbnum
=
0
;
config
.
dbnum
=
0
;
config
.
interactive
=
0
;
config
.
interactive
=
0
;
config
.
shutdown
=
0
;
config
.
shutdown
=
0
;
...
@@ -708,26 +751,23 @@ int main(int argc, char **argv) {
...
@@ -708,26 +751,23 @@ 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
;
/* Try to connect */
if
(
cliConnect
(
0
)
!=
REDIS_OK
)
exit
(
1
);
/* Start interactive mode when no command is provided */
/* Start interactive mode when no command is provided */
if
(
argc
==
0
)
repl
();
if
(
argc
==
0
)
{
/* Note that in repl mode we don't abort on connection error.
* A new attempt will be performed for every command send. */
cliConnect
(
0
);
repl
();
}
/* Otherwise, we have some arguments to execute */
/* Otherwise, we have some arguments to execute */
if
(
cliConnect
(
0
)
!=
REDIS_OK
)
exit
(
1
);
return
noninteractive
(
argc
,
convertToSds
(
argc
,
argv
));
return
noninteractive
(
argc
,
convertToSds
(
argc
,
argv
));
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment