raykit 0.0.497 → 0.0.499

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 (44) 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 +371 -341
  7. data/lib/raykit/conan/buildinfo.rb +69 -69
  8. data/lib/raykit/conanpackage.rb +49 -49
  9. data/lib/raykit/configuration.rb +48 -0
  10. data/lib/raykit/console.rb +281 -272
  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 -109
  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 +95 -89
  20. data/lib/raykit/git/repository.rb +278 -244
  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 -339
  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 +74 -74
  34. data/lib/raykit/sourceImports.rb +43 -43
  35. data/lib/raykit/string.rb +18 -18
  36. data/lib/raykit/tasks.rb +99 -99
  37. data/lib/raykit/text.rb +32 -32
  38. data/lib/raykit/timer.rb +31 -31
  39. data/lib/raykit/version.rb +103 -103
  40. data/lib/raykit/vstest.rb +24 -24
  41. data/lib/raykit/wt.rb +28 -28
  42. data/lib/raykit/zip.rb +73 -73
  43. data/lib/raykit.rb +125 -125
  44. metadata +4 -3
@@ -1,272 +1,281 @@
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
- exitstatus = work_url(url)
141
- puts " " if @opts.verbose?
142
- return exitstatus if @opts[:stop] && exitstatus != 0
143
- end
144
- 0
145
- end
146
-
147
- def work_url(url)
148
- return 0 if url == "https://gitlab.com/lou-parslow/raykit.git"
149
-
150
- puts Rainbow(url).yellow.bright if @opts.verbose?
151
- repo = Raykit::Git::Repository.new(url)
152
- work = Raykit::Git::Directory.new(repo.get_dev_dir("work"))
153
- unless Dir.exist?(work.directory)
154
- clone = Command.new("git clone #{url} #{work.directory} --recursive")
155
- puts clone.summary unless @opts.quiet?
156
- if clone.exitstatus != 0
157
- clone.details
158
- return clone.exitstatus
159
- end
160
- end
161
- if Dir.exist?(work.directory)
162
- Dir.chdir(work.directory) do
163
- if File.exist?("rakefile.rb")
164
- rake = Raykit::Command.new("rake #{@opts[:task]}")
165
- rake.summary(true) if !@opts.quiet? || rake.exitstatus != 0
166
- if rake.exitstatus != 0
167
- rake.details
168
- rake.summary true
169
- return rake.exitstatus
170
- end
171
- else
172
- puts("rakefile.rb not found in #{work.directory}") if @opts.verbose?
173
- return 0
174
- end
175
- end
176
- end
177
- 0
178
- end
179
-
180
- def pull
181
- pattern = ""
182
- pattern = @opts.arguments[1] if @opts.arguments.length > 1
183
- REPOSITORIES.matches(pattern).each do |url|
184
- repo = Raykit::Git::Repository.new(url)
185
- work = Raykit::Git::Directory.new(repo.get_dev_dir("work"))
186
- if Dir.exist?(work.directory) && !work.directory == ".git"
187
- Dir.chdir(work.directory) do
188
- diff = `git diff`.strip
189
- status = `git status`.strip
190
- if diff.length.zero? && status.include?("nothing to commit")
191
- cmd = Command.new("git pull")
192
- cmd.summary if @opts.verbose?
193
-
194
- if cmd.exitstatus != 0
195
- cmd.details
196
- abort Rainbow(cmd.summary).blue.bright if @opts.quit?
197
- end
198
- end
199
- end
200
- end
201
- rescue StandardError => e
202
- issue = "error occurred for pull of #{url} #{e}"
203
- if @opts.quit?
204
- abort Rainbow(issue).blue.bright
205
- else
206
- puts Rainbow(issue).blue.bright
207
- end
208
- end
209
- end
210
-
211
- def import
212
- pattern = ""
213
- pattern = @opts.arguments[1] if @opts.arguments.length > 1
214
- puts "scanning..."
215
- count = REPOSITORIES.length
216
- REPOSITORIES.import(pattern)
217
- new_count = REPOSITORIES.length - count
218
- puts "imported #{new_count} git repositories"
219
- end
220
-
221
- def clean
222
- pattern = ""
223
- pattern = @opts.arguments[1] if @opts.arguments.length > 1
224
- REPOSITORIES.matches(pattern).each do |url|
225
- repo = Raykit::Git::Repository.new(url)
226
- work = Raykit::Git::Directory.new(repo.get_dev_dir("work"))
227
- next unless Dir.exist?(work.directory)
228
-
229
- puts "removing #{work.directory}"
230
- begin
231
- FileUtils.rm_rf(work.directory, secure: true)
232
- rescue StandardError
233
- puts "error removing #{work.directory}"
234
- end
235
- end
236
- end
237
-
238
- def copy
239
- if @opts.arguments.length < 3
240
- puts "source and destination arguments are required for copy"
241
- return 1
242
- end
243
- source = @opts.arguments[1]
244
- dest = @opts.arguments[2]
245
- FileUtils.cp(source, dest)
246
- puts "copied #{source} to #{dest}"
247
- end
248
-
249
- def rake(hash)
250
- REPOSITORIES.each do |remote|
251
- next unless remote.include?(hash[:pattern])
252
-
253
- begin
254
- puts "remote: #{remote}"
255
- cmd = Raykit::Rake.run(remote, "master")
256
- elapsed_str = Timer.get_elapsed_str(cmd.elapsed)
257
- if cmd.exitstatus.zero?
258
- puts "#{elapsed_str} #{Rainbow(SECRETS.hide(cmd.command)).yellow.bright} (#{cmd.directory})"
259
- else
260
- puts "\r\n#{cmd.command}\r\n"
261
- puts "\r\n#{cmd.output}\r\n"
262
- puts "\r\n#{cmd.error}\r\n"
263
- puts ""
264
- puts "#{Rainbow(elapsed_str).red.bright} #{Rainbow(cmd.command).white}"
265
- end
266
- rescue StandardError
267
- puts "rescued..."
268
- end
269
- end
270
- end
271
- end
272
- 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 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