d322e7baba
See https://github.com/redis/redis-doc/pull/1443 Also allows nameless commands.
124 lines
2.2 KiB
Ruby
Executable File
124 lines
2.2 KiB
Ruby
Executable File
#!/usr/bin/env ruby
|
|
|
|
GROUPS = [
|
|
"generic",
|
|
"string",
|
|
"list",
|
|
"set",
|
|
"sorted_set",
|
|
"hash",
|
|
"pubsub",
|
|
"transactions",
|
|
"connection",
|
|
"server",
|
|
"scripting",
|
|
"hyperloglog",
|
|
"cluster",
|
|
"geo",
|
|
"stream"
|
|
].freeze
|
|
|
|
GROUPS_BY_NAME = Hash[*
|
|
GROUPS.each_with_index.map do |n,i|
|
|
[n,i]
|
|
end.flatten
|
|
].freeze
|
|
|
|
def argument arg
|
|
if "block" == arg["type"]
|
|
name = arg["block"].map do |entry|
|
|
argument entry
|
|
end.join " "
|
|
else
|
|
name = arg["name"].is_a?(Array) ? arg["name"].join(" ") : arg["name"]
|
|
name = arg["enum"].join "|" if "enum" == arg["type"]
|
|
name = arg["command"] + (name ? " " + name : "") if arg["command"]
|
|
end
|
|
if arg["multiple"]
|
|
name = "#{name} [#{name} ...]"
|
|
end
|
|
if arg["optional"]
|
|
name = "[#{name}]"
|
|
end
|
|
name
|
|
end
|
|
|
|
def arguments command
|
|
return "-" unless command["arguments"]
|
|
command["arguments"].map do |arg|
|
|
argument arg
|
|
end.join " "
|
|
end
|
|
|
|
def commands
|
|
return @commands if @commands
|
|
|
|
require "rubygems"
|
|
require "net/http"
|
|
require "net/https"
|
|
require "json"
|
|
require "uri"
|
|
|
|
url = URI.parse "https://raw.githubusercontent.com/redis/redis-doc/master/commands.json"
|
|
client = Net::HTTP.new url.host, url.port
|
|
client.use_ssl = true
|
|
response = client.get url.path
|
|
if response.is_a?(Net::HTTPSuccess)
|
|
@commands = JSON.parse(response.body)
|
|
else
|
|
response.error!
|
|
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|
|
|
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"]}",
|
|
#{group},
|
|
"#{command["since"]}" }
|
|
SPEC
|
|
ret.strip
|
|
end.join(",\n ")
|
|
end
|
|
|
|
# Write to stdout
|
|
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
|
|
|