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
a2a69d58
Commit
a2a69d58
authored
Nov 28, 2010
by
Pieter Noordhuis
Browse files
Refactor help-related code into redis-cli.c
parent
50d0e82d
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
src/help.h
View file @
a2a69d58
This diff is collapsed.
Click to expand it.
src/redis-cli.c
View file @
a2a69d58
...
...
@@ -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
_h
elp
(
--
argc
,
++
argv
);
output
H
elp
(
--
argc
,
++
argv
);
return
REDIS_OK
;
}
if
(
!
strcasecmp
(
command
,
"shutdown"
))
config
.
shutdown
=
1
;
...
...
utils/generate-command-help.rb
View file @
a2a69d58
#!/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
utils/help.h
deleted
100644 → 0
View file @
50d0e82d
#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