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
2612e052
Commit
2612e052
authored
Nov 26, 2010
by
Pieter Noordhuis
Browse files
Merge remote branch 'visionmedia/cli-help' into cli-help
parents
c086b85a
5397f2b5
Changes
5
Hide whitespace changes
Inline
Side-by-side
Makefile
View file @
2612e052
...
@@ -16,4 +16,7 @@ clean:
...
@@ -16,4 +16,7 @@ clean:
$(TARGETS)
:
$(TARGETS)
:
cd
src
&&
$(MAKE)
$@
cd
src
&&
$(MAKE)
$@
src/help.h
:
@
./utils/generate-command-help.rb
>
$@
dummy
:
dummy
:
src/help.h
0 → 100644
View file @
2612e052
// Auto-generated, do not edit.
#include <stdio.h>
#include <string.h>
/*
* List command groups.
*/
#define GROUPS \
G(UNKNOWN, "unknown") \
G(SET, "set") \
G(LIST, "list") \
G(HASH, "hash") \
G(GENERIC, "generic") \
G(PUBSUB, "pubsub") \
G(STRING, "string") \
G(SERVER, "server") \
G(CONNECTION, "connection") \
G(TRANSACTIONS, "transactions") \
G(SORTED_SET, "sorted_set")
/*
* Command group types.
*/
typedef
enum
{
#define G(GROUP, _) COMMAND_GROUP_##GROUP,
GROUPS
#undef G
COMMAND_GROUP_LENGTH
}
command_group_type_t
;
/*
* Command group type names.
*/
static
char
*
command_group_type_names
[]
=
{
#define G(_, STR) STR,
GROUPS
#undef G
};
/*
* Command help struct.
*/
struct
command_help
{
char
*
name
;
char
*
params
;
char
*
summary
;
command_group_type_t
group
;
char
*
since
;
}
command_help
[]
=
{
{
"APPEND"
,
"key value"
,
"Append a value to a key"
,
COMMAND_GROUP_STRING
,
"1.3.3"
}
,
{
"AUTH"
,
"password"
,
"Authenticate to the server"
,
COMMAND_GROUP_CONNECTION
,
"0.08"
}
,
{
"BGREWRITEAOF"
,
"-"
,
"Asynchronously rewrite the append-only file"
,
COMMAND_GROUP_SERVER
,
"1.07"
}
,
{
"BGSAVE"
,
"-"
,
"Asynchronously save the dataset to disk"
,
COMMAND_GROUP_SERVER
,
"0.07"
}
,
{
"BLPOP"
,
"(key)+ timeout"
,
"Remove and get the first element in a list, or block until one is available"
,
COMMAND_GROUP_LIST
,
"1.3.1"
}
,
{
"BRPOP"
,
"(key)+ timeout"
,
"Remove and get the last element in a list, or block until one is available"
,
COMMAND_GROUP_LIST
,
"1.3.1"
}
,
{
"CONFIG GET"
,
"parameter"
,
"Get the value of a configuration parameter"
,
COMMAND_GROUP_SERVER
,
"2.0"
}
,
{
"CONFIG SET"
,
"parameter value"
,
"Set a configuration parameter to the given value"
,
COMMAND_GROUP_SERVER
,
"2.0"
}
,
{
"DBSIZE"
,
"-"
,
"Return the number of keys in the selected database"
,
COMMAND_GROUP_SERVER
,
"0.07"
}
,
{
"DEBUG OBJECT"
,
"key"
,
"Get debugging information about a key"
,
COMMAND_GROUP_SERVER
,
"0.101"
}
,
{
"DEBUG SEGFAULT"
,
"-"
,
"Make the server crash"
,
COMMAND_GROUP_SERVER
,
"0.101"
}
,
{
"DECR"
,
"key decrement"
,
"Decrement the integer value of a key by one"
,
COMMAND_GROUP_STRING
,
"0.07"
}
,
{
"DECRBY"
,
"key decrement"
,
"Decrement the integer value of a key by the given number"
,
COMMAND_GROUP_STRING
,
"0.07"
}
,
{
"DEL"
,
"(key)+"
,
"Delete a key"
,
COMMAND_GROUP_GENERIC
,
"0.07"
}
,
{
"DISCARD"
,
"-"
,
"Discard all commands issued after MULTI"
,
COMMAND_GROUP_TRANSACTIONS
,
"1.3.3"
}
,
{
"ECHO"
,
"message"
,
"Echo the given string"
,
COMMAND_GROUP_CONNECTION
,
"0.07"
}
,
{
"EXEC"
,
"-"
,
"Execute all commands issued after MULTI"
,
COMMAND_GROUP_TRANSACTIONS
,
"1.1.95"
}
,
{
"EXISTS"
,
"key"
,
"Determine if a key exists"
,
COMMAND_GROUP_SERVER
,
"0.07"
}
,
{
"EXPIRE"
,
"key seconds"
,
"Set a key's time to live in seconds"
,
COMMAND_GROUP_GENERIC
,
"0.09"
}
,
{
"EXPIREAT"
,
"key timestamp"
,
"Set the expiration for a key as a UNIX timestamp"
,
COMMAND_GROUP_GENERIC
,
"1.1"
}
,
{
"FLUSHALL"
,
"-"
,
"Remove all keys from all databases"
,
COMMAND_GROUP_SERVER
,
"0.07"
}
,
{
"FLUSHDB"
,
"-"
,
"Remove all keys from the current database"
,
COMMAND_GROUP_SERVER
,
"0.07"
}
,
{
"GET"
,
"key"
,
"Get the value of a key"
,
COMMAND_GROUP_STRING
,
"0.07"
}
,
{
"GETSET"
,
"key value"
,
"Set the string value of a key and return its old value"
,
COMMAND_GROUP_STRING
,
"0.091"
}
,
{
"HDEL"
,
"key field"
,
"Delete a hash field"
,
COMMAND_GROUP_HASH
,
"1.3.10"
}
,
{
"HEXISTS"
,
"key field"
,
"Determine if a hash field exists"
,
COMMAND_GROUP_HASH
,
"1.3.10"
}
,
{
"HGET"
,
"key field"
,
"Get the value of a hash field"
,
COMMAND_GROUP_HASH
,
"1.3.10"
}
,
{
"HGETALL"
,
"key"
,
"Get all the fields and values in a hash"
,
COMMAND_GROUP_HASH
,
"1.3.10"
}
,
{
"HINCRBY"
,
"key field increment"
,
"Increment the integer value of a hash field by the given number"
,
COMMAND_GROUP_HASH
,
"1.3.10"
}
,
{
"HKEYS"
,
"key"
,
"Get all the fields in a hash"
,
COMMAND_GROUP_HASH
,
"1.3.10"
}
,
{
"HLEN"
,
"key"
,
"Get the number of fields in a hash"
,
COMMAND_GROUP_HASH
,
"1.3.10"
}
,
{
"HMGET"
,
"key (field)+"
,
"Get the values of all the given hash fields"
,
COMMAND_GROUP_HASH
,
"1.3.10"
}
,
{
"HMSET"
,
"key (field value)+"
,
"Set multiple hash fields to multiple values"
,
COMMAND_GROUP_HASH
,
"1.3.8"
}
,
{
"HSET"
,
"key field value"
,
"Set the string value of a hash field"
,
COMMAND_GROUP_HASH
,
"1.3.10"
}
,
{
"HSETNX"
,
"key field value"
,
"Set the value of a hash field, only if the field does not exist"
,
COMMAND_GROUP_HASH
,
"1.3.8"
}
,
{
"HVALS"
,
"key"
,
"Get all the values in a hash"
,
COMMAND_GROUP_HASH
,
"1.3.10"
}
,
{
"INCR"
,
"key"
,
"Increment the integer value of a key by one"
,
COMMAND_GROUP_STRING
,
"0.07"
}
,
{
"INCRBY"
,
"key increment"
,
"Increment the integer value of a key by the given number"
,
COMMAND_GROUP_STRING
,
"0.07"
}
,
{
"INFO"
,
"-"
,
"Get information and statistics about the server"
,
COMMAND_GROUP_SERVER
,
"0.07"
}
,
{
"KEYS"
,
"pattern"
,
"Find all keys matching the given pattern"
,
COMMAND_GROUP_GENERIC
,
"0.07"
}
,
{
"LASTSAVE"
,
"-"
,
"Get the UNIX time stamp of the last successful save to disk"
,
COMMAND_GROUP_SERVER
,
"0.07"
}
,
{
"LINDEX"
,
"key index"
,
"Get an element from a list by its index"
,
COMMAND_GROUP_LIST
,
"0.07"
}
,
{
"LINSERT"
,
"key BEFORE|AFTER pivot value"
,
"Insert an element before or after another element in a list"
,
COMMAND_GROUP_LIST
,
"2.1.1"
}
,
{
"LLEN"
,
"key"
,
"Get the length of a list"
,
COMMAND_GROUP_LIST
,
"0.07"
}
,
{
"LPOP"
,
"key"
,
"Remove and get the first element in a list"
,
COMMAND_GROUP_LIST
,
"0.07"
}
,
{
"LPUSH"
,
"key value"
,
"Prepend a value to a list"
,
COMMAND_GROUP_LIST
,
"0.07"
}
,
{
"LPUSHX"
,
"key value"
,
"Prepend a value to a list, only if the list exists"
,
COMMAND_GROUP_LIST
,
"2.1.1"
}
,
{
"LRANGE"
,
"key start stop"
,
"Get a range of elements from a list"
,
COMMAND_GROUP_LIST
,
"0.07"
}
,
{
"LREM"
,
"key count value"
,
"Remove elements from a list"
,
COMMAND_GROUP_LIST
,
"0.07"
}
,
{
"LSET"
,
"key index value"
,
"Set the value of an element in a list by its index"
,
COMMAND_GROUP_LIST
,
"0.07"
}
,
{
"LTRIM"
,
"key start stop"
,
"Trim a list to the specified range"
,
COMMAND_GROUP_LIST
,
"0.07"
}
,
{
"MGET"
,
"(key)+"
,
"Get the values of all the given keys"
,
COMMAND_GROUP_STRING
,
"0.07"
}
,
{
"MONITOR"
,
"-"
,
"Listen for all requests received by the server in real time"
,
COMMAND_GROUP_SERVER
,
"0.07"
}
,
{
"MOVE"
,
"key db"
,
"Move a key to another database"
,
COMMAND_GROUP_GENERIC
,
"0.07"
}
,
{
"MSET"
,
"(key value)+"
,
"Set multiple keys to multiple values"
,
COMMAND_GROUP_STRING
,
"1.001"
}
,
{
"MSETNX"
,
"(key value)+"
,
"Set multiple keys to multiple values, only if none of the keys exist"
,
COMMAND_GROUP_STRING
,
"1.001"
}
,
{
"MULTI"
,
"-"
,
"Mark the start of a transaction block"
,
COMMAND_GROUP_TRANSACTIONS
,
"1.1.95"
}
,
{
"PERSIST"
,
"key"
,
"Remove the expiration from a key"
,
COMMAND_GROUP_GENERIC
,
"2.1.2"
}
,
{
"PING"
,
"-"
,
"Ping the server"
,
COMMAND_GROUP_CONNECTION
,
"0.07"
}
,
{
"PSUBSCRIBE"
,
"pattern"
,
"Listen for messages published to channels matching the given patterns"
,
COMMAND_GROUP_PUBSUB
,
"1.3.8"
}
,
{
"PUBLISH"
,
"channel message"
,
"Post a message to a channel"
,
COMMAND_GROUP_PUBSUB
,
"1.3.8"
}
,
{
"PUNSUBSCRIBE"
,
"(pattern)*"
,
"Stop listening for messages posted to channels matching the given patterns"
,
COMMAND_GROUP_PUBSUB
,
"1.3.8"
}
,
{
"QUIT"
,
"-"
,
"Close the connection"
,
COMMAND_GROUP_CONNECTION
,
"0.07"
}
,
{
"RANDOMKEY"
,
"-"
,
"Return a random key from the keyspace"
,
COMMAND_GROUP_GENERIC
,
"0.07"
}
,
{
"RENAME"
,
"old new"
,
"Rename a key"
,
COMMAND_GROUP_GENERIC
,
"0.07"
}
,
{
"RENAMENX"
,
"old new"
,
"Rename a key, only if the new key does not exist"
,
COMMAND_GROUP_GENERIC
,
"0.07"
}
,
{
"RPOP"
,
"key"
,
"Remove and get the last element in a list"
,
COMMAND_GROUP_LIST
,
"0.07"
}
,
{
"RPOPLPUSH"
,
"source destination"
,
"Remove the last element in a list, append it to another list and return it"
,
COMMAND_GROUP_LIST
,
"1.1"
}
,
{
"RPUSH"
,
"key value"
,
"Append a value to a list"
,
COMMAND_GROUP_LIST
,
"0.07"
}
,
{
"RPUSHX"
,
"key value"
,
"Append a value to a list, only if the list exists"
,
COMMAND_GROUP_LIST
,
"2.1.1"
}
,
{
"SADD"
,
"key member"
,
"Add a member to a set"
,
COMMAND_GROUP_SET
,
"0.07"
}
,
{
"SAVE"
,
"-"
,
"Synchronously save the dataset to disk"
,
COMMAND_GROUP_SERVER
,
"0.07"
}
,
{
"SCARD"
,
"key"
,
"Get the number of members in a set"
,
COMMAND_GROUP_SET
,
"0.07"
}
,
{
"SDIFF"
,
"(key)+"
,
"Subtract multiple sets"
,
COMMAND_GROUP_SET
,
"0.100"
}
,
{
"SDIFFSTORE"
,
"destination (key)+"
,
"Subtract multiple sets and store the resulting set in a key"
,
COMMAND_GROUP_SET
,
"0.100"
}
,
{
"SELECT"
,
"index"
,
"Change the selected database for the current connection"
,
COMMAND_GROUP_CONNECTION
,
"0.07"
}
,
{
"SET"
,
"key value"
,
"Set the string value of a key"
,
COMMAND_GROUP_STRING
,
"0.07"
}
,
{
"SETEX"
,
"key timestamp value"
,
"Set the value and expiration of a key"
,
COMMAND_GROUP_STRING
,
"1.3.10"
}
,
{
"SETNX"
,
"key value"
,
"Set the value of a key, only if the key does not exist"
,
COMMAND_GROUP_STRING
,
"0.07"
}
,
{
"SHUTDOWN"
,
"-"
,
"Synchronously save the dataset to disk and then shut down the server"
,
COMMAND_GROUP_SERVER
,
"0.07"
}
,
{
"SINTER"
,
"(key)+"
,
"Intersect multiple sets"
,
COMMAND_GROUP_SET
,
"0.07"
}
,
{
"SINTERSTORE"
,
"destination (key)+"
,
"Intersect multiple sets and store the resulting set in a key"
,
COMMAND_GROUP_SET
,
"0.07"
}
,
{
"SISMEMBER"
,
"key member"
,
"Determine if a given value is a member of a set"
,
COMMAND_GROUP_SET
,
"0.07"
}
,
{
"SLAVEOF"
,
"host port"
,
"Make the server a slave of another instance, or promote it as master"
,
COMMAND_GROUP_SERVER
,
"0.100"
}
,
{
"SMEMBERS"
,
"key"
,
"Get all the members in a set"
,
COMMAND_GROUP_SET
,
"0.07"
}
,
{
"SMOVE"
,
"source destination member"
,
"Move a member from one set to another"
,
COMMAND_GROUP_SET
,
"0.091"
}
,
{
"SORT"
,
"key (BY pattern)? (LIMIT start count)? (GET pattern)* (ASC|DESC)? (ALPHA)? (STORE destination)?"
,
"Sort the elements in a list, set or sorted set"
,
COMMAND_GROUP_GENERIC
,
"0.07"
}
,
{
"SPOP"
,
"key"
,
"Remove and return a random member from a set"
,
COMMAND_GROUP_SET
,
"0.101"
}
,
{
"SRANDMEMBER"
,
"key"
,
"Get a random member from a set"
,
COMMAND_GROUP_SET
,
"1.001"
}
,
{
"SREM"
,
"key member"
,
"Remove a member from a set"
,
COMMAND_GROUP_SET
,
"0.07"
}
,
{
"STRLEN"
,
"key"
,
"Get the length of the value stored in a key"
,
COMMAND_GROUP_STRING
,
"2.1.2"
}
,
{
"SUBSCRIBE"
,
"channel"
,
"Listen for messages published to the given channels"
,
COMMAND_GROUP_PUBSUB
,
"1.3.8"
}
,
{
"SUBSTR"
,
"key start stop"
,
"Get a substring of the string stored at a key"
,
COMMAND_GROUP_STRING
,
"1.3.4"
}
,
{
"SUNION"
,
"(key)+"
,
"Add multiple sets"
,
COMMAND_GROUP_SET
,
"0.091"
}
,
{
"SUNIONSTORE"
,
"destination (key)+"
,
"Add multiple sets and store the resulting set in a key"
,
COMMAND_GROUP_SET
,
"0.091"
}
,
{
"SYNC"
,
"-"
,
"Internal command used for replication"
,
COMMAND_GROUP_SERVER
,
"0.07"
}
,
{
"TTL"
,
"key"
,
"Get the time to live for a key"
,
COMMAND_GROUP_GENERIC
,
"0.100"
}
,
{
"TYPE"
,
"key"
,
"Determine the type stored at key"
,
COMMAND_GROUP_GENERIC
,
"0.07"
}
,
{
"UNSUBSCRIBE"
,
"(channel)*"
,
"Stop listening for messages posted to the given channels"
,
COMMAND_GROUP_PUBSUB
,
"1.3.8"
}
,
{
"UNWATCH"
,
"-"
,
"Forget about all watched keys"
,
COMMAND_GROUP_TRANSACTIONS
,
"2.1.0"
}
,
{
"WATCH"
,
"(key)+"
,
"Watch the given keys to determine execution of the MULTI/EXEC block"
,
COMMAND_GROUP_TRANSACTIONS
,
"2.1.0"
}
,
{
"ZADD"
,
"key score member"
,
"Add a member to a sorted set, or update its score if it already exists"
,
COMMAND_GROUP_SORTED_SET
,
"1.1"
}
,
{
"ZCARD"
,
"key"
,
"Get the number of members in a sorted set"
,
COMMAND_GROUP_SORTED_SET
,
"1.1"
}
,
{
"ZCOUNT"
,
"key min max"
,
"Count the members in a sorted set with scores within the given values"
,
COMMAND_GROUP_SORTED_SET
,
"1.3.3"
}
,
{
"ZINCRBY"
,
"key increment member"
,
"Increment the score of a member in a sorted set"
,
COMMAND_GROUP_SORTED_SET
,
"1.1"
}
,
{
"ZINTERSTORE"
,
"destination (key)+ (WEIGHTS weight)? (AGGREGATE SUM|MIN|MAX)?"
,
"Intersect multiple sorted sets and store the resulting sorted set in a new key"
,
COMMAND_GROUP_SORTED_SET
,
"1.3.10"
}
,
{
"ZRANGE"
,
"key start stop"
,
"Return a range of members in a sorted set, by index"
,
COMMAND_GROUP_SORTED_SET
,
"1.1"
}
,
{
"ZRANGEBYSCORE"
,
"key min max"
,
"Return a range of members in a sorted set, by score"
,
COMMAND_GROUP_SORTED_SET
,
"1.050"
}
,
{
"ZRANK"
,
"key member"
,
"Determine the index of a member in a sorted set"
,
COMMAND_GROUP_SORTED_SET
,
"1.3.4"
}
,
{
"ZREM"
,
"key member"
,
"Remove a member from a sorted set"
,
COMMAND_GROUP_SORTED_SET
,
"1.1"
}
,
{
"ZREMRANGEBYRANK"
,
"key start stop"
,
"Remove all members in a sorted set within the given indexes"
,
COMMAND_GROUP_SORTED_SET
,
"1.3.4"
}
,
{
"ZREMRANGEBYSCORE"
,
"key min max"
,
"Remove all members in a sorted set within the given scores"
,
COMMAND_GROUP_SORTED_SET
,
"1.1"
}
,
{
"ZREVRANGE"
,
"key start stop"
,
"Return a range of members in a sorted set, by index, with scores ordered from high to low"
,
COMMAND_GROUP_SORTED_SET
,
"1.1"
}
,
{
"ZREVRANK"
,
"key member"
,
"Determine the index of a member in a sorted set, with scores ordered from high to low"
,
COMMAND_GROUP_SORTED_SET
,
"1.3.4"
}
,
{
"ZSCORE"
,
"key member"
,
"Get the score associated with the given member in a sorted set"
,
COMMAND_GROUP_SORTED_SET
,
"1.1"
}
,
{
"ZUNIONSTORE"
,
"destination (key)+ (WEIGHTS weight)? (AGGREGATE SUM|MIN|MAX)?"
,
"Add multiple sorted sets and store the resulting sorted set in a new key"
,
COMMAND_GROUP_SORTED_SET
,
"1.3.10"
}
};
/*
* Output command help to stdout.
*/
static
void
output_command_help
(
struct
command_help
*
help
)
{
printf
(
"
\n
\x1b
[1m%s
\x1b
[0m
\x1b
[90m%s
\x1b
[0m
\n
"
,
help
->
name
,
help
->
params
);
printf
(
"
\x1b
[33msummary:
\x1b
[0m %s
\n
"
,
help
->
summary
);
printf
(
"
\x1b
[33msince:
\x1b
[0m %s
\n
"
,
help
->
since
);
printf
(
"
\x1b
[33mgroup:
\x1b
[0m %s
\n
"
,
command_group_type_names
[
help
->
group
]);
}
/*
* Return command group type by name string.
*/
static
command_group_type_t
command_group_type_by_name
(
const
char
*
name
)
{
for
(
int
i
=
0
;
i
<
COMMAND_GROUP_LENGTH
;
++
i
)
{
const
char
*
group
=
command_group_type_names
[
i
];
if
(
0
==
strcasecmp
(
name
,
group
))
return
i
;
}
return
0
;
}
/*
* Output group names.
*/
static
void
output_group_help
()
{
for
(
int
i
=
0
;
i
<
COMMAND_GROUP_LENGTH
;
++
i
)
{
if
(
COMMAND_GROUP_UNKNOWN
==
i
)
continue
;
const
char
*
group
=
command_group_type_names
[
i
];
printf
(
"
\x1b
[90m-
\x1b
[0m %s
\n
"
,
group
);
}
}
/*
* Output all command help, filtering by group or command name.
*/
static
void
output_help
(
int
argc
,
const
char
**
argv
)
{
int
len
=
sizeof
(
command_help
)
/
sizeof
(
struct
command_help
);
if
(
argc
&&
0
==
strcasecmp
(
"groups"
,
argv
[
0
]))
{
output_group_help
();
return
;
}
command_group_type_t
group
=
argc
?
command_group_type_by_name
(
argv
[
0
])
:
COMMAND_GROUP_UNKNOWN
;
for
(
int
i
=
0
;
i
<
len
;
++
i
)
{
struct
command_help
help
=
command_help
[
i
];
if
(
argc
&&
!
group
&&
0
!=
strcasecmp
(
help
.
name
,
argv
[
0
]))
continue
;
if
(
group
&&
group
!=
help
.
group
)
continue
;
output_command_help
(
&
help
);
}
puts
(
""
);
}
src/redis-cli.c
View file @
2612e052
...
@@ -44,6 +44,7 @@
...
@@ -44,6 +44,7 @@
#include "sds.h"
#include "sds.h"
#include "zmalloc.h"
#include "zmalloc.h"
#include "linenoise.h"
#include "linenoise.h"
#include "help.h"
#define REDIS_NOTUSED(V) ((void) V)
#define REDIS_NOTUSED(V) ((void) V)
...
@@ -252,22 +253,6 @@ static int cliReadReply() {
...
@@ -252,22 +253,6 @@ static int cliReadReply() {
return
REDIS_OK
;
return
REDIS_OK
;
}
}
static
void
showInteractiveHelp
(
void
)
{
printf
(
"
\n
"
"Welcome to redis-cli "
REDIS_VERSION
"!
\n
"
"Just type any valid Redis command to see a pretty printed output.
\n
"
"
\n
"
"It is possible to quote strings, like in:
\n
"
" set
\"
my key
\"
\"
some string
\\
xff
\\
n
\"\n
"
"
\n
"
"You can find a list of valid Redis commands at
\n
"
" http://code.google.com/p/redis/wiki/CommandReference
\n
"
"
\n
"
"Note: redis-cli supports line editing, use up/down arrows for history."
"
\n\n
"
);
}
static
int
cliSendCommand
(
int
argc
,
char
**
argv
,
int
repeat
)
{
static
int
cliSendCommand
(
int
argc
,
char
**
argv
,
int
repeat
)
{
char
*
command
=
argv
[
0
];
char
*
command
=
argv
[
0
];
size_t
*
argvlen
;
size_t
*
argvlen
;
...
@@ -275,7 +260,7 @@ static int cliSendCommand(int argc, char **argv, int repeat) {
...
@@ -275,7 +260,7 @@ static int cliSendCommand(int argc, char **argv, int repeat) {
config
.
raw_output
=
!
strcasecmp
(
command
,
"info"
);
config
.
raw_output
=
!
strcasecmp
(
command
,
"info"
);
if
(
!
strcasecmp
(
command
,
"help"
))
{
if
(
!
strcasecmp
(
command
,
"help"
))
{
showInteractiveHelp
(
);
output_help
(
--
argc
,
++
argv
);
return
REDIS_OK
;
return
REDIS_OK
;
}
}
if
(
!
strcasecmp
(
command
,
"shutdown"
))
config
.
shutdown
=
1
;
if
(
!
strcasecmp
(
command
,
"shutdown"
))
config
.
shutdown
=
1
;
...
...
utils/generate-command-help.rb
0 → 100755
View file @
2612e052
#!/usr/bin/env ruby
require
'net/http'
require
'net/https'
require
'json'
require
'uri'
dest
=
ARGV
[
0
]
tmpl
=
File
.
read
'./utils/help.h'
url
=
URI
.
parse
'https://github.com/antirez/redis-doc/raw/master/commands.json'
client
=
Net
::
HTTP
.
new
url
.
host
,
url
.
port
client
.
use_ssl
=
true
res
=
client
.
get
url
.
path
def
argument
arg
name
=
arg
[
'name'
].
is_a?
(
Array
)
?
arg
[
'name'
].
join
(
' '
)
:
arg
[
'name'
]
name
=
arg
[
'enum'
].
join
'|'
if
'enum'
==
arg
[
'type'
]
name
=
arg
[
'command'
]
+
' '
+
name
if
arg
[
'command'
]
if
arg
[
'multiple'
]
name
=
"(
#{
name
}
)"
name
+=
arg
[
'optional'
]
?
'*'
:
'+'
elsif
arg
[
'optional'
]
name
=
"(
#{
name
}
)?"
end
name
end
def
arguments
command
return
'-'
unless
command
[
'arguments'
]
command
[
'arguments'
].
map
do
|
arg
|
argument
arg
end
.
join
' '
end
case
res
when
Net
::
HTTPSuccess
first
=
true
commands
=
JSON
.
parse
(
res
.
body
)
c
=
commands
.
map
do
|
key
,
command
|
buf
=
if
first
first
=
false
' '
else
"
\n
,"
end
buf
+=
" {
\"
#{
key
}
\"\n
"
+
" ,
\"
#{
arguments
(
command
)
}
\"\n
"
+
" ,
\"
#{
command
[
'summary'
]
}
\"\n
"
+
" , COMMAND_GROUP_
#{
command
[
'group'
].
upcase
}
\n
"
+
" ,
\"
#{
command
[
'since'
]
}
\"
}"
end
.
join
(
"
\n
"
)
puts
"
\n
// Auto-generated, do not edit.
\n
"
+
tmpl
.
sub
(
'__COMMANDS__'
,
c
)
else
res
.
error!
end
\ No newline at end of file
utils/help.h
0 → 100644
View file @
2612e052
#include <stdio.h>
#include <string.h>
/*
* List command groups.
*/
#define GROUPS \
G(UNKNOWN, "unknown") \
G(SET, "set") \
G(LIST, "list") \
G(HASH, "hash") \
G(GENERIC, "generic") \
G(PUBSUB, "pubsub") \
G(STRING, "string") \
G(SERVER, "server") \
G(CONNECTION, "connection") \
G(TRANSACTIONS, "transactions") \
G(SORTED_SET, "sorted_set")
/*
* Command group types.
*/
typedef
enum
{
#define G(GROUP, _) COMMAND_GROUP_##GROUP,
GROUPS
#undef G
COMMAND_GROUP_LENGTH
}
command_group_type_t
;
/*
* Command group type names.
*/
static
char
*
command_group_type_names
[]
=
{
#define G(_, STR) STR,
GROUPS
#undef G
};
/*
* Command help struct.
*/
struct
command_help
{
char
*
name
;
char
*
params
;
char
*
summary
;
command_group_type_t
group
;
char
*
since
;
}
command_help
[]
=
{
__COMMANDS__
};
/*
* Output command help to stdout.
*/
static
void
output_command_help
(
struct
command_help
*
help
)
{
printf
(
"
\n
\x1b
[1m%s
\x1b
[0m
\x1b
[90m%s
\x1b
[0m
\n
"
,
help
->
name
,
help
->
params
);
printf
(
"
\x1b
[33msummary:
\x1b
[0m %s
\n
"
,
help
->
summary
);
printf
(
"
\x1b
[33msince:
\x1b
[0m %s
\n
"
,
help
->
since
);
printf
(
"
\x1b
[33mgroup:
\x1b
[0m %s
\n
"
,
command_group_type_names
[
help
->
group
]);
}
/*
* Return command group type by name string.
*/
static
command_group_type_t
command_group_type_by_name
(
const
char
*
name
)
{
for
(
int
i
=
0
;
i
<
COMMAND_GROUP_LENGTH
;
++
i
)
{
const
char
*
group
=
command_group_type_names
[
i
];
if
(
0
==
strcasecmp
(
name
,
group
))
return
i
;
}
return
0
;
}
/*
* Output group names.
*/
static
void
output_group_help
()
{
for
(
int
i
=
0
;
i
<
COMMAND_GROUP_LENGTH
;
++
i
)
{
if
(
COMMAND_GROUP_UNKNOWN
==
i
)
continue
;
const
char
*
group
=
command_group_type_names
[
i
];
printf
(
"
\x1b
[90m-
\x1b
[0m %s
\n
"
,
group
);
}
}
/*
* Output all command help, filtering by group or command name.
*/
static
void
output_help
(
int
argc
,
const
char
**
argv
)
{
int
len
=
sizeof
(
command_help
)
/
sizeof
(
struct
command_help
);
if
(
argc
&&
0
==
strcasecmp
(
"groups"
,
argv
[
0
]))
{
output_group_help
();
return
;
}
command_group_type_t
group
=
argc
?
command_group_type_by_name
(
argv
[
0
])
:
COMMAND_GROUP_UNKNOWN
;
for
(
int
i
=
0
;
i
<
len
;
++
i
)
{
struct
command_help
help
=
command_help
[
i
];
if
(
argc
&&
!
group
&&
0
!=
strcasecmp
(
help
.
name
,
argv
[
0
]))
continue
;
if
(
group
&&
group
!=
help
.
group
)
continue
;
output_command_help
(
&
help
);
}
puts
(
""
);
}
\ No newline at end of file
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