]> git.saurik.com Git - redis.git/blame_incremental - utils/generate-command-help.rb
New time limit for protocol desync test set to 30 seconds to reduce false positives.
[redis.git] / utils / generate-command-help.rb
... / ...
CommitLineData
1#!/usr/bin/env ruby
2
3GROUPS = [
4 "generic",
5 "string",
6 "list",
7 "set",
8 "sorted_set",
9 "hash",
10 "pubsub",
11 "transactions",
12 "connection",
13 "server",
14 "scripting"
15].freeze
16
17GROUPS_BY_NAME = Hash[*
18 GROUPS.each_with_index.map do |n,i|
19 [n,i]
20 end.flatten
21].freeze
22
23def argument arg
24 name = arg["name"].is_a?(Array) ? arg["name"].join(" ") : arg["name"]
25 name = arg["enum"].join "|" if "enum" == arg["type"]
26 name = arg["command"] + " " + name if arg["command"]
27 if arg["multiple"]
28 name = "#{name} [#{name} ...]"
29 end
30 if arg["optional"]
31 name = "[#{name}]"
32 end
33 name
34end
35
36def arguments command
37 return "-" unless command["arguments"]
38 command["arguments"].map do |arg|
39 argument arg
40 end.join " "
41end
42
43def commands
44 return @commands if @commands
45
46 require "rubygems"
47 require "net/http"
48 require "net/https"
49 require "json"
50 require "uri"
51
52 url = URI.parse "https://raw.github.com/antirez/redis-doc/master/commands.json"
53 client = Net::HTTP.new url.host, url.port
54 client.use_ssl = true
55 response = client.get url.path
56 if response.is_a?(Net::HTTPSuccess)
57 @commands = JSON.parse(response.body)
58 else
59 response.error!
60 end
61end
62
63def generate_groups
64 GROUPS.map do |n|
65 "\"#{n}\""
66 end.join(",\n ");
67end
68
69def generate_commands
70 commands.to_a.sort do |x,y|
71 x[0] <=> y[0]
72 end.map do |key, command|
73 group = GROUPS_BY_NAME[command["group"]]
74 if group.nil?
75 STDERR.puts "Please update groups array in #{__FILE__}"
76 raise "Unknown group #{command["group"]}"
77 end
78
79 ret = <<-SPEC
80{ "#{key}",
81 "#{arguments(command)}",
82 "#{command["summary"]}",
83 #{group},
84 "#{command["since"]}" }
85 SPEC
86 ret.strip
87 end.join(",\n ")
88end
89
90# Write to stdout
91puts <<-HELP_H
92/* Automatically generated by #{__FILE__}, do not edit. */
93
94#ifndef __REDIS_HELP_H
95#define __REDIS_HELP_H
96
97static char *commandGroups[] = {
98 #{generate_groups}
99};
100
101struct commandHelp {
102 char *name;
103 char *params;
104 char *summary;
105 int group;
106 char *since;
107} commandHelp[] = {
108 #{generate_commands}
109};
110
111#endif
112HELP_H
113