raykit 0.0.543 → 0.0.544

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 (48) 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 +374 -374
  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 +310 -310
  11. data/lib/raykit/default_content.rb +8 -8
  12. data/lib/raykit/default_content.txt +219 -219
  13. data/lib/raykit/dir.rb +127 -127
  14. data/lib/raykit/dotnet.rb +174 -174
  15. data/lib/raykit/environment.rb +115 -115
  16. data/lib/raykit/filesystem.rb +34 -34
  17. data/lib/raykit/git/commit.rb +16 -16
  18. data/lib/raykit/git/directory.rb +279 -279
  19. data/lib/raykit/git/files.rb +46 -46
  20. data/lib/raykit/git/repositories.rb +89 -89
  21. data/lib/raykit/git/repository.rb +362 -362
  22. data/lib/raykit/installer.rb +17 -17
  23. data/lib/raykit/log.rb +80 -80
  24. data/lib/raykit/logevent.rb +29 -29
  25. data/lib/raykit/logger.rb +100 -100
  26. data/lib/raykit/logging.rb +57 -57
  27. data/lib/raykit/markdown.rb +21 -21
  28. data/lib/raykit/msbuild.rb +54 -54
  29. data/lib/raykit/nugetpackage.rb +54 -54
  30. data/lib/raykit/nunit.rb +13 -13
  31. data/lib/raykit/project.rb +343 -343
  32. data/lib/raykit/rake.rb +39 -39
  33. data/lib/raykit/runner.rb +42 -42
  34. data/lib/raykit/secrets.rb +38 -38
  35. data/lib/raykit/sourceImport.rb +76 -76
  36. data/lib/raykit/sourceImports.rb +43 -43
  37. data/lib/raykit/string.rb +18 -18
  38. data/lib/raykit/symbols.rb +115 -115
  39. data/lib/raykit/tasks.rb +91 -91
  40. data/lib/raykit/text.rb +32 -32
  41. data/lib/raykit/timer.rb +31 -31
  42. data/lib/raykit/version.rb +97 -95
  43. data/lib/raykit/vstest.rb +24 -24
  44. data/lib/raykit/wix.rb +61 -61
  45. data/lib/raykit/wt.rb +28 -28
  46. data/lib/raykit/zip.rb +73 -73
  47. data/lib/raykit.rb +143 -140
  48. metadata +3 -3
@@ -1,16 +1,16 @@
1
- # frozen_string_literal: true
2
-
3
- module Raykit
4
- module Git
5
- # Functionality to manage a git commit
6
- class Commit
7
- attr_accessor :url, :branch, :commit_id
8
-
9
- def initialize(url, branch, commit_id)
10
- @url = url
11
- @branch = branch
12
- @commit_id = commit_id
13
- end
14
- end
15
- end
16
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Raykit
4
+ module Git
5
+ # Functionality to manage a git commit
6
+ class Commit
7
+ attr_accessor :url, :branch, :commit_id
8
+
9
+ def initialize(url, branch, commit_id)
10
+ @url = url
11
+ @branch = branch
12
+ @commit_id = commit_id
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,279 +1,279 @@
1
- # frozen_string_literal: true
2
-
3
- module Raykit
4
- module Git
5
- # Functionality to manage a local clone of a git repository
6
- class Directory
7
- # The directory name of the local repository clone
8
- attr_accessor :directory
9
-
10
- @repository
11
-
12
- def initialize(directory)
13
- @directory = directory
14
- end
15
-
16
- def outstanding_commit?
17
- Dir.chdir(directory) do
18
- return false if !File.exist?(".git")
19
- if user_can_commit
20
- return !`git status`.include?("nothing to commit,")
21
- else
22
- return false
23
- end
24
- end
25
- end
26
-
27
- def detached?
28
- Dir.chdir(directory) do
29
- status = `git status`.strip
30
- if status.include?("detached")
31
- true
32
- else
33
- false
34
- end
35
- end
36
- end
37
-
38
- def pull
39
- Dir.chdir(directory) do
40
- diff = `git diff`.strip
41
- status = `git status`.strip
42
- PROJECT.run("git pull", false) if diff.length.zero? && status.include?("nothing to commit")
43
- end
44
- end
45
-
46
- def rake(task)
47
- unless Dir.exist?(@directory)
48
- puts "directory not found."
49
- return 1
50
- end
51
- debug = false
52
- sub_dir = "work"
53
- sub_dir = "make" if @directory.include?("/make/")
54
- rake_log = repository.get_dev_dir("log") + "/#{sub_dir}.rake.#{task}.json"
55
-
56
- puts "log filename #{rake_log}" if debug
57
- if File.exist?(rake_log) && (File.mtime(rake_log) > last_modified_time)
58
- puts "using logged data" if debug
59
- cmd = Raykit::Command.parse(File.read(rake_log))
60
- cmd.summary
61
- return
62
- end
63
-
64
- Dir.chdir(@directory) do
65
- if File.exist?("rakefile.rb")
66
- cmd = Raykit::Command.new("rake #{task}")
67
- cmd.summary
68
- FileUtils.mkdir_p(File.dirname(rake_log))
69
- File.open(rake_log, "w") { |f| f.write(JSON.generate(cmd.to_hash)) }
70
- else
71
- puts "rakefile.rb not found"
72
- end
73
- end
74
- end
75
-
76
- def last_modified_time
77
- Dir.chdir(@directory) do
78
- begin
79
- # Find the most recently modified file
80
- most_recent_file = Dir.glob("**/*.*").select { |f| File.file?(f) }.max_by { |f| File.mtime(f) }
81
-
82
- # Use File.mtime if a file was found, otherwise handle the nil case
83
- if most_recent_file
84
- last_modified_time = File.mtime(most_recent_file)
85
- else
86
- # Handle the case where no files are found. This could be setting a default value,
87
- # raising a custom error, or any other appropriate action depending on your needs.
88
- # For example, setting last_modified_time to Time.now or raising a custom error.
89
- last_modified_time = Time.now # Or any other appropriate action
90
- end
91
- rescue Errno::ENAMETOOLONG => e
92
- puts "Error: #{e.message}"
93
- last_modified_time = Time.now # Or any other appropriate action
94
- end
95
-
96
- #File.mtime(Dir.glob("**/*.*").select { |f| File.file?(f) }.max_by { |f| File.mtime(f) })
97
- end
98
- end
99
-
100
- def last_modified_filename
101
- Dir.chdir(@directory) do
102
- # TODO: consider handling the case where glob can fail because of filename length
103
- # Errno::ENAMETOOLONG: File name too long @ dir_s_glob - /Users/username/...
104
- #
105
- begin
106
- # Use Dir.glob to find all files, select the actual files, find the one with the latest modification time, and return its name
107
- files = Dir.glob("**/*.*").select { |f| File.file?(f) }
108
-
109
- # Find the file with the latest modification time
110
- latest_file = files.max_by { |f| File.mtime(f) }
111
-
112
- return latest_file
113
-
114
- #Dir.glob("**/*.*").select { |f| File.file?(f) }.max_by { |f| File.mtime(f) }
115
- rescue Errno::ENAMETOOLONG => e
116
- puts "Error: #{e.message}"
117
- # return the first src file found
118
- src_files.each { |f| return f if File.file?(f) }
119
- #return handle_long_filename_error
120
- end
121
- end
122
- end
123
-
124
- # git ls-tree -r master --name-only
125
- def src_files
126
- files = Array.new
127
- Dir.chdir(@directory) do
128
- `git ls-tree -r #{branch} --name-only`.each_line { |line|
129
- file = line.strip
130
- files << file if file.length > 0 && File.exist?(file)
131
- }
132
- end
133
- files
134
- end
135
-
136
- def last_modified_src_time
137
- Dir.chdir(@directory) do
138
- last_file = self.src_files.select { |f| File.file?(f) }.max_by { |f| File.mtime(f) }
139
- last_file ? File.mtime(last_file) : Time.at(0) # Return a default time if no file is found
140
- end
141
- end
142
-
143
- #def last_modified_src_time
144
- # #File.mtim(src_files.max_by { |f| File.mtime(f) }#
145
- # Dir.chdir(@directory) do
146
- # File.mtime(self.src_files.select { |f| File.file?(f) }.max_by { |f| File.mtime(f) })
147
- # end
148
- #end
149
-
150
- def last_modified_src_file
151
- Dir.chdir(@directory) do
152
- # Select the source files that are actual files, not directories
153
- src_files.select { |f| File.file?(f) }
154
- # Find the max by modification time
155
- .max_by { |f| File.mtime(f) }
156
- end
157
- end
158
-
159
- def last_modified_artifact_time
160
- self.last_modified_time
161
- end
162
-
163
- # The latest tag for a branch of the repository
164
- def latest_tag(_branch)
165
- Dir.chdir(directory) do
166
- return `git describe --abbrev=0`.strip
167
- end
168
- ""
169
- end
170
-
171
- def get_tag_commit_id(name)
172
- cmd = Raykit::Command.new("git rev-parse \"#{name}\"").run
173
- if !cmd.output.include?("fatal") && !cmd.error.include?("fatal")
174
- cmd.output.strip
175
- else
176
- ""
177
- end
178
- end
179
-
180
- def has_tag(name)
181
- cmd = Raykit::Command.new("git rev-parse \"#{name}\"").run
182
- if !cmd.output.include?("fatal") && !cmd.error.include?("fatal")
183
- true
184
- else
185
- false
186
- end
187
- end
188
-
189
- def get_sha(filename)
190
- if File.exist?(filename)
191
- Digest::SHA256.file(filename).hexdigest.to_s
192
- else
193
- "#{filename} not found"
194
- end
195
- # ''
196
- end
197
-
198
- def user_name
199
- `git config --get user.name`.strip
200
- end
201
-
202
- def user_email
203
- `git config --get user.email`.strip
204
- end
205
-
206
- def user_can_commit
207
- return false if user_name.length.zero?
208
- return false if user_email.length.zero?
209
-
210
- true
211
- end
212
-
213
- def branch
214
- Dir.chdir(directory) do
215
- scan = `git branch`.scan(/\*\s([\w.-]+)/)
216
- return scan[0][0].to_s if !scan.nil? && scan.length.positive? && scan[0].length.positive?
217
- end
218
- "master"
219
- end
220
-
221
- def repository
222
- @repository = Raykit::Git::Repository.new(remote) if @repository.nil?
223
- @repository
224
- end
225
-
226
- def remote
227
- if Dir.exist?(directory)
228
- Dir.chdir(directory) do
229
- return Command.new("git config --get remote.origin.url").run.output.strip if Dir.exist?(".git")
230
- end
231
- end
232
- ""
233
- end
234
-
235
- def tag_version(version)
236
- if has_tag "v#{version}"
237
- puts " git tag v#{version} already exists"
238
- else
239
- if outstanding_commit?
240
- raise "outstanding commit, will not tag"
241
- else
242
- puts " git tag v#{version} does not exist"
243
- run("git tag -a v#{version} -m\"version #{version}\"")
244
- end
245
- end
246
- end
247
-
248
- def get_unique_ruby_constants
249
- # Define the regular expression pattern
250
- pattern = /\b([A-Z][A-Z0-9_]*)\b\s*=/
251
-
252
- constants = []
253
-
254
- # Loop through each .rb file in the specified directory
255
- Dir.glob("#{directory}/**/*.rb").each do |file|
256
- # Read the contents of the file
257
- content = File.read(file)
258
-
259
- # Scan the content for constants and add the matches to the array.
260
- content.scan(pattern) do |match|
261
- # Add matched constant name to the constants array.
262
- constants << match[0]
263
- end
264
- # Scan the content for constants and add the matches to the array
265
- #constants.concat(content.scan(pattern))
266
- end
267
-
268
- # Return unique constants
269
- constants.uniq
270
- end
271
-
272
- #def setup
273
- # DEFAULT_SUBDIRECTORIES.each do |subdirectory|
274
- # FileUtils.mkdir_p(subdirectory)
275
- # end
276
- #end
277
- end # class Directory
278
- end # module Git
279
- end # module Raykit
1
+ # frozen_string_literal: true
2
+
3
+ module Raykit
4
+ module Git
5
+ # Functionality to manage a local clone of a git repository
6
+ class Directory
7
+ # The directory name of the local repository clone
8
+ attr_accessor :directory
9
+
10
+ @repository
11
+
12
+ def initialize(directory)
13
+ @directory = directory
14
+ end
15
+
16
+ def outstanding_commit?
17
+ Dir.chdir(directory) do
18
+ return false if !File.exist?(".git")
19
+ if user_can_commit
20
+ return !`git status`.include?("nothing to commit,")
21
+ else
22
+ return false
23
+ end
24
+ end
25
+ end
26
+
27
+ def detached?
28
+ Dir.chdir(directory) do
29
+ status = `git status`.strip
30
+ if status.include?("detached")
31
+ true
32
+ else
33
+ false
34
+ end
35
+ end
36
+ end
37
+
38
+ def pull
39
+ Dir.chdir(directory) do
40
+ diff = `git diff`.strip
41
+ status = `git status`.strip
42
+ PROJECT.run("git pull", false) if diff.length.zero? && status.include?("nothing to commit")
43
+ end
44
+ end
45
+
46
+ def rake(task)
47
+ unless Dir.exist?(@directory)
48
+ puts "directory not found."
49
+ return 1
50
+ end
51
+ debug = false
52
+ sub_dir = "work"
53
+ sub_dir = "make" if @directory.include?("/make/")
54
+ rake_log = repository.get_dev_dir("log") + "/#{sub_dir}.rake.#{task}.json"
55
+
56
+ puts "log filename #{rake_log}" if debug
57
+ if File.exist?(rake_log) && (File.mtime(rake_log) > last_modified_time)
58
+ puts "using logged data" if debug
59
+ cmd = Raykit::Command.parse(File.read(rake_log))
60
+ cmd.summary
61
+ return
62
+ end
63
+
64
+ Dir.chdir(@directory) do
65
+ if File.exist?("rakefile.rb")
66
+ cmd = Raykit::Command.new("rake #{task}")
67
+ cmd.summary
68
+ FileUtils.mkdir_p(File.dirname(rake_log))
69
+ File.open(rake_log, "w") { |f| f.write(JSON.generate(cmd.to_hash)) }
70
+ else
71
+ puts "rakefile.rb not found"
72
+ end
73
+ end
74
+ end
75
+
76
+ def last_modified_time
77
+ Dir.chdir(@directory) do
78
+ begin
79
+ # Find the most recently modified file
80
+ most_recent_file = Dir.glob("**/*.*").select { |f| File.file?(f) }.max_by { |f| File.mtime(f) }
81
+
82
+ # Use File.mtime if a file was found, otherwise handle the nil case
83
+ if most_recent_file
84
+ last_modified_time = File.mtime(most_recent_file)
85
+ else
86
+ # Handle the case where no files are found. This could be setting a default value,
87
+ # raising a custom error, or any other appropriate action depending on your needs.
88
+ # For example, setting last_modified_time to Time.now or raising a custom error.
89
+ last_modified_time = Time.now # Or any other appropriate action
90
+ end
91
+ rescue Errno::ENAMETOOLONG => e
92
+ puts "Error: #{e.message}"
93
+ last_modified_time = Time.now # Or any other appropriate action
94
+ end
95
+
96
+ #File.mtime(Dir.glob("**/*.*").select { |f| File.file?(f) }.max_by { |f| File.mtime(f) })
97
+ end
98
+ end
99
+
100
+ def last_modified_filename
101
+ Dir.chdir(@directory) do
102
+ # TODO: consider handling the case where glob can fail because of filename length
103
+ # Errno::ENAMETOOLONG: File name too long @ dir_s_glob - /Users/username/...
104
+ #
105
+ begin
106
+ # Use Dir.glob to find all files, select the actual files, find the one with the latest modification time, and return its name
107
+ files = Dir.glob("**/*.*").select { |f| File.file?(f) }
108
+
109
+ # Find the file with the latest modification time
110
+ latest_file = files.max_by { |f| File.mtime(f) }
111
+
112
+ return latest_file
113
+
114
+ #Dir.glob("**/*.*").select { |f| File.file?(f) }.max_by { |f| File.mtime(f) }
115
+ rescue Errno::ENAMETOOLONG => e
116
+ puts "Error: #{e.message}"
117
+ # return the first src file found
118
+ src_files.each { |f| return f if File.file?(f) }
119
+ #return handle_long_filename_error
120
+ end
121
+ end
122
+ end
123
+
124
+ # git ls-tree -r master --name-only
125
+ def src_files
126
+ files = Array.new
127
+ Dir.chdir(@directory) do
128
+ `git ls-tree -r #{branch} --name-only`.each_line { |line|
129
+ file = line.strip
130
+ files << file if file.length > 0 && File.exist?(file)
131
+ }
132
+ end
133
+ files
134
+ end
135
+
136
+ def last_modified_src_time
137
+ Dir.chdir(@directory) do
138
+ last_file = self.src_files.select { |f| File.file?(f) }.max_by { |f| File.mtime(f) }
139
+ last_file ? File.mtime(last_file) : Time.at(0) # Return a default time if no file is found
140
+ end
141
+ end
142
+
143
+ #def last_modified_src_time
144
+ # #File.mtim(src_files.max_by { |f| File.mtime(f) }#
145
+ # Dir.chdir(@directory) do
146
+ # File.mtime(self.src_files.select { |f| File.file?(f) }.max_by { |f| File.mtime(f) })
147
+ # end
148
+ #end
149
+
150
+ def last_modified_src_file
151
+ Dir.chdir(@directory) do
152
+ # Select the source files that are actual files, not directories
153
+ src_files.select { |f| File.file?(f) }
154
+ # Find the max by modification time
155
+ .max_by { |f| File.mtime(f) }
156
+ end
157
+ end
158
+
159
+ def last_modified_artifact_time
160
+ self.last_modified_time
161
+ end
162
+
163
+ # The latest tag for a branch of the repository
164
+ def latest_tag(_branch)
165
+ Dir.chdir(directory) do
166
+ return `git describe --abbrev=0`.strip
167
+ end
168
+ ""
169
+ end
170
+
171
+ def get_tag_commit_id(name)
172
+ cmd = Raykit::Command.new("git rev-parse \"#{name}\"").run
173
+ if !cmd.output.include?("fatal") && !cmd.error.include?("fatal")
174
+ cmd.output.strip
175
+ else
176
+ ""
177
+ end
178
+ end
179
+
180
+ def has_tag(name)
181
+ cmd = Raykit::Command.new("git rev-parse \"#{name}\"").run
182
+ if !cmd.output.include?("fatal") && !cmd.error.include?("fatal")
183
+ true
184
+ else
185
+ false
186
+ end
187
+ end
188
+
189
+ def get_sha(filename)
190
+ if File.exist?(filename)
191
+ Digest::SHA256.file(filename).hexdigest.to_s
192
+ else
193
+ "#{filename} not found"
194
+ end
195
+ # ''
196
+ end
197
+
198
+ def user_name
199
+ `git config --get user.name`.strip
200
+ end
201
+
202
+ def user_email
203
+ `git config --get user.email`.strip
204
+ end
205
+
206
+ def user_can_commit
207
+ return false if user_name.length.zero?
208
+ return false if user_email.length.zero?
209
+
210
+ true
211
+ end
212
+
213
+ def branch
214
+ Dir.chdir(directory) do
215
+ scan = `git branch`.scan(/\*\s([\w.-]+)/)
216
+ return scan[0][0].to_s if !scan.nil? && scan.length.positive? && scan[0].length.positive?
217
+ end
218
+ "master"
219
+ end
220
+
221
+ def repository
222
+ @repository = Raykit::Git::Repository.new(remote) if @repository.nil?
223
+ @repository
224
+ end
225
+
226
+ def remote
227
+ if Dir.exist?(directory)
228
+ Dir.chdir(directory) do
229
+ return Command.new("git config --get remote.origin.url").run.output.strip if Dir.exist?(".git")
230
+ end
231
+ end
232
+ ""
233
+ end
234
+
235
+ def tag_version(version)
236
+ if has_tag "v#{version}"
237
+ puts " git tag v#{version} already exists"
238
+ else
239
+ if outstanding_commit?
240
+ raise "outstanding commit, will not tag"
241
+ else
242
+ puts " git tag v#{version} does not exist"
243
+ run("git tag -a v#{version} -m\"version #{version}\"")
244
+ end
245
+ end
246
+ end
247
+
248
+ def get_unique_ruby_constants
249
+ # Define the regular expression pattern
250
+ pattern = /\b([A-Z][A-Z0-9_]*)\b\s*=/
251
+
252
+ constants = []
253
+
254
+ # Loop through each .rb file in the specified directory
255
+ Dir.glob("#{directory}/**/*.rb").each do |file|
256
+ # Read the contents of the file
257
+ content = File.read(file)
258
+
259
+ # Scan the content for constants and add the matches to the array.
260
+ content.scan(pattern) do |match|
261
+ # Add matched constant name to the constants array.
262
+ constants << match[0]
263
+ end
264
+ # Scan the content for constants and add the matches to the array
265
+ #constants.concat(content.scan(pattern))
266
+ end
267
+
268
+ # Return unique constants
269
+ constants.uniq
270
+ end
271
+
272
+ #def setup
273
+ # DEFAULT_SUBDIRECTORIES.each do |subdirectory|
274
+ # FileUtils.mkdir_p(subdirectory)
275
+ # end
276
+ #end
277
+ end # class Directory
278
+ end # module Git
279
+ end # module Raykit