]> git.saurik.com Git - redis.git/blobdiff - utils/generate-command-help.rb
Fix overflow in mstime() in redis-cli and benchmark.
[redis.git] / utils / generate-command-help.rb
index 4b2f25a15ba0999461d74580a377b39838b0c828..f6ca8874b4ebb937d861f39aa5e6426465829569 100755 (executable)
@@ -1,5 +1,25 @@
 #!/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"]
@@ -23,12 +43,13 @@ end
 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
@@ -39,21 +60,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