raykit 0.0.500 → 0.0.502

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