#!/usr/bin/env ruby
+GROUPS = [
+ "generic",
+ "string",
+ "list",
+ "set",
+ "sorted_set",
+ "hash",
+ "pubsub",
+ "transactions",
+ "connection",
+ "server",
+ "scripting"
+].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"]
def commands
return @commands if @commands
+ require "rubygems"
require "net/http"
require "net/https"
require "json"
require "uri"
- url = URI.parse "https://github.com/antirez/redis-doc/raw/master/commands.json"
+ url = URI.parse "https://raw.github.com/antirez/redis-doc/master/commands.json"
client = Net::HTTP.new url.host, url.port
client.use_ssl = true
response = client.get url.path
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