mirror of
https://codeberg.org/redict/redict.git
synced 2025-01-23 00:28:26 -05:00
7b48de68ce
As far as i can tell it shows up in redis-cli in both HELP, e.g. `help client list`, and also in the command completion tips, but it is unclear what it was needed for. It exists since the very first commit that added this mechanism.
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
|
|
|