31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
# File 'lib/perfmonger/cli.rb', line 31
def run(argv = ARGV)
parser = OptionParser.new
parser.banner = "Usage: \#{File.basename($0)} [options] COMMAND [args]\n\n"
commands = @@commands.values.sort_by do |command|
command_name = command.command_name
case command_name
when "live"
[0, command_name]
when "record"
[1, command_name]
when "play"
[2, command_name]
when "stat"
[3, command_name]
when "plot"
[4, command_name]
else
[999, command_name]
end
end
max_len = commands.map(&:command_name).map(&:size).max
command_list_str = commands.map do |command|
command_name = command.command_name
command_name = command_name + (" " * (max_len - command_name.size))
str = " " + command_name + " " + command.description
if command.aliases && command.aliases.size > 0
str += "\n" + " " + (" " * max_len) + " " +
"Aliases: " + command.aliases.join(", ")
end
str
end.join("\n")
subcommand_list = "\nCommands:\n\#{command_list_str}\n\n"
parser.summary_indent = " "
parser.on('-h', '--help', 'Show this help') do
puts(parser.help)
puts(subcommand_list)
exit(true)
end
parser.on('-v', '--version', 'Show version number') do
puts("PerfMonger version " + PerfMonger::VERSION)
exit(true)
end
parser.order!(argv)
if argv.size == 0
puts(parser.help)
puts(subcommand_list)
exit(false)
end
command_name = argv.shift
if @@aliases[command_name]
command_name = @@aliases[command_name]
end
command_class = @@commands[command_name]
unless command_class
puts("No such command: #{command_name}")
puts(subcommand_list)
exit(false)
end
command_class.new.run(argv)
end
|