raykit 0.0.504 → 0.0.506

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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +21 -21
  3. data/README.md +25 -25
  4. data/bin/raykit +6 -6
  5. data/lib/raykit/auto_setup.rb +69 -69
  6. data/lib/raykit/command.rb +373 -373
  7. data/lib/raykit/conan/buildinfo.rb +69 -69
  8. data/lib/raykit/conanpackage.rb +49 -49
  9. data/lib/raykit/configuration.rb +53 -53
  10. data/lib/raykit/console.rb +345 -314
  11. data/lib/raykit/default_content.rb +227 -227
  12. data/lib/raykit/dir.rb +73 -49
  13. data/lib/raykit/dotnet.rb +174 -174
  14. data/lib/raykit/environment.rb +114 -114
  15. data/lib/raykit/filesystem.rb +34 -34
  16. data/lib/raykit/git/commit.rb +16 -16
  17. data/lib/raykit/git/directory.rb +216 -216
  18. data/lib/raykit/git/files.rb +46 -46
  19. data/lib/raykit/git/repositories.rb +89 -89
  20. data/lib/raykit/git/repository.rb +376 -376
  21. data/lib/raykit/installer.rb +17 -17
  22. data/lib/raykit/log.rb +80 -80
  23. data/lib/raykit/logevent.rb +49 -49
  24. data/lib/raykit/logger.rb +98 -0
  25. data/lib/raykit/logging.rb +57 -57
  26. data/lib/raykit/markdown.rb +21 -21
  27. data/lib/raykit/msbuild.rb +54 -54
  28. data/lib/raykit/nugetpackage.rb +54 -54
  29. data/lib/raykit/nunit.rb +13 -13
  30. data/lib/raykit/project.rb +343 -343
  31. data/lib/raykit/rake.rb +39 -39
  32. data/lib/raykit/runner.rb +42 -42
  33. data/lib/raykit/secrets.rb +38 -38
  34. data/lib/raykit/sourceImport.rb +76 -76
  35. data/lib/raykit/sourceImports.rb +43 -43
  36. data/lib/raykit/string.rb +18 -18
  37. data/lib/raykit/symbols.rb +115 -16
  38. data/lib/raykit/tasks.rb +99 -99
  39. data/lib/raykit/text.rb +32 -32
  40. data/lib/raykit/timer.rb +31 -31
  41. data/lib/raykit/version.rb +89 -103
  42. data/lib/raykit/vstest.rb +24 -24
  43. data/lib/raykit/wt.rb +28 -28
  44. data/lib/raykit/zip.rb +73 -73
  45. data/lib/raykit.rb +126 -125
  46. metadata +4 -3
@@ -1,314 +1,345 @@
1
- # frozen_string_literal: true
2
-
3
- require "optparse"
4
- require "slop"
5
- require_relative("./logging")
6
-
7
- module Raykit
8
- # The implementation for the raykit console application
9
- class Console
10
- attr_accessor :opts
11
-
12
- def self.get_opts
13
- Slop.parse do |o|
14
- o.string "-t", "--task", "rake task", default: "default"
15
- o.bool "-v", "--verbose", "print detailed output", default: false
16
- o.bool "-q", "--quiet", "minimal output", default: false
17
- o.bool "-s", "--stop", "stop on error", default: true
18
- end
19
- end # def self.get_opts
20
-
21
- def initialize(opts = nil)
22
- if opts.nil?
23
- @opts = Console.get_opts
24
- else
25
- @opts = opts
26
- end
27
- #@opts = Slop.parse do |o|
28
- # o.string "-t", "--task", "rake task", default: "default"
29
- # o.bool "-v", "--verbose", "print detailed output", default: false
30
- # o.bool "-q", "--quiet", "minimal output", default: false
31
- # o.bool "-s", "--stop", "stop on error", default: true
32
- #end
33
-
34
- #if opts.verbose?
35
- # puts "options: #{Rainbow(@opts.to_hash).yellow.bright}"
36
- # puts "arguments:#{Rainbow(@opts.arguments).yellow.bright}"
37
- #end
38
- end
39
-
40
- def run
41
- verb = "usage"
42
- verb = @opts.arguments[0] if @opts.arguments.length.positive?
43
- case verb
44
- when "usage"
45
- usage
46
- when "add"
47
- add
48
- when "remove"
49
- remove
50
- when "list"
51
- list
52
- when "show"
53
- show
54
- when "work"
55
- work
56
- when "import"
57
- import
58
- when "clean"
59
- clean
60
- when "sync_version"
61
- sync_version
62
- when "copy"
63
- copy
64
- when "pull"
65
- pull
66
- else
67
- puts "unrecognized command #{verb}"
68
- 1
69
- end
70
- end
71
-
72
- def verb_descriptions
73
- { "add" => "add a git url",
74
- "remove" => "remove one or more git urls",
75
- "list" => "list summaries of repositories",
76
- "show" => "show git urls matching a specific pattern",
77
- "work" => "clone and rake a git repository",
78
- "import" => "import git urls matching a specific pattern",
79
- "clean" => "clean one or more working directories",
80
- "pull" => "preform git pull on one or more working directories",
81
- "sync_version" => "synchronize the version number between two files",
82
- "copy" => "copy a file" }
83
- end
84
-
85
- def verb_usage
86
- { "add" => "add GIT_URL",
87
- "remove" => "remove URL_PATTERN",
88
- "show" => "show URL_PATTERN",
89
- "work" => "work URL_PATTERN [--task RAKE_TASK]",
90
- "import" => "import URL_PATTERN",
91
- "clean" => "clean URL_PATTERN",
92
- "pull" => "pull URL_PATTERN",
93
- "sync_version" => "sync_version SOURCE_FILENAME DESTINATION_FILENAME",
94
- "copy" => "copy SOURCE DESTINATION" }
95
- end
96
-
97
- def usage
98
- puts "Usage: raykit VERB [GIT_URL|PATTERN] [OPTIONS]"
99
- verb_descriptions.each do |k, v|
100
- puts "#{k.ljust(15, " ")} - #{v}"
101
- end
102
- # puts @opts
103
- # puts "verbs: " + verbs.to_s
104
- 0
105
- end
106
-
107
- def add
108
- if @opts.arguments.length < 2
109
- puts "add requires a url"
110
- return 1
111
- end
112
- url = @opts.arguments[1]
113
- if REPOSITORIES.include?(url)
114
- puts "url #{url} already exists."
115
- else
116
- REPOSITORIES << url
117
- REPOSITORIES.save(REPOSITORIES.filename)
118
- puts "url #{url} added."
119
- end
120
- end
121
-
122
- def remove
123
- if @opts.arguments.length < 2
124
- puts "remove requires a url or pattern"
125
- return 1
126
- end
127
- pattern = ""
128
- pattern = @opts.arguments[1] if @opts.arguments.length > 1
129
- remove_urls = REPOSITORIES.matches(pattern)
130
- if remove_urls.length.zero?
131
- puts "no matching urls found."
132
- else
133
- remove_urls.each do |url|
134
- REPOSITORIES.delete(url)
135
- puts "url #{url} removed."
136
- end
137
- REPOSITORIES.save(REPOSITORIES.filename)
138
- end
139
- end
140
-
141
- def list
142
- pattern = ""
143
- pattern = @opts.arguments[1] if @opts.arguments.length > 1
144
- REPOSITORIES.matches(pattern).each do |url|
145
- repo = Raykit::Git::Repository.new(url)
146
- puts repo.to_s
147
- #puts url
148
- end
149
- end
150
-
151
- def show
152
- pattern = ""
153
- pattern = @opts.arguments[1] if @opts.arguments.length > 1
154
- REPOSITORIES.matches(pattern).each do |url|
155
- puts url
156
- end
157
- end
158
-
159
- def work
160
- pattern = ""
161
- pattern = @opts.arguments[1] if @opts.arguments.length > 1
162
- logger = Logger.new(STDOUT)
163
- logger.level = Configuration.new().log_level
164
- logger.debug("work: pattern: #{pattern}")
165
-
166
- work_repositories = REPOSITORIES.matches(pattern)
167
- errors = []
168
- logger.info("work: found #{work_repositories.length} matching urls")
169
- #puts "work: found #{work_repositories.length} matching urls"
170
- work_repositories.each do |url|
171
- default_command = "rake default"
172
- logger.info("work: #{url} #{default_command}")
173
- #puts "work: #{url} #{default_command}"
174
- repo = Raykit::Git::Repository.new(url)
175
- cmd = repo.work default_command
176
- logger.info(cmd.to_s)
177
- #puts cmd.to_s
178
- #exitstatus = work_url(url)
179
- #puts " " if @opts.verbose?
180
- #return exitstatus if @opts[:stop] && exitstatus != 0
181
- end
182
- 0
183
- end
184
-
185
- #puts "\nwork \"rake default\""
186
- #cmd = repo.work "rake default"
187
- #puts cmd.to_s
188
-
189
- def work_url(url)
190
- return 0 if url == "https://gitlab.com/gems-rb/raykit.git"
191
-
192
- puts Rainbow(url).yellow.bright if @opts.verbose?
193
- repo = Raykit::Git::Repository.new(url)
194
- work = Raykit::Git::Directory.new(repo.get_dev_dir("work"))
195
- unless Dir.exist?(work.directory)
196
- clone = Command.new("git clone #{url} #{work.directory} --recursive")
197
- puts clone.summary unless @opts.quiet?
198
- if clone.exitstatus != 0
199
- clone.details
200
- return clone.exitstatus
201
- end
202
- end
203
- if Dir.exist?(work.directory)
204
- Dir.chdir(work.directory) do
205
- if File.exist?("rakefile.rb")
206
- rake = Raykit::Command.new("rake #{@opts[:task]}")
207
- rake.summary(true) if !@opts.quiet? || rake.exitstatus != 0
208
- if rake.exitstatus != 0
209
- rake.details
210
- rake.summary true
211
- return rake.exitstatus
212
- end
213
- else
214
- puts("rakefile.rb not found in #{work.directory}") if @opts.verbose?
215
- return 0
216
- end
217
- end
218
- end
219
- 0
220
- end
221
-
222
- def pull
223
- pattern = ""
224
- pattern = @opts.arguments[1] if @opts.arguments.length > 1
225
- REPOSITORIES.matches(pattern).each do |url|
226
- repo = Raykit::Git::Repository.new(url)
227
- work = Raykit::Git::Directory.new(repo.get_dev_dir("work"))
228
- if Dir.exist?(work.directory) && !work.directory == ".git"
229
- Dir.chdir(work.directory) do
230
- diff = `git diff`.strip
231
- status = `git status`.strip
232
- if diff.length.zero? && status.include?("nothing to commit")
233
- cmd = Command.new("git pull")
234
- cmd.summary if @opts.verbose?
235
-
236
- if cmd.exitstatus != 0
237
- cmd.details
238
- abort Rainbow(cmd.summary).blue.bright if @opts.quit?
239
- end
240
- end
241
- end
242
- end
243
- rescue StandardError => e
244
- issue = "error occurred for pull of #{url} #{e}"
245
- if @opts.quit?
246
- abort Rainbow(issue).blue.bright
247
- else
248
- puts Rainbow(issue).blue.bright
249
- end
250
- end
251
- end
252
-
253
- def import
254
- pattern = ""
255
- pattern = @opts.arguments[1] if @opts.arguments.length > 1
256
- puts "scanning..."
257
- count = REPOSITORIES.length
258
- REPOSITORIES.import(pattern)
259
- new_count = REPOSITORIES.length - count
260
- puts "imported #{new_count} git repositories"
261
- end
262
-
263
- def clean
264
- pattern = ""
265
- pattern = @opts.arguments[1] if @opts.arguments.length > 1
266
- REPOSITORIES.matches(pattern).each do |url|
267
- repo = Raykit::Git::Repository.new(url)
268
- work = Raykit::Git::Directory.new(repo.get_dev_dir("work"))
269
- next unless Dir.exist?(work.directory)
270
-
271
- puts "removing #{work.directory}"
272
- begin
273
- FileUtils.rm_rf(work.directory, secure: true)
274
- rescue StandardError
275
- puts "error removing #{work.directory}"
276
- end
277
- end
278
- end
279
-
280
- def copy
281
- if @opts.arguments.length < 3
282
- puts "source and destination arguments are required for copy"
283
- return 1
284
- end
285
- source = @opts.arguments[1]
286
- dest = @opts.arguments[2]
287
- FileUtils.cp(source, dest)
288
- puts "copied #{source} to #{dest}"
289
- end
290
-
291
- def rake(hash)
292
- REPOSITORIES.each do |remote|
293
- next unless remote.include?(hash[:pattern])
294
-
295
- begin
296
- puts "remote: #{remote}"
297
- cmd = Raykit::Rake.run(remote, "master")
298
- elapsed_str = Timer.get_elapsed_str(cmd.elapsed)
299
- if cmd.exitstatus.zero?
300
- puts "#{elapsed_str} #{Rainbow(SECRETS.hide(cmd.command)).yellow.bright} (#{cmd.directory})"
301
- else
302
- puts "\r\n#{cmd.command}\r\n"
303
- puts "\r\n#{cmd.output}\r\n"
304
- puts "\r\n#{cmd.error}\r\n"
305
- puts ""
306
- puts "#{Rainbow(elapsed_str).red.bright} #{Rainbow(cmd.command).white}"
307
- end
308
- rescue StandardError
309
- puts "rescued..."
310
- end
311
- end
312
- end
313
- end
314
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "optparse"
4
+ require "slop"
5
+ require_relative("./logging")
6
+
7
+ module Raykit
8
+ # The implementation for the raykit console application
9
+ class Console
10
+ attr_accessor :opts
11
+
12
+ def self.get_opts
13
+ Slop.parse do |o|
14
+ o.string "-t", "--task", "rake task", default: "default"
15
+ o.bool "-v", "--verbose", "print detailed output", default: false
16
+ o.bool "-q", "--quiet", "minimal output", default: false
17
+ o.bool "-s", "--stop", "stop on error", default: true
18
+ end
19
+ end # def self.get_opts
20
+
21
+ def initialize(opts = nil)
22
+ if opts.nil?
23
+ @opts = Console.get_opts
24
+ else
25
+ @opts = opts
26
+ end
27
+ #@opts = Slop.parse do |o|
28
+ # o.string "-t", "--task", "rake task", default: "default"
29
+ # o.bool "-v", "--verbose", "print detailed output", default: false
30
+ # o.bool "-q", "--quiet", "minimal output", default: false
31
+ # o.bool "-s", "--stop", "stop on error", default: true
32
+ #end
33
+
34
+ #if opts.verbose?
35
+ # puts "options: #{Rainbow(@opts.to_hash).yellow.bright}"
36
+ # puts "arguments:#{Rainbow(@opts.arguments).yellow.bright}"
37
+ #end
38
+ end
39
+
40
+ def run
41
+ verb = "usage"
42
+ verb = @opts.arguments[0] if @opts.arguments.length.positive?
43
+ case verb
44
+ when "usage"
45
+ usage
46
+ when "add"
47
+ add
48
+ when "remove"
49
+ remove
50
+ when "list"
51
+ list
52
+ when "show"
53
+ show
54
+ when "work"
55
+ work
56
+ when "import"
57
+ import
58
+ when "clean"
59
+ clean
60
+ when "clobber"
61
+ clobber
62
+ when "sync_version"
63
+ sync_version
64
+ when "copy"
65
+ copy
66
+ when "pull"
67
+ pull
68
+ else
69
+ puts "unrecognized command #{verb}"
70
+ 1
71
+ end
72
+ end
73
+
74
+ def verb_descriptions
75
+ { "add" => "add a git url",
76
+ "remove" => "remove one or more git urls",
77
+ "list" => "list summaries of repositories",
78
+ "show" => "show git urls matching a specific pattern",
79
+ "work" => "clone and rake a git repository",
80
+ "import" => "import git urls matching a specific pattern",
81
+ "clean" => "clean one or more working directories",
82
+ "clobber" => "clobber one or more working directories",
83
+ "pull" => "preform git pull on one or more working directories",
84
+ "sync_version" => "synchronize the version number between two files",
85
+ "copy" => "copy a file" }
86
+ end
87
+
88
+ def verb_usage
89
+ { "add" => "add GIT_URL",
90
+ "remove" => "remove URL_PATTERN",
91
+ "show" => "show URL_PATTERN",
92
+ "work" => "work URL_PATTERN [--task RAKE_TASK]",
93
+ "import" => "import URL_PATTERN",
94
+ "clean" => "clean URL_PATTERN",
95
+ "clobber" => "clobber URL_PATTERN",
96
+ "pull" => "pull URL_PATTERN",
97
+ "sync_version" => "sync_version SOURCE_FILENAME DESTINATION_FILENAME",
98
+ "copy" => "copy SOURCE DESTINATION" }
99
+ end
100
+
101
+ def usage
102
+ puts "Usage: raykit VERB [GIT_URL|PATTERN] [OPTIONS]"
103
+ verb_descriptions.each do |k, v|
104
+ puts "#{k.ljust(15, " ")} - #{v}"
105
+ end
106
+ # puts @opts
107
+ # puts "verbs: " + verbs.to_s
108
+ 0
109
+ end
110
+
111
+ def add
112
+ if @opts.arguments.length < 2
113
+ puts "add requires a url"
114
+ return 1
115
+ end
116
+ url = @opts.arguments[1]
117
+ if REPOSITORIES.include?(url)
118
+ puts "url #{url} already exists."
119
+ else
120
+ REPOSITORIES << url
121
+ REPOSITORIES.save(REPOSITORIES.filename)
122
+ puts "url #{url} added."
123
+ end
124
+ end
125
+
126
+ def remove
127
+ if @opts.arguments.length < 2
128
+ puts "remove requires a url or pattern"
129
+ return 1
130
+ end
131
+ pattern = ""
132
+ pattern = @opts.arguments[1] if @opts.arguments.length > 1
133
+ remove_urls = REPOSITORIES.matches(pattern)
134
+ if remove_urls.length.zero?
135
+ puts "no matching urls found."
136
+ else
137
+ remove_urls.each do |url|
138
+ REPOSITORIES.delete(url)
139
+ puts "url #{url} removed."
140
+ end
141
+ REPOSITORIES.save(REPOSITORIES.filename)
142
+ end
143
+ end
144
+
145
+ def list
146
+ pattern = ""
147
+ pattern = @opts.arguments[1] if @opts.arguments.length > 1
148
+ REPOSITORIES.matches(pattern).each do |url|
149
+ repo = Raykit::Git::Repository.new(url)
150
+ puts repo.to_s
151
+ #puts url
152
+ end
153
+ end
154
+
155
+ def show
156
+ pattern = ""
157
+ pattern = @opts.arguments[1] if @opts.arguments.length > 1
158
+ REPOSITORIES.matches(pattern).each do |url|
159
+ puts url
160
+ end
161
+ end
162
+
163
+ def work
164
+ pattern = ""
165
+ pattern = @opts.arguments[1] if @opts.arguments.length > 1
166
+ logger = Logger.new(STDOUT)
167
+ # Set the formatter to output just the message
168
+ logger.formatter = proc do |_severity, _datetime, _progname, msg|
169
+ "#{msg}\n"
170
+ end
171
+ logger.level = Logger::DEBUG
172
+ logger.debug("work: pattern: #{pattern}")
173
+
174
+ work_repositories = REPOSITORIES.matches(pattern)
175
+ errors = []
176
+ logger.info("work: found #{work_repositories.length} matching urls")
177
+ #puts "work: found #{work_repositories.length} matching urls"
178
+ work_repositories.each do |url|
179
+ default_command = "rake default"
180
+ logger.info("work: #{url} #{default_command}")
181
+ #puts "work: #{url} #{default_command}"
182
+ repo = Raykit::Git::Repository.new(url)
183
+ cmd = repo.work default_command
184
+ logger.info(cmd.to_s)
185
+ #puts cmd.to_s
186
+ #exitstatus = work_url(url)
187
+ #puts " " if @opts.verbose?
188
+ #return exitstatus if @opts[:stop] && exitstatus != 0
189
+ end
190
+ 0
191
+ end
192
+
193
+ #puts "\nwork \"rake default\""
194
+ #cmd = repo.work "rake default"
195
+ #puts cmd.to_s
196
+
197
+ def work_url(url)
198
+ return 0 if url == "https://gitlab.com/gems-rb/raykit.git"
199
+
200
+ puts Rainbow(url).yellow.bright if @opts.verbose?
201
+ repo = Raykit::Git::Repository.new(url)
202
+ work = Raykit::Git::Directory.new(repo.get_dev_dir("work"))
203
+ unless Dir.exist?(work.directory)
204
+ clone = Command.new("git clone #{url} #{work.directory} --recursive")
205
+ puts clone.summary unless @opts.quiet?
206
+ if clone.exitstatus != 0
207
+ clone.details
208
+ return clone.exitstatus
209
+ end
210
+ end
211
+ if Dir.exist?(work.directory)
212
+ Dir.chdir(work.directory) do
213
+ if File.exist?("rakefile.rb")
214
+ rake = Raykit::Command.new("rake #{@opts[:task]}")
215
+ rake.summary(true) if !@opts.quiet? || rake.exitstatus != 0
216
+ if rake.exitstatus != 0
217
+ rake.details
218
+ rake.summary true
219
+ return rake.exitstatus
220
+ end
221
+ else
222
+ puts("rakefile.rb not found in #{work.directory}") if @opts.verbose?
223
+ return 0
224
+ end
225
+ end
226
+ end
227
+ 0
228
+ end
229
+
230
+ def pull
231
+ pattern = ""
232
+ pattern = @opts.arguments[1] if @opts.arguments.length > 1
233
+ REPOSITORIES.matches(pattern).each do |url|
234
+ repo = Raykit::Git::Repository.new(url)
235
+ work = Raykit::Git::Directory.new(repo.get_dev_dir("work"))
236
+ if Dir.exist?(work.directory) && !work.directory == ".git"
237
+ Dir.chdir(work.directory) do
238
+ diff = `git diff`.strip
239
+ status = `git status`.strip
240
+ if diff.length.zero? && status.include?("nothing to commit")
241
+ cmd = Command.new("git pull")
242
+ cmd.summary if @opts.verbose?
243
+
244
+ if cmd.exitstatus != 0
245
+ cmd.details
246
+ abort Rainbow(cmd.summary).blue.bright if @opts.quit?
247
+ end
248
+ end
249
+ end
250
+ end
251
+ rescue StandardError => e
252
+ issue = "error occurred for pull of #{url} #{e}"
253
+ if @opts.quit?
254
+ abort Rainbow(issue).blue.bright
255
+ else
256
+ puts Rainbow(issue).blue.bright
257
+ end
258
+ end
259
+ end
260
+
261
+ def import
262
+ pattern = ""
263
+ pattern = @opts.arguments[1] if @opts.arguments.length > 1
264
+ puts "scanning..."
265
+ count = REPOSITORIES.length
266
+ REPOSITORIES.import(pattern)
267
+ new_count = REPOSITORIES.length - count
268
+ puts "imported #{new_count} git repositories"
269
+ end
270
+
271
+ def clean
272
+ pattern = ""
273
+ pattern = @opts.arguments[1] if @opts.arguments.length > 1
274
+ REPOSITORIES.matches(pattern).each do |url|
275
+ repo = Raykit::Git::Repository.new(url)
276
+ work = Raykit::Git::Directory.new(repo.get_dev_dir("work"))
277
+ next unless Dir.exist?(work.directory)
278
+
279
+ # TODO: run a git clean command in the directory
280
+ puts "cleaning #{work.directory}"
281
+ Dir.chdir(work.directory) do
282
+ cmd = Command.new("git clean -xdf")
283
+ cmd.summary if @opts.verbose?
284
+ if cmd.exitstatus != 0
285
+ cmd.details
286
+ abort Rainbow(cmd.summary).blue.bright if @opts.quit?
287
+ end
288
+ end
289
+ end
290
+ Dir::remove_empty_directories(Raykit::Environment.get_dev_dir("work"))
291
+ end
292
+
293
+ def clobber
294
+ pattern = ""
295
+ pattern = @opts.arguments[1] if @opts.arguments.length > 1
296
+ REPOSITORIES.matches(pattern).each do |url|
297
+ repo = Raykit::Git::Repository.new(url)
298
+ work = Raykit::Git::Directory.new(repo.get_dev_dir("work"))
299
+ next unless Dir.exist?(work.directory)
300
+
301
+ puts "removing #{work.directory}"
302
+ begin
303
+ FileUtils.rm_rf(work.directory, secure: true)
304
+ rescue StandardError
305
+ puts "error removing #{work.directory}"
306
+ end
307
+ end
308
+ Dir::remove_empty_directories(Raykit::Environment.get_dev_dir("work"))
309
+ end
310
+
311
+ def copy
312
+ if @opts.arguments.length < 3
313
+ puts "source and destination arguments are required for copy"
314
+ return 1
315
+ end
316
+ source = @opts.arguments[1]
317
+ dest = @opts.arguments[2]
318
+ FileUtils.cp(source, dest)
319
+ puts "copied #{source} to #{dest}"
320
+ end
321
+
322
+ def rake(hash)
323
+ REPOSITORIES.each do |remote|
324
+ next unless remote.include?(hash[:pattern])
325
+
326
+ begin
327
+ puts "remote: #{remote}"
328
+ cmd = Raykit::Rake.run(remote, "master")
329
+ elapsed_str = Timer.get_elapsed_str(cmd.elapsed)
330
+ if cmd.exitstatus.zero?
331
+ puts "#{elapsed_str} #{Rainbow(SECRETS.hide(cmd.command)).yellow.bright} (#{cmd.directory})"
332
+ else
333
+ puts "\r\n#{cmd.command}\r\n"
334
+ puts "\r\n#{cmd.output}\r\n"
335
+ puts "\r\n#{cmd.error}\r\n"
336
+ puts ""
337
+ puts "#{Rainbow(elapsed_str).red.bright} #{Rainbow(cmd.command).white}"
338
+ end
339
+ rescue StandardError
340
+ puts "rescued..."
341
+ end
342
+ end
343
+ end
344
+ end
345
+ end