raykit 0.0.482 → 0.0.484

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 (43) 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 +43 -43
  6. data/lib/raykit/command.rb +341 -341
  7. data/lib/raykit/conan/buildinfo.rb +69 -69
  8. data/lib/raykit/conanpackage.rb +49 -49
  9. data/lib/raykit/console.rb +272 -272
  10. data/lib/raykit/default_content.rb +227 -227
  11. data/lib/raykit/dir.rb +49 -49
  12. data/lib/raykit/dotnet.rb +176 -174
  13. data/lib/raykit/environment.rb +109 -109
  14. data/lib/raykit/filesystem.rb +34 -34
  15. data/lib/raykit/git/commit.rb +16 -16
  16. data/lib/raykit/git/directory.rb +216 -216
  17. data/lib/raykit/git/files.rb +46 -46
  18. data/lib/raykit/git/repositories.rb +89 -89
  19. data/lib/raykit/git/repository.rb +244 -244
  20. data/lib/raykit/installer.rb +17 -17
  21. data/lib/raykit/log.rb +80 -80
  22. data/lib/raykit/logevent.rb +49 -49
  23. data/lib/raykit/logging.rb +57 -57
  24. data/lib/raykit/markdown.rb +21 -21
  25. data/lib/raykit/msbuild.rb +54 -54
  26. data/lib/raykit/nugetpackage.rb +54 -54
  27. data/lib/raykit/nunit.rb +13 -13
  28. data/lib/raykit/project.rb +339 -339
  29. data/lib/raykit/rake.rb +39 -39
  30. data/lib/raykit/runner.rb +42 -42
  31. data/lib/raykit/secrets.rb +38 -38
  32. data/lib/raykit/sourceImport.rb +74 -74
  33. data/lib/raykit/sourceImports.rb +43 -43
  34. data/lib/raykit/string.rb +18 -18
  35. data/lib/raykit/tasks.rb +99 -99
  36. data/lib/raykit/text.rb +32 -32
  37. data/lib/raykit/timer.rb +31 -31
  38. data/lib/raykit/version.rb +103 -103
  39. data/lib/raykit/vstest.rb +24 -24
  40. data/lib/raykit/wt.rb +28 -28
  41. data/lib/raykit/zip.rb +73 -73
  42. data/lib/raykit.rb +125 -125
  43. metadata +2 -2
@@ -1,272 +1,272 @@
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
+ 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