ronin 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +13 -0
- data/Manifest.txt +19 -17
- data/README.txt +9 -9
- data/Rakefile +1 -1
- data/bin/ronin +2 -2
- data/lib/ronin/author.rb +1 -1
- data/lib/ronin/cache/extension.rb +4 -12
- data/lib/ronin/cache/extension_cache.rb +1 -3
- data/lib/ronin/cache/overlay.rb +3 -3
- data/lib/ronin/cache/overlay_cache.rb +21 -15
- data/lib/ronin/chars/char_set.rb +6 -12
- data/lib/ronin/code/reference.rb +142 -0
- data/lib/ronin/code/symbol_table.rb +90 -0
- data/lib/ronin/context.rb +1 -1
- data/lib/ronin/database.rb +12 -3
- data/lib/ronin/extensions/string.rb +49 -0
- data/lib/ronin/formatting/extensions/text/string.rb +10 -5
- data/lib/ronin/object_context.rb +3 -9
- data/lib/ronin/pending_context.rb +8 -0
- data/lib/ronin/platform.rb +2 -2
- data/lib/ronin/product.rb +2 -2
- data/lib/ronin/program/command.rb +203 -0
- data/lib/ronin/program/commands/add.rb +71 -0
- data/lib/ronin/{runner/program → program}/commands/help.rb +14 -16
- data/lib/ronin/program/commands/install.rb +64 -0
- data/lib/ronin/program/commands/list.rb +79 -0
- data/lib/ronin/{runner/program/commands/update.rb → program/commands/remove.rb} +18 -18
- data/lib/ronin/{runner/program/commands/remove.rb → program/commands/uninstall.rb} +17 -19
- data/lib/ronin/{runner/program/commands/uninstall.rb → program/commands/update.rb} +17 -21
- data/lib/ronin/{runner/program → program}/commands.rb +9 -9
- data/lib/ronin/{runner/program → program}/exceptions/unknown_command.rb +2 -4
- data/lib/ronin/{runner.rb → program/exceptions.rb} +1 -1
- data/lib/ronin/{runner/program → program}/options.rb +4 -8
- data/lib/ronin/program/program.rb +168 -0
- data/lib/ronin/{runner/program/exceptions.rb → program.rb} +2 -1
- data/lib/ronin/rpc/client.rb +1 -1
- data/lib/ronin/version.rb +1 -1
- data/spec/code/reference_spec.rb +72 -0
- data/spec/code/symbol_table_spec.rb +35 -0
- data/spec/extensions/string_spec.rb +88 -4
- data/spec/formatting/text_spec.rb +2 -2
- data/spec/helpers.rb +0 -0
- metadata +25 -23
- data/lib/ronin/runner/program/command.rb +0 -204
- data/lib/ronin/runner/program/commands/add.rb +0 -73
- data/lib/ronin/runner/program/commands/install.rb +0 -65
- data/lib/ronin/runner/program/commands/list.rb +0 -81
- data/lib/ronin/runner/program/program.rb +0 -175
- data/lib/ronin/runner/program/runner.rb +0 -35
- data/lib/ronin/runner/program.rb +0 -26
data/lib/ronin/object_context.rb
CHANGED
@@ -196,9 +196,7 @@ module Ronin
|
|
196
196
|
# Cache all objects loaded from the specified _path_.
|
197
197
|
#
|
198
198
|
def ObjectContext.cache_objects(path)
|
199
|
-
ObjectContext.load_objects(path).each
|
200
|
-
obj.cache
|
201
|
-
end
|
199
|
+
ObjectContext.load_objects(path).each { |obj| obj.cache }
|
202
200
|
end
|
203
201
|
|
204
202
|
#
|
@@ -210,9 +208,7 @@ module Ronin
|
|
210
208
|
paths = Dir[File.join(directory,'**','*.rb')]
|
211
209
|
|
212
210
|
paths.each do |path|
|
213
|
-
ObjectContext.load_objects(path).each
|
214
|
-
obj.cache
|
215
|
-
end
|
211
|
+
ObjectContext.load_objects(path).each { |obj| obj.cache }
|
216
212
|
end
|
217
213
|
|
218
214
|
return nil
|
@@ -234,9 +230,7 @@ module Ronin
|
|
234
230
|
objects.each { |obj| obj.mirror }
|
235
231
|
end
|
236
232
|
|
237
|
-
paths.each
|
238
|
-
ObjectContext.cache_objects(path)
|
239
|
-
end
|
233
|
+
paths.each { |path| ObjectContext.cache_objects(path) }
|
240
234
|
|
241
235
|
return nil
|
242
236
|
end
|
data/lib/ronin/platform.rb
CHANGED
@@ -32,10 +32,10 @@ module Ronin
|
|
32
32
|
property :id, Serial
|
33
33
|
|
34
34
|
# Name of the Operating System
|
35
|
-
property :os, String
|
35
|
+
property :os, String, :index => true
|
36
36
|
|
37
37
|
# Version of the Operating System
|
38
|
-
property :version, String
|
38
|
+
property :version, String, :index => true
|
39
39
|
|
40
40
|
# Validates
|
41
41
|
validates_present :os, :version
|
data/lib/ronin/product.rb
CHANGED
@@ -33,10 +33,10 @@ module Ronin
|
|
33
33
|
property :id, Serial
|
34
34
|
|
35
35
|
# Name
|
36
|
-
property :name, String
|
36
|
+
property :name, String, :index => true
|
37
37
|
|
38
38
|
# Version
|
39
|
-
property :version, String
|
39
|
+
property :version, String, :index => true
|
40
40
|
|
41
41
|
# Venders
|
42
42
|
property :vendor, String
|
@@ -0,0 +1,203 @@
|
|
1
|
+
#
|
2
|
+
#--
|
3
|
+
# Ronin - A Ruby platform designed for information security and data
|
4
|
+
# exploration tasks.
|
5
|
+
#
|
6
|
+
# Copyright (c) 2006-2008 Hal Brodigan (postmodern.mod3 at gmail.com)
|
7
|
+
#
|
8
|
+
# This program is free software; you can redistribute it and/or modify
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
10
|
+
# the Free Software Foundation; either version 2 of the License, or
|
11
|
+
# (at your option) any later version.
|
12
|
+
#
|
13
|
+
# This program is distributed in the hope that it will be useful,
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
# GNU General Public License for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU General Public License
|
19
|
+
# along with this program; if not, write to the Free Software
|
20
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
21
|
+
#++
|
22
|
+
#
|
23
|
+
|
24
|
+
require 'ronin/program/options'
|
25
|
+
require 'ronin/program/program'
|
26
|
+
require 'ronin/extensions/meta'
|
27
|
+
|
28
|
+
module Ronin
|
29
|
+
module Program
|
30
|
+
class Command
|
31
|
+
|
32
|
+
#
|
33
|
+
# Creates a new Command object. If a _block_ is given,
|
34
|
+
# it will be passed newly created Command object.
|
35
|
+
#
|
36
|
+
def initialize(&block)
|
37
|
+
@options = nil
|
38
|
+
|
39
|
+
block.call(self) if block
|
40
|
+
end
|
41
|
+
|
42
|
+
#
|
43
|
+
# Returns the name of the command.
|
44
|
+
#
|
45
|
+
def Command.command_name
|
46
|
+
''
|
47
|
+
end
|
48
|
+
|
49
|
+
#
|
50
|
+
# Returns the short names of the command.
|
51
|
+
#
|
52
|
+
def Command.command_short_names
|
53
|
+
[]
|
54
|
+
end
|
55
|
+
|
56
|
+
#
|
57
|
+
# Returns all the names of the command.
|
58
|
+
#
|
59
|
+
def self.command_names
|
60
|
+
[self.command_name] + self.command_short_names
|
61
|
+
end
|
62
|
+
|
63
|
+
#
|
64
|
+
# Creates a new command object and runs it with the
|
65
|
+
# given _args_.
|
66
|
+
#
|
67
|
+
def self.run(*args)
|
68
|
+
self.new.run(*args)
|
69
|
+
end
|
70
|
+
|
71
|
+
#
|
72
|
+
# Prints the help information for the command.
|
73
|
+
#
|
74
|
+
def self.help
|
75
|
+
self.new.help
|
76
|
+
end
|
77
|
+
|
78
|
+
#
|
79
|
+
# Returns the name of the command.
|
80
|
+
#
|
81
|
+
def command_name
|
82
|
+
self.class.command_name
|
83
|
+
end
|
84
|
+
|
85
|
+
#
|
86
|
+
# Returns the short names of the command.
|
87
|
+
#
|
88
|
+
def command_short_names
|
89
|
+
self.class.command_short_names
|
90
|
+
end
|
91
|
+
|
92
|
+
#
|
93
|
+
# Returns all the names of the command.
|
94
|
+
#
|
95
|
+
def command_names
|
96
|
+
self.class.command_names
|
97
|
+
end
|
98
|
+
|
99
|
+
#
|
100
|
+
# Runs the command with the given _args_. If a _block_ is
|
101
|
+
# given, it will be called after the specified _args_ have
|
102
|
+
# been parsed and the command has run.
|
103
|
+
#
|
104
|
+
def run(*args,&block)
|
105
|
+
arguments(*(options.parse(args)))
|
106
|
+
|
107
|
+
@options = nil
|
108
|
+
|
109
|
+
block.call if block
|
110
|
+
return self
|
111
|
+
end
|
112
|
+
|
113
|
+
#
|
114
|
+
# Prints the help information for the command.
|
115
|
+
#
|
116
|
+
def help
|
117
|
+
options.help
|
118
|
+
return self
|
119
|
+
end
|
120
|
+
|
121
|
+
#
|
122
|
+
# Returns the String form of the command.
|
123
|
+
#
|
124
|
+
def to_s
|
125
|
+
names.join(', ')
|
126
|
+
end
|
127
|
+
|
128
|
+
protected
|
129
|
+
|
130
|
+
#
|
131
|
+
# Registers the command with the specified _name_ and the given
|
132
|
+
# _short_names_.
|
133
|
+
#
|
134
|
+
def self.command(name,*short_names)
|
135
|
+
name = name.to_s
|
136
|
+
short_names = short_names.map { |short_name| short_name.to_s }
|
137
|
+
|
138
|
+
meta_def(:command_name) { name }
|
139
|
+
meta_def(:command_short_names) { short_names }
|
140
|
+
|
141
|
+
# register the command
|
142
|
+
Program.commands << self unless Program.commands.include?(self)
|
143
|
+
|
144
|
+
# register the command by name
|
145
|
+
Program.commands_by_name[name] = self
|
146
|
+
|
147
|
+
# register the command by it's short_names
|
148
|
+
short_names.each do |short_name|
|
149
|
+
Program.commands_by_name[short_name] = self
|
150
|
+
end
|
151
|
+
|
152
|
+
return self
|
153
|
+
end
|
154
|
+
|
155
|
+
#
|
156
|
+
# Defines the options of the command with the specified _usage_ and
|
157
|
+
# _block_.
|
158
|
+
#
|
159
|
+
def self.options(usage=nil,&block)
|
160
|
+
class_def(:options) do
|
161
|
+
@options ||= Options.command(:ronin,self.command_name,usage,&block)
|
162
|
+
end
|
163
|
+
|
164
|
+
return self
|
165
|
+
end
|
166
|
+
|
167
|
+
#
|
168
|
+
# Returns the options of the command.
|
169
|
+
#
|
170
|
+
def options
|
171
|
+
@options ||= Options.command(:ronin,command_name)
|
172
|
+
end
|
173
|
+
|
174
|
+
#
|
175
|
+
# See Program.error.
|
176
|
+
#
|
177
|
+
def error(message)
|
178
|
+
Program.error(message)
|
179
|
+
end
|
180
|
+
|
181
|
+
#
|
182
|
+
# See Program.success.
|
183
|
+
#
|
184
|
+
def success(&block)
|
185
|
+
Program.success(&block)
|
186
|
+
end
|
187
|
+
|
188
|
+
#
|
189
|
+
# See Program.fail.
|
190
|
+
#
|
191
|
+
def fail(*messages,&block)
|
192
|
+
Program.fail(*messages,&block)
|
193
|
+
end
|
194
|
+
|
195
|
+
#
|
196
|
+
# Processes the additional arguments specified by _args_.
|
197
|
+
#
|
198
|
+
def arguments(*args)
|
199
|
+
end
|
200
|
+
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
#
|
2
|
+
#--
|
3
|
+
# Ronin - A Ruby platform designed for information security and data
|
4
|
+
# exploration tasks.
|
5
|
+
#
|
6
|
+
# Copyright (c) 2006-2007 Hal Brodigan (postmodern.mod3 at gmail.com)
|
7
|
+
#
|
8
|
+
# This program is free software; you can redistribute it and/or modify
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
10
|
+
# the Free Software Foundation; either version 2 of the License, or
|
11
|
+
# (at your option) any later version.
|
12
|
+
#
|
13
|
+
# This program is distributed in the hope that it will be useful,
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
# GNU General Public License for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU General Public License
|
19
|
+
# along with this program; if not, write to the Free Software
|
20
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
21
|
+
#++
|
22
|
+
#
|
23
|
+
|
24
|
+
require 'ronin/program/command'
|
25
|
+
require 'ronin/cache/overlay'
|
26
|
+
|
27
|
+
module Ronin
|
28
|
+
module Program
|
29
|
+
class AddCommand < Command
|
30
|
+
|
31
|
+
command :add
|
32
|
+
|
33
|
+
options('PATH [options]') do |opts|
|
34
|
+
opts.settings.media = nil
|
35
|
+
opts.settings.uri = nil
|
36
|
+
|
37
|
+
opts.options do
|
38
|
+
opts.on('-m','--media MEDIA','Spedify the media-type of the repository') do |media|
|
39
|
+
opts.settings.media = media
|
40
|
+
end
|
41
|
+
|
42
|
+
opts.on('-U','--uri URI','Specify the source URI of the repository') do |uri|
|
43
|
+
opts.settings.uri = uri
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
opts.arguments do
|
48
|
+
opts.arg('PATH','Add the repository located at the specified PATH')
|
49
|
+
end
|
50
|
+
|
51
|
+
opts.summary('Add a local repository located at the specified PATH to the repository cache')
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
def arguments(*args)
|
56
|
+
unless args.length==1
|
57
|
+
fail('add: only one repository path maybe specified')
|
58
|
+
end
|
59
|
+
|
60
|
+
path = args.first
|
61
|
+
|
62
|
+
Cache::Overlay.save_cache do
|
63
|
+
Cache::Overlay.add(path,options.settings.media,options.settings.uri) do |repo|
|
64
|
+
puts "Overlay #{repo} added."
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -21,32 +21,30 @@
|
|
21
21
|
#++
|
22
22
|
#
|
23
23
|
|
24
|
-
require 'ronin/
|
24
|
+
require 'ronin/program/command'
|
25
25
|
|
26
26
|
module Ronin
|
27
|
-
module
|
28
|
-
|
29
|
-
class HelpCommand < Command
|
27
|
+
module Program
|
28
|
+
class HelpCommand < Command
|
30
29
|
|
31
|
-
|
30
|
+
command :help
|
32
31
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
opts.summary('View a list of supported commands or information on a specific command')
|
32
|
+
options('[COMMAND]') do |opts|
|
33
|
+
opts.arguments do
|
34
|
+
opts.arg('COMMAND','The command to view')
|
39
35
|
end
|
40
36
|
|
41
|
-
|
42
|
-
|
43
|
-
fail('help: only one command maybe specified')
|
44
|
-
end
|
37
|
+
opts.summary('View a list of supported commands or information on a specific command')
|
38
|
+
end
|
45
39
|
|
46
|
-
|
40
|
+
def arguments(*args)
|
41
|
+
unless args.length<=1
|
42
|
+
fail('help: only one command maybe specified')
|
47
43
|
end
|
48
44
|
|
45
|
+
success { Program.help(args.first) }
|
49
46
|
end
|
47
|
+
|
50
48
|
end
|
51
49
|
end
|
52
50
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
#
|
2
|
+
#--
|
3
|
+
# Ronin - A Ruby platform designed for information security and data
|
4
|
+
# exploration tasks.
|
5
|
+
#
|
6
|
+
# Copyright (c) 2006-2007 Hal Brodigan (postmodern.mod3 at gmail.com)
|
7
|
+
#
|
8
|
+
# This program is free software; you can redistribute it and/or modify
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
10
|
+
# the Free Software Foundation; either version 2 of the License, or
|
11
|
+
# (at your option) any later version.
|
12
|
+
#
|
13
|
+
# This program is distributed in the hope that it will be useful,
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
# GNU General Public License for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU General Public License
|
19
|
+
# along with this program; if not, write to the Free Software
|
20
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
21
|
+
#++
|
22
|
+
#
|
23
|
+
|
24
|
+
require 'ronin/program/command'
|
25
|
+
require 'ronin/cache/overlay'
|
26
|
+
|
27
|
+
module Ronin
|
28
|
+
module Program
|
29
|
+
class InstallCommand < Command
|
30
|
+
|
31
|
+
command :install
|
32
|
+
|
33
|
+
options('URI [options]') do |opts|
|
34
|
+
opts.settings.media = nil
|
35
|
+
opts.settings.uri = nil
|
36
|
+
|
37
|
+
opts.options do
|
38
|
+
opts.on('-m','--media [MEDIA]','Spedify the media-type of the repository') do |media|
|
39
|
+
options.settings.media = media
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
opts.arguments do
|
44
|
+
opts.arg('URI','The URI of the repository to install')
|
45
|
+
end
|
46
|
+
|
47
|
+
opts.summary('Installs the repository located at the specified URI')
|
48
|
+
end
|
49
|
+
|
50
|
+
def arguments(args)
|
51
|
+
unless args.length==1
|
52
|
+
fail('install: only one repository URI maybe specified')
|
53
|
+
end
|
54
|
+
|
55
|
+
Cache::Overlay.save_cache do
|
56
|
+
Cache::Overlay.install(:uri => args.first, :media => options.settings.media) do |repo|
|
57
|
+
puts "Overlay #{repo} has been installed."
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
#
|
2
|
+
#--
|
3
|
+
# Ronin - A Ruby platform designed for information security and data
|
4
|
+
# exploration tasks.
|
5
|
+
#
|
6
|
+
# Copyright (c) 2006-2007 Hal Brodigan (postmodern.mod3 at gmail.com)
|
7
|
+
#
|
8
|
+
# This program is free software; you can redistribute it and/or modify
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
10
|
+
# the Free Software Foundation; either version 2 of the License, or
|
11
|
+
# (at your option) any later version.
|
12
|
+
#
|
13
|
+
# This program is distributed in the hope that it will be useful,
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
# GNU General Public License for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU General Public License
|
19
|
+
# along with this program; if not, write to the Free Software
|
20
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
21
|
+
#++
|
22
|
+
#
|
23
|
+
|
24
|
+
require 'ronin/program/command'
|
25
|
+
require 'ronin/cache/overlay'
|
26
|
+
|
27
|
+
module Ronin
|
28
|
+
module Program
|
29
|
+
class ListCommand < Command
|
30
|
+
|
31
|
+
command :list, :ls
|
32
|
+
|
33
|
+
options('[NAME ...] [options]') do |opts|
|
34
|
+
opts.options
|
35
|
+
|
36
|
+
opts.arguments do
|
37
|
+
opts.arg('NAME','Overlay to display')
|
38
|
+
end
|
39
|
+
|
40
|
+
opts.summary('Display all or the specified repositories within the repository cache')
|
41
|
+
end
|
42
|
+
|
43
|
+
def arguments(*args)
|
44
|
+
if args.empty?
|
45
|
+
# list all repositories by name
|
46
|
+
Cache::Overlay.each do |repo|
|
47
|
+
puts " #{repo}"
|
48
|
+
end
|
49
|
+
else
|
50
|
+
# list specified repositories
|
51
|
+
args.each do |name|
|
52
|
+
repo = Cache::Overlay.get(name)
|
53
|
+
|
54
|
+
puts "[ #{repo} ]\n\n"
|
55
|
+
|
56
|
+
puts " path: #{repo.path}" if options.settings.verbose
|
57
|
+
puts " media: #{repo.media}"
|
58
|
+
puts " uri: #{repo.uri}" if repo.uri
|
59
|
+
|
60
|
+
if repo.description
|
61
|
+
puts " description:\n\n #{repo.description}"
|
62
|
+
end
|
63
|
+
|
64
|
+
puts "\n"
|
65
|
+
|
66
|
+
if options.settings.verbose
|
67
|
+
puts " extensions:\n\n"
|
68
|
+
|
69
|
+
repo.each_extension do |ext|
|
70
|
+
puts " #{ext}"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -21,35 +21,35 @@
|
|
21
21
|
#++
|
22
22
|
#
|
23
23
|
|
24
|
-
require 'ronin/
|
24
|
+
require 'ronin/program/command'
|
25
25
|
require 'ronin/cache/overlay'
|
26
26
|
|
27
27
|
module Ronin
|
28
|
-
module
|
29
|
-
|
30
|
-
class UpdateCommand < Command
|
28
|
+
module Program
|
29
|
+
class RemoveCommand < Command
|
31
30
|
|
32
|
-
|
31
|
+
command :remove, :rm
|
33
32
|
|
34
|
-
|
35
|
-
|
33
|
+
options('NAME [NAME ...] [options]') do |opts|
|
34
|
+
opts.options
|
36
35
|
|
37
|
-
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
opts.summary('Updates all or the specified repositories')
|
36
|
+
opts.arguments do
|
37
|
+
opts.arg('NAME','The repository to remove')
|
42
38
|
end
|
43
39
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
40
|
+
opts.summary('Remove the specified repositories')
|
41
|
+
end
|
42
|
+
|
43
|
+
def arguments(*args)
|
44
|
+
args.each do |name|
|
45
|
+
Cache::Overlay.save_cache do
|
46
|
+
Cache::Overlay.remove(name) do |repo|
|
47
|
+
puts "Removing #{repo}..."
|
48
|
+
end
|
49
49
|
end
|
50
50
|
end
|
51
|
-
|
52
51
|
end
|
52
|
+
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
@@ -21,37 +21,35 @@
|
|
21
21
|
#++
|
22
22
|
#
|
23
23
|
|
24
|
-
require 'ronin/
|
24
|
+
require 'ronin/program/command'
|
25
25
|
require 'ronin/cache/overlay'
|
26
26
|
|
27
27
|
module Ronin
|
28
|
-
module
|
29
|
-
|
30
|
-
class RemoveCommand < Command
|
28
|
+
module Program
|
29
|
+
class UninstallCommand < Command
|
31
30
|
|
32
|
-
|
31
|
+
command :uninstall
|
33
32
|
|
34
|
-
|
35
|
-
|
33
|
+
options('NAME [NAME ...] [options]') do |opts|
|
34
|
+
opts.options
|
36
35
|
|
37
|
-
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
opts.summary('Remove the specified repositories')
|
36
|
+
opts.arguments do
|
37
|
+
opts.arg('NAME','The repository to uninstall')
|
42
38
|
end
|
43
39
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
40
|
+
opts.summary('Uninstall the specified repositories')
|
41
|
+
end
|
42
|
+
|
43
|
+
def arguments(*args)
|
44
|
+
args.each do |name|
|
45
|
+
Cache::Overlay.save_cache do
|
46
|
+
Cache::Overlay.uninstall(name) do |repo|
|
47
|
+
puts "Uninstalling #{repo}..."
|
50
48
|
end
|
51
49
|
end
|
52
50
|
end
|
53
|
-
|
54
51
|
end
|
52
|
+
|
55
53
|
end
|
56
54
|
end
|
57
55
|
end
|