]> git.saurik.com Git - redis.git/commitdiff
Refactor help-related code into redis-cli.c
authorPieter Noordhuis <pcnoordhuis@gmail.com>
Sun, 28 Nov 2010 20:37:19 +0000 (21:37 +0100)
committerPieter Noordhuis <pcnoordhuis@gmail.com>
Sun, 28 Nov 2010 20:37:19 +0000 (21:37 +0100)
src/help.h
src/redis-cli.c
utils/generate-command-help.rb
utils/help.h [deleted file]

index ba9b299a97e93191c31ef05ea2cec3d1721918d0..121d9dfaf119aac19679a41e20f8bb7dc6614a46 100644 (file)
+/* Automatically generated by utils/generate-command-help.rb, do not edit. */
 
-// Auto-generated, do not edit.
+#ifndef __REDIS_HELP_H
+#define __REDIS_HELP_H
 
-#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
+static char *commandGroups[] = {
+    "generic",
+    "string",
+    "list",
+    "set",
+    "sorted_set",
+    "hash",
+    "pubsub",
+    "transactions",
+    "connection",
+    "server"
 };
 
-/*
- * Command help struct.
- */
-
-struct command_help {
+struct commandHelp {
   char *name;
   char *params;
   char *summary;
-  command_group_type_t group;
+  int group;
   char *since;
-} command_help[] = {
-  { "APPEND",
+} commandHelp[] = {
+    { "APPEND",
     "key value",
     "Append a value to a key",
-    COMMAND_GROUP_STRING,
-    "1.3.3" }
-,  { "AUTH",
+    1,
+    "1.3.3" },
+    { "AUTH",
     "password",
     "Authenticate to the server",
-    COMMAND_GROUP_CONNECTION,
-    "0.08" }
-,  { "BGREWRITEAOF",
+    8,
+    "0.08" },
+    { "BGREWRITEAOF",
     "-",
     "Asynchronously rewrite the append-only file",
-    COMMAND_GROUP_SERVER,
-    "1.07" }
-,  { "BGSAVE",
+    9,
+    "1.07" },
+    { "BGSAVE",
     "-",
     "Asynchronously save the dataset to disk",
-    COMMAND_GROUP_SERVER,
-    "0.07" }
-,  { "BLPOP",
+    9,
+    "0.07" },
+    { "BLPOP",
     "key [key ...] timeout",
     "Remove and get the first element in a list, or block until one is available",
-    COMMAND_GROUP_LIST,
-    "1.3.1" }
-,  { "BRPOP",
+    2,
+    "1.3.1" },
+    { "BRPOP",
     "key [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",
+    2,
+    "1.3.1" },
+    { "CONFIG GET",
     "parameter",
     "Get the value of a configuration parameter",
-    COMMAND_GROUP_SERVER,
-    "2.0" }
-,  { "CONFIG SET",
+    9,
+    "2.0" },
+    { "CONFIG SET",
     "parameter value",
     "Set a configuration parameter to the given value",
-    COMMAND_GROUP_SERVER,
-    "2.0" }
-,  { "DBSIZE",
+    9,
+    "2.0" },
+    { "DBSIZE",
     "-",
     "Return the number of keys in the selected database",
-    COMMAND_GROUP_SERVER,
-    "0.07" }
-,  { "DEBUG OBJECT",
+    9,
+    "0.07" },
+    { "DEBUG OBJECT",
     "key",
     "Get debugging information about a key",
-    COMMAND_GROUP_SERVER,
-    "0.101" }
-,  { "DEBUG SEGFAULT",
+    9,
+    "0.101" },
+    { "DEBUG SEGFAULT",
     "-",
     "Make the server crash",
-    COMMAND_GROUP_SERVER,
-    "0.101" }
-,  { "DECR",
+    9,
+    "0.101" },
+    { "DECR",
     "key decrement",
     "Decrement the integer value of a key by one",
-    COMMAND_GROUP_STRING,
-    "0.07" }
-,  { "DECRBY",
+    1,
+    "0.07" },
+    { "DECRBY",
     "key decrement",
     "Decrement the integer value of a key by the given number",
-    COMMAND_GROUP_STRING,
-    "0.07" }
-,  { "DEL",
+    1,
+    "0.07" },
+    { "DEL",
     "key [key ...]",
     "Delete a key",
-    COMMAND_GROUP_GENERIC,
-    "0.07" }
-,  { "DISCARD",
+    0,
+    "0.07" },
+    { "DISCARD",
     "-",
     "Discard all commands issued after MULTI",
-    COMMAND_GROUP_TRANSACTIONS,
-    "1.3.3" }
-,  { "ECHO",
+    7,
+    "1.3.3" },
+    { "ECHO",
     "message",
     "Echo the given string",
-    COMMAND_GROUP_CONNECTION,
-    "0.07" }
-,  { "EXEC",
+    8,
+    "0.07" },
+    { "EXEC",
     "-",
     "Execute all commands issued after MULTI",
-    COMMAND_GROUP_TRANSACTIONS,
-    "1.1.95" }
-,  { "EXISTS",
+    7,
+    "1.1.95" },
+    { "EXISTS",
     "key",
     "Determine if a key exists",
-    COMMAND_GROUP_SERVER,
-    "0.07" }
-,  { "EXPIRE",
+    9,
+    "0.07" },
+    { "EXPIRE",
     "key seconds",
     "Set a key's time to live in seconds",
-    COMMAND_GROUP_GENERIC,
-    "0.09" }
-,  { "EXPIREAT",
+    0,
+    "0.09" },
+    { "EXPIREAT",
     "key timestamp",
     "Set the expiration for a key as a UNIX timestamp",
-    COMMAND_GROUP_GENERIC,
-    "1.1" }
-,  { "FLUSHALL",
+    0,
+    "1.1" },
+    { "FLUSHALL",
     "-",
     "Remove all keys from all databases",
-    COMMAND_GROUP_SERVER,
-    "0.07" }
-,  { "FLUSHDB",
+    9,
+    "0.07" },
+    { "FLUSHDB",
     "-",
     "Remove all keys from the current database",
-    COMMAND_GROUP_SERVER,
-    "0.07" }
-,  { "GET",
+    9,
+    "0.07" },
+    { "GET",
     "key",
     "Get the value of a key",
-    COMMAND_GROUP_STRING,
-    "0.07" }
-,  { "GETSET",
+    1,
+    "0.07" },
+    { "GETSET",
     "key value",
     "Set the string value of a key and return its old value",
-    COMMAND_GROUP_STRING,
-    "0.091" }
-,  { "HDEL",
+    1,
+    "0.091" },
+    { "HDEL",
     "key field",
     "Delete a hash field",
-    COMMAND_GROUP_HASH,
-    "1.3.10" }
-,  { "HEXISTS",
+    5,
+    "1.3.10" },
+    { "HEXISTS",
     "key field",
     "Determine if a hash field exists",
-    COMMAND_GROUP_HASH,
-    "1.3.10" }
-,  { "HGET",
+    5,
+    "1.3.10" },
+    { "HGET",
     "key field",
     "Get the value of a hash field",
-    COMMAND_GROUP_HASH,
-    "1.3.10" }
-,  { "HGETALL",
+    5,
+    "1.3.10" },
+    { "HGETALL",
     "key",
     "Get all the fields and values in a hash",
-    COMMAND_GROUP_HASH,
-    "1.3.10" }
-,  { "HINCRBY",
+    5,
+    "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",
+    5,
+    "1.3.10" },
+    { "HKEYS",
     "key",
     "Get all the fields in a hash",
-    COMMAND_GROUP_HASH,
-    "1.3.10" }
-,  { "HLEN",
+    5,
+    "1.3.10" },
+    { "HLEN",
     "key",
     "Get the number of fields in a hash",
-    COMMAND_GROUP_HASH,
-    "1.3.10" }
-,  { "HMGET",
+    5,
+    "1.3.10" },
+    { "HMGET",
     "key field [field ...]",
     "Get the values of all the given hash fields",
-    COMMAND_GROUP_HASH,
-    "1.3.10" }
-,  { "HMSET",
+    5,
+    "1.3.10" },
+    { "HMSET",
     "key field value [field value ...]",
     "Set multiple hash fields to multiple values",
-    COMMAND_GROUP_HASH,
-    "1.3.8" }
-,  { "HSET",
+    5,
+    "1.3.8" },
+    { "HSET",
     "key field value",
     "Set the string value of a hash field",
-    COMMAND_GROUP_HASH,
-    "1.3.10" }
-,  { "HSETNX",
+    5,
+    "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",
+    5,
+    "1.3.8" },
+    { "HVALS",
     "key",
     "Get all the values in a hash",
-    COMMAND_GROUP_HASH,
-    "1.3.10" }
-,  { "INCR",
+    5,
+    "1.3.10" },
+    { "INCR",
     "key",
     "Increment the integer value of a key by one",
-    COMMAND_GROUP_STRING,
-    "0.07" }
-,  { "INCRBY",
+    1,
+    "0.07" },
+    { "INCRBY",
     "key increment",
     "Increment the integer value of a key by the given number",
-    COMMAND_GROUP_STRING,
-    "0.07" }
-,  { "INFO",
+    1,
+    "0.07" },
+    { "INFO",
     "-",
     "Get information and statistics about the server",
-    COMMAND_GROUP_SERVER,
-    "0.07" }
-,  { "KEYS",
+    9,
+    "0.07" },
+    { "KEYS",
     "pattern",
     "Find all keys matching the given pattern",
-    COMMAND_GROUP_GENERIC,
-    "0.07" }
-,  { "LASTSAVE",
+    0,
+    "0.07" },
+    { "LASTSAVE",
     "-",
     "Get the UNIX time stamp of the last successful save to disk",
-    COMMAND_GROUP_SERVER,
-    "0.07" }
-,  { "LINDEX",
+    9,
+    "0.07" },
+    { "LINDEX",
     "key index",
     "Get an element from a list by its index",
-    COMMAND_GROUP_LIST,
-    "0.07" }
-,  { "LINSERT",
+    2,
+    "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",
+    2,
+    "2.1.1" },
+    { "LLEN",
     "key",
     "Get the length of a list",
-    COMMAND_GROUP_LIST,
-    "0.07" }
-,  { "LPOP",
+    2,
+    "0.07" },
+    { "LPOP",
     "key",
     "Remove and get the first element in a list",
-    COMMAND_GROUP_LIST,
-    "0.07" }
-,  { "LPUSH",
+    2,
+    "0.07" },
+    { "LPUSH",
     "key value",
     "Prepend a value to a list",
-    COMMAND_GROUP_LIST,
-    "0.07" }
-,  { "LPUSHX",
+    2,
+    "0.07" },
+    { "LPUSHX",
     "key value",
     "Prepend a value to a list, only if the list exists",
-    COMMAND_GROUP_LIST,
-    "2.1.1" }
-,  { "LRANGE",
+    2,
+    "2.1.1" },
+    { "LRANGE",
     "key start stop",
     "Get a range of elements from a list",
-    COMMAND_GROUP_LIST,
-    "0.07" }
-,  { "LREM",
+    2,
+    "0.07" },
+    { "LREM",
     "key count value",
     "Remove elements from a list",
-    COMMAND_GROUP_LIST,
-    "0.07" }
-,  { "LSET",
+    2,
+    "0.07" },
+    { "LSET",
     "key index value",
     "Set the value of an element in a list by its index",
-    COMMAND_GROUP_LIST,
-    "0.07" }
-,  { "LTRIM",
+    2,
+    "0.07" },
+    { "LTRIM",
     "key start stop",
     "Trim a list to the specified range",
-    COMMAND_GROUP_LIST,
-    "0.07" }
-,  { "MGET",
+    2,
+    "0.07" },
+    { "MGET",
     "key [key ...]",
     "Get the values of all the given keys",
-    COMMAND_GROUP_STRING,
-    "0.07" }
-,  { "MONITOR",
+    1,
+    "0.07" },
+    { "MONITOR",
     "-",
     "Listen for all requests received by the server in real time",
-    COMMAND_GROUP_SERVER,
-    "0.07" }
-,  { "MOVE",
+    9,
+    "0.07" },
+    { "MOVE",
     "key db",
     "Move a key to another database",
-    COMMAND_GROUP_GENERIC,
-    "0.07" }
-,  { "MSET",
+    0,
+    "0.07" },
+    { "MSET",
     "key value [key value ...]",
     "Set multiple keys to multiple values",
-    COMMAND_GROUP_STRING,
-    "1.001" }
-,  { "MSETNX",
+    1,
+    "1.001" },
+    { "MSETNX",
     "key value [key value ...]",
     "Set multiple keys to multiple values, only if none of the keys exist",
-    COMMAND_GROUP_STRING,
-    "1.001" }
-,  { "MULTI",
+    1,
+    "1.001" },
+    { "MULTI",
     "-",
     "Mark the start of a transaction block",
-    COMMAND_GROUP_TRANSACTIONS,
-    "1.1.95" }
-,  { "PERSIST",
+    7,
+    "1.1.95" },
+    { "PERSIST",
     "key",
     "Remove the expiration from a key",
-    COMMAND_GROUP_GENERIC,
-    "2.1.2" }
-,  { "PING",
+    0,
+    "2.1.2" },
+    { "PING",
     "-",
     "Ping the server",
-    COMMAND_GROUP_CONNECTION,
-    "0.07" }
-,  { "PSUBSCRIBE",
+    8,
+    "0.07" },
+    { "PSUBSCRIBE",
     "pattern",
     "Listen for messages published to channels matching the given patterns",
-    COMMAND_GROUP_PUBSUB,
-    "1.3.8" }
-,  { "PUBLISH",
+    6,
+    "1.3.8" },
+    { "PUBLISH",
     "channel message",
     "Post a message to a channel",
-    COMMAND_GROUP_PUBSUB,
-    "1.3.8" }
-,  { "PUNSUBSCRIBE",
+    6,
+    "1.3.8" },
+    { "PUNSUBSCRIBE",
     "[pattern [pattern ...]]",
     "Stop listening for messages posted to channels matching the given patterns",
-    COMMAND_GROUP_PUBSUB,
-    "1.3.8" }
-,  { "QUIT",
+    6,
+    "1.3.8" },
+    { "QUIT",
     "-",
     "Close the connection",
-    COMMAND_GROUP_CONNECTION,
-    "0.07" }
-,  { "RANDOMKEY",
+    8,
+    "0.07" },
+    { "RANDOMKEY",
     "-",
     "Return a random key from the keyspace",
-    COMMAND_GROUP_GENERIC,
-    "0.07" }
-,  { "RENAME",
+    0,
+    "0.07" },
+    { "RENAME",
     "old new",
     "Rename a key",
-    COMMAND_GROUP_GENERIC,
-    "0.07" }
-,  { "RENAMENX",
+    0,
+    "0.07" },
+    { "RENAMENX",
     "old new",
     "Rename a key, only if the new key does not exist",
-    COMMAND_GROUP_GENERIC,
-    "0.07" }
-,  { "RPOP",
+    0,
+    "0.07" },
+    { "RPOP",
     "key",
     "Remove and get the last element in a list",
-    COMMAND_GROUP_LIST,
-    "0.07" }
-,  { "RPOPLPUSH",
+    2,
+    "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",
+    2,
+    "1.1" },
+    { "RPUSH",
     "key value",
     "Append a value to a list",
-    COMMAND_GROUP_LIST,
-    "0.07" }
-,  { "RPUSHX",
+    2,
+    "0.07" },
+    { "RPUSHX",
     "key value",
     "Append a value to a list, only if the list exists",
-    COMMAND_GROUP_LIST,
-    "2.1.1" }
-,  { "SADD",
+    2,
+    "2.1.1" },
+    { "SADD",
     "key member",
     "Add a member to a set",
-    COMMAND_GROUP_SET,
-    "0.07" }
-,  { "SAVE",
+    3,
+    "0.07" },
+    { "SAVE",
     "-",
     "Synchronously save the dataset to disk",
-    COMMAND_GROUP_SERVER,
-    "0.07" }
-,  { "SCARD",
+    9,
+    "0.07" },
+    { "SCARD",
     "key",
     "Get the number of members in a set",
-    COMMAND_GROUP_SET,
-    "0.07" }
-,  { "SDIFF",
+    3,
+    "0.07" },
+    { "SDIFF",
     "key [key ...]",
     "Subtract multiple sets",
-    COMMAND_GROUP_SET,
-    "0.100" }
-,  { "SDIFFSTORE",
+    3,
+    "0.100" },
+    { "SDIFFSTORE",
     "destination key [key ...]",
     "Subtract multiple sets and store the resulting set in a key",
-    COMMAND_GROUP_SET,
-    "0.100" }
-,  { "SELECT",
+    3,
+    "0.100" },
+    { "SELECT",
     "index",
     "Change the selected database for the current connection",
-    COMMAND_GROUP_CONNECTION,
-    "0.07" }
-,  { "SET",
+    8,
+    "0.07" },
+    { "SET",
     "key value",
     "Set the string value of a key",
-    COMMAND_GROUP_STRING,
-    "0.07" }
-,  { "SETEX",
+    1,
+    "0.07" },
+    { "SETEX",
     "key timestamp value",
     "Set the value and expiration of a key",
-    COMMAND_GROUP_STRING,
-    "1.3.10" }
-,  { "SETNX",
+    1,
+    "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",
+    1,
+    "0.07" },
+    { "SHUTDOWN",
     "-",
     "Synchronously save the dataset to disk and then shut down the server",
-    COMMAND_GROUP_SERVER,
-    "0.07" }
-,  { "SINTER",
+    9,
+    "0.07" },
+    { "SINTER",
     "key [key ...]",
     "Intersect multiple sets",
-    COMMAND_GROUP_SET,
-    "0.07" }
-,  { "SINTERSTORE",
+    3,
+    "0.07" },
+    { "SINTERSTORE",
     "destination key [key ...]",
     "Intersect multiple sets and store the resulting set in a key",
-    COMMAND_GROUP_SET,
-    "0.07" }
-,  { "SISMEMBER",
+    3,
+    "0.07" },
+    { "SISMEMBER",
     "key member",
     "Determine if a given value is a member of a set",
-    COMMAND_GROUP_SET,
-    "0.07" }
-,  { "SLAVEOF",
+    3,
+    "0.07" },
+    { "SLAVEOF",
     "host port",
     "Make the server a slave of another instance, or promote it as master",
-    COMMAND_GROUP_SERVER,
-    "0.100" }
-,  { "SMEMBERS",
+    9,
+    "0.100" },
+    { "SMEMBERS",
     "key",
     "Get all the members in a set",
-    COMMAND_GROUP_SET,
-    "0.07" }
-,  { "SMOVE",
+    3,
+    "0.07" },
+    { "SMOVE",
     "source destination member",
     "Move a member from one set to another",
-    COMMAND_GROUP_SET,
-    "0.091" }
-,  { "SORT",
+    3,
+    "0.091" },
+    { "SORT",
     "key [BY pattern] [LIMIT start count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]",
     "Sort the elements in a list, set or sorted set",
-    COMMAND_GROUP_GENERIC,
-    "0.07" }
-,  { "SPOP",
+    0,
+    "0.07" },
+    { "SPOP",
     "key",
     "Remove and return a random member from a set",
-    COMMAND_GROUP_SET,
-    "0.101" }
-,  { "SRANDMEMBER",
+    3,
+    "0.101" },
+    { "SRANDMEMBER",
     "key",
     "Get a random member from a set",
-    COMMAND_GROUP_SET,
-    "1.001" }
-,  { "SREM",
+    3,
+    "1.001" },
+    { "SREM",
     "key member",
     "Remove a member from a set",
-    COMMAND_GROUP_SET,
-    "0.07" }
-,  { "STRLEN",
+    3,
+    "0.07" },
+    { "STRLEN",
     "key",
     "Get the length of the value stored in a key",
-    COMMAND_GROUP_STRING,
-    "2.1.2" }
-,  { "SUBSCRIBE",
+    1,
+    "2.1.2" },
+    { "SUBSCRIBE",
     "channel",
     "Listen for messages published to the given channels",
-    COMMAND_GROUP_PUBSUB,
-    "1.3.8" }
-,  { "SUBSTR",
+    6,
+    "1.3.8" },
+    { "SUBSTR",
     "key start stop",
     "Get a substring of the string stored at a key",
-    COMMAND_GROUP_STRING,
-    "1.3.4" }
-,  { "SUNION",
+    1,
+    "1.3.4" },
+    { "SUNION",
     "key [key ...]",
     "Add multiple sets",
-    COMMAND_GROUP_SET,
-    "0.091" }
-,  { "SUNIONSTORE",
+    3,
+    "0.091" },
+    { "SUNIONSTORE",
     "destination key [key ...]",
     "Add multiple sets and store the resulting set in a key",
-    COMMAND_GROUP_SET,
-    "0.091" }
-,  { "SYNC",
+    3,
+    "0.091" },
+    { "SYNC",
     "-",
     "Internal command used for replication",
-    COMMAND_GROUP_SERVER,
-    "0.07" }
-,  { "TTL",
+    9,
+    "0.07" },
+    { "TTL",
     "key",
     "Get the time to live for a key",
-    COMMAND_GROUP_GENERIC,
-    "0.100" }
-,  { "TYPE",
+    0,
+    "0.100" },
+    { "TYPE",
     "key",
     "Determine the type stored at key",
-    COMMAND_GROUP_GENERIC,
-    "0.07" }
-,  { "UNSUBSCRIBE",
+    0,
+    "0.07" },
+    { "UNSUBSCRIBE",
     "[channel [channel ...]]",
     "Stop listening for messages posted to the given channels",
-    COMMAND_GROUP_PUBSUB,
-    "1.3.8" }
-,  { "UNWATCH",
+    6,
+    "1.3.8" },
+    { "UNWATCH",
     "-",
     "Forget about all watched keys",
-    COMMAND_GROUP_TRANSACTIONS,
-    "2.1.0" }
-,  { "WATCH",
+    7,
+    "2.1.0" },
+    { "WATCH",
     "key [key ...]",
     "Watch the given keys to determine execution of the MULTI/EXEC block",
-    COMMAND_GROUP_TRANSACTIONS,
-    "2.1.0" }
-,  { "ZADD",
+    7,
+    "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",
+    4,
+    "1.1" },
+    { "ZCARD",
     "key",
     "Get the number of members in a sorted set",
-    COMMAND_GROUP_SORTED_SET,
-    "1.1" }
-,  { "ZCOUNT",
+    4,
+    "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",
+    4,
+    "1.3.3" },
+    { "ZINCRBY",
     "key increment member",
     "Increment the score of a member in a sorted set",
-    COMMAND_GROUP_SORTED_SET,
-    "1.1" }
-,  { "ZINTERSTORE",
+    4,
+    "1.1" },
+    { "ZINTERSTORE",
     "destination key [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",
+    4,
+    "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",
+    4,
+    "1.1" },
+    { "ZRANGEBYSCORE",
     "key min max",
     "Return a range of members in a sorted set, by score",
-    COMMAND_GROUP_SORTED_SET,
-    "1.050" }
-,  { "ZRANK",
+    4,
+    "1.050" },
+    { "ZRANK",
     "key member",
     "Determine the index of a member in a sorted set",
-    COMMAND_GROUP_SORTED_SET,
-    "1.3.4" }
-,  { "ZREM",
+    4,
+    "1.3.4" },
+    { "ZREM",
     "key member",
     "Remove a member from a sorted set",
-    COMMAND_GROUP_SORTED_SET,
-    "1.1" }
-,  { "ZREMRANGEBYRANK",
+    4,
+    "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",
+    4,
+    "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",
+    4,
+    "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",
+    4,
+    "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",
+    4,
+    "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",
+    4,
+    "1.1" },
+    { "ZUNIONSTORE",
     "destination key [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,
+    4,
     "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("");
-}
+#endif
index 5f01a936e0d5851fbdd2a64602f0ede0d5789cd6..865f093135550fdd8b7c36fe4214e87e90af95cd 100644 (file)
@@ -84,6 +84,65 @@ static long long mstime(void) {
     return mst;
 }
 
+/*------------------------------------------------------------------------------
+ * Help functions
+ *--------------------------------------------------------------------------- */
+
+/* Output command help to stdout. */
+static void outputCommandHelp(struct commandHelp *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", commandGroups[help->group]);
+}
+
+/* Return command group type by name string. */
+static int commandGroupIndex(const char *name) {
+    int i, len = sizeof(commandGroups)/sizeof(char*);
+    for (i = 0; i < len; i++)
+        if (strcasecmp(name, commandGroups[i]) == 0)
+            return i;
+    return -1;
+}
+
+/* Output group names. */
+static void outputGroupHelp() {
+    int i, len = sizeof(commandGroups)/sizeof(char*);
+    for (i = 0; i < len; i++)
+        printf("  \x1b[90m-\x1b[0m %s\n", commandGroups[i]);
+}
+
+/* Output all command help, filtering by group or command name. */
+static void outputHelp(int argc, char **argv) {
+    int i, len = sizeof(commandHelp) / sizeof(struct commandHelp);
+    int group;
+    struct commandHelp *help;
+
+    if (argc && strcasecmp("groups", argv[0]) == 0) {
+        outputGroupHelp();
+        return;
+    }
+
+    group = argc ? commandGroupIndex(argv[0]) : -1;
+    for (i = 0; i < len; i++) {
+        help = &commandHelp[i];
+        if (group == -1) {
+            if (argc) {
+                if (strcasecmp(help->name, argv[0]) == 0) {
+                    outputCommandHelp(help);
+                }
+            } else {
+                outputCommandHelp(help);
+            }
+        } else {
+            if (group == help->group) {
+                outputCommandHelp(help);
+            }
+        }
+    }
+    puts("");
+}
+
 /*------------------------------------------------------------------------------
  * Networking / parsing
  *--------------------------------------------------------------------------- */
@@ -260,7 +319,7 @@ static int cliSendCommand(int argc, char **argv, int repeat) {
 
     config.raw_output = !strcasecmp(command,"info");
     if (!strcasecmp(command,"help")) {
-        output_help(--argc, ++argv);
+        outputHelp(--argc, ++argv);
         return REDIS_OK;
     }
     if (!strcasecmp(command,"shutdown")) config.shutdown = 1;
index 4b2f25a15ba0999461d74580a377b39838b0c828..f730eaf10092ee781dd1e238d299a2883b95a4ba 100755 (executable)
@@ -1,5 +1,24 @@
 #!/usr/bin/env ruby
 
+GROUPS = [
+  "generic",
+  "string",
+  "list",
+  "set",
+  "sorted_set",
+  "hash",
+  "pubsub",
+  "transactions",
+  "connection",
+  "server"
+].freeze
+
+GROUPS_BY_NAME = Hash[*
+  GROUPS.each_with_index.map do |n,i|
+    [n,i]
+  end.flatten
+].freeze
+
 def argument arg
   name = arg["name"].is_a?(Array) ? arg["name"].join(" ") : arg["name"]
   name = arg["enum"].join "|" if "enum" == arg["type"]
@@ -39,21 +58,54 @@ def commands
   end
 end
 
+def generate_groups
+  GROUPS.map do |n|
+    "\"#{n}\""
+  end.join(",\n    ");
+end
+
 def generate_commands
   commands.to_a.sort do |x,y|
     x[0] <=> y[0]
   end.map do |key, command|
-    <<-SPEC
+    group = GROUPS_BY_NAME[command["group"]]
+    if group.nil?
+      STDERR.puts "Please update groups array in #{__FILE__}"
+      raise "Unknown group #{command["group"]}"
+    end
+
+    ret = <<-SPEC
 { "#{key}",
     "#{arguments(command)}",
     "#{command["summary"]}",
-    COMMAND_GROUP_#{command["group"].upcase},
+    #{group},
     "#{command["since"]}" }
     SPEC
-  end.join(",  ")
+    ret.strip
+  end.join(",\n    ")
 end
 
 # Write to stdout
-tmpl = File.read "./utils/help.h"
-puts "\n// Auto-generated, do not edit.\n" + tmpl.sub("__COMMANDS__", generate_commands)
+puts <<-HELP_H
+/* Automatically generated by #{__FILE__}, do not edit. */
+
+#ifndef __REDIS_HELP_H
+#define __REDIS_HELP_H
+
+static char *commandGroups[] = {
+    #{generate_groups}
+};
+
+struct commandHelp {
+  char *name;
+  char *params;
+  char *summary;
+  int group;
+  char *since;
+} commandHelp[] = {
+    #{generate_commands}
+};
+
+#endif
+HELP_H
 
diff --git a/utils/help.h b/utils/help.h
deleted file mode 100644 (file)
index dc7f270..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-
-#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