raykit 0.0.527 → 0.0.530

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) 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 +227 -227
  12. data/lib/raykit/dir.rb +96 -96
  13. data/lib/raykit/dotnet.rb +174 -174
  14. data/lib/raykit/environment.rb +115 -115
  15. data/lib/raykit/filesystem.rb +34 -34
  16. data/lib/raykit/git/commit.rb +16 -16
  17. data/lib/raykit/git/directory.rb +258 -220
  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 +362 -362
  21. data/lib/raykit/installer.rb +17 -17
  22. data/lib/raykit/log.rb +80 -80
  23. data/lib/raykit/logevent.rb +29 -29
  24. data/lib/raykit/logger.rb +100 -100
  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 -115
  38. data/lib/raykit/tasks.rb +91 -91
  39. data/lib/raykit/text.rb +32 -32
  40. data/lib/raykit/timer.rb +31 -31
  41. data/lib/raykit/version.rb +95 -95
  42. data/lib/raykit/vstest.rb +24 -24
  43. data/lib/raykit/wix.rb +61 -61
  44. data/lib/raykit/wt.rb +28 -28
  45. data/lib/raykit/zip.rb +73 -73
  46. data/lib/raykit.rb +135 -132
  47. 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,220 +1,258 @@
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
- File.mtime(Dir.glob("**/*.*").select { |f| File.file?(f) }.max_by { |f| File.mtime(f) })
79
- end
80
- end
81
-
82
- # git ls-tree -r master --name-only
83
- def src_files
84
- files = Array.new
85
- Dir.chdir(@directory) do
86
- `git ls-tree -r #{branch} --name-only`.each_line { |line|
87
- file = line.strip
88
- files << file if file.length > 0
89
- }
90
- end
91
- files
92
- end
93
-
94
- def last_modified_src_time
95
- Dir.chdir(@directory) do
96
- File.mtime(src_files.select { |f| File.file?(f) }.max_by { |f| File.mtime(f) })
97
- end
98
- end
99
-
100
- def last_modified_artifact_time
101
- self.last_modified_time
102
- end
103
-
104
- # The latest tag for a branch of the repository
105
- def latest_tag(_branch)
106
- Dir.chdir(directory) do
107
- return `git describe --abbrev=0`.strip
108
- end
109
- ""
110
- end
111
-
112
- def get_tag_commit_id(name)
113
- cmd = Raykit::Command.new("git rev-parse \"#{name}\"").run
114
- if !cmd.output.include?("fatal") && !cmd.error.include?("fatal")
115
- cmd.output.strip
116
- else
117
- ""
118
- end
119
- end
120
-
121
- def has_tag(name)
122
- cmd = Raykit::Command.new("git rev-parse \"#{name}\"").run
123
- if !cmd.output.include?("fatal") && !cmd.error.include?("fatal")
124
- true
125
- else
126
- false
127
- end
128
- end
129
-
130
- def get_sha(filename)
131
- if File.exist?(filename)
132
- Digest::SHA256.file(filename).hexdigest.to_s
133
- else
134
- "#{filename} not found"
135
- end
136
- # ''
137
- end
138
-
139
- def user_name
140
- `git config --get user.name`.strip
141
- end
142
-
143
- def user_email
144
- `git config --get user.email`.strip
145
- end
146
-
147
- def user_can_commit
148
- return false if user_name.length.zero?
149
- return false if user_email.length.zero?
150
-
151
- true
152
- end
153
-
154
- def branch
155
- Dir.chdir(directory) do
156
- scan = `git branch`.scan(/\*\s([\w.-]+)/)
157
- return scan[0][0].to_s if !scan.nil? && scan.length.positive? && scan[0].length.positive?
158
- end
159
- "master"
160
- end
161
-
162
- def repository
163
- @repository = Raykit::Git::Repository.new(remote) if @repository.nil?
164
- @repository
165
- end
166
-
167
- def remote
168
- if Dir.exist?(directory)
169
- Dir.chdir(directory) do
170
- return Command.new("git config --get remote.origin.url").run.output.strip if Dir.exist?(".git")
171
- end
172
- end
173
- ""
174
- end
175
-
176
- def tag_version(version)
177
- if has_tag "v#{version}"
178
- puts " git tag v#{version} already exists"
179
- else
180
- if outstanding_commit?
181
- raise "outstanding commit, will not tag"
182
- else
183
- puts " git tag v#{version} does not exist"
184
- run("git tag -a v#{version} -m\"version #{version}\"")
185
- end
186
- end
187
- end
188
-
189
- def get_unique_ruby_constants
190
- # Define the regular expression pattern
191
- pattern = /\b([A-Z][A-Z0-9_]*)\b\s*=/
192
-
193
- constants = []
194
-
195
- # Loop through each .rb file in the specified directory
196
- Dir.glob("#{directory}/**/*.rb").each do |file|
197
- # Read the contents of the file
198
- content = File.read(file)
199
-
200
- # Scan the content for constants and add the matches to the array.
201
- content.scan(pattern) do |match|
202
- # Add matched constant name to the constants array.
203
- constants << match[0]
204
- end
205
- # Scan the content for constants and add the matches to the array
206
- #constants.concat(content.scan(pattern))
207
- end
208
-
209
- # Return unique constants
210
- constants.uniq
211
- end
212
-
213
- #def setup
214
- # DEFAULT_SUBDIRECTORIES.each do |subdirectory|
215
- # FileUtils.mkdir_p(subdirectory)
216
- # end
217
- #end
218
- end # class Directory
219
- end # module Git
220
- 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
+
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
+
92
+ #File.mtime(Dir.glob("**/*.*").select { |f| File.file?(f) }.max_by { |f| File.mtime(f) })
93
+ end
94
+ end
95
+
96
+ def last_modified_filename
97
+ Dir.chdir(@directory) do
98
+ # Use Dir.glob to find all files, select the actual files, find the one with the latest modification time, and return its name
99
+ Dir.glob("**/*.*").select { |f| File.file?(f) }.max_by { |f| File.mtime(f) }
100
+ end
101
+ end
102
+
103
+ # git ls-tree -r master --name-only
104
+ def src_files
105
+ files = Array.new
106
+ Dir.chdir(@directory) do
107
+ `git ls-tree -r #{branch} --name-only`.each_line { |line|
108
+ file = line.strip
109
+ files << file if file.length > 0 && File.exist?(file)
110
+ }
111
+ end
112
+ files
113
+ end
114
+
115
+ def last_modified_src_time
116
+ Dir.chdir(@directory) do
117
+ last_file = self.src_files.select { |f| File.file?(f) }.max_by { |f| File.mtime(f) }
118
+ last_file ? File.mtime(last_file) : Time.at(0) # Return a default time if no file is found
119
+ end
120
+ end
121
+
122
+ #def last_modified_src_time
123
+ # #File.mtim(src_files.max_by { |f| File.mtime(f) }#
124
+ # Dir.chdir(@directory) do
125
+ # File.mtime(self.src_files.select { |f| File.file?(f) }.max_by { |f| File.mtime(f) })
126
+ # end
127
+ #end
128
+
129
+ def last_modified_src_file
130
+ Dir.chdir(@directory) do
131
+ # Select the source files that are actual files, not directories
132
+ src_files.select { |f| File.file?(f) }
133
+ # Find the max by modification time
134
+ .max_by { |f| File.mtime(f) }
135
+ end
136
+ end
137
+
138
+ def last_modified_artifact_time
139
+ self.last_modified_time
140
+ end
141
+
142
+ # The latest tag for a branch of the repository
143
+ def latest_tag(_branch)
144
+ Dir.chdir(directory) do
145
+ return `git describe --abbrev=0`.strip
146
+ end
147
+ ""
148
+ end
149
+
150
+ def get_tag_commit_id(name)
151
+ cmd = Raykit::Command.new("git rev-parse \"#{name}\"").run
152
+ if !cmd.output.include?("fatal") && !cmd.error.include?("fatal")
153
+ cmd.output.strip
154
+ else
155
+ ""
156
+ end
157
+ end
158
+
159
+ def has_tag(name)
160
+ cmd = Raykit::Command.new("git rev-parse \"#{name}\"").run
161
+ if !cmd.output.include?("fatal") && !cmd.error.include?("fatal")
162
+ true
163
+ else
164
+ false
165
+ end
166
+ end
167
+
168
+ def get_sha(filename)
169
+ if File.exist?(filename)
170
+ Digest::SHA256.file(filename).hexdigest.to_s
171
+ else
172
+ "#{filename} not found"
173
+ end
174
+ # ''
175
+ end
176
+
177
+ def user_name
178
+ `git config --get user.name`.strip
179
+ end
180
+
181
+ def user_email
182
+ `git config --get user.email`.strip
183
+ end
184
+
185
+ def user_can_commit
186
+ return false if user_name.length.zero?
187
+ return false if user_email.length.zero?
188
+
189
+ true
190
+ end
191
+
192
+ def branch
193
+ Dir.chdir(directory) do
194
+ scan = `git branch`.scan(/\*\s([\w.-]+)/)
195
+ return scan[0][0].to_s if !scan.nil? && scan.length.positive? && scan[0].length.positive?
196
+ end
197
+ "master"
198
+ end
199
+
200
+ def repository
201
+ @repository = Raykit::Git::Repository.new(remote) if @repository.nil?
202
+ @repository
203
+ end
204
+
205
+ def remote
206
+ if Dir.exist?(directory)
207
+ Dir.chdir(directory) do
208
+ return Command.new("git config --get remote.origin.url").run.output.strip if Dir.exist?(".git")
209
+ end
210
+ end
211
+ ""
212
+ end
213
+
214
+ def tag_version(version)
215
+ if has_tag "v#{version}"
216
+ puts " git tag v#{version} already exists"
217
+ else
218
+ if outstanding_commit?
219
+ raise "outstanding commit, will not tag"
220
+ else
221
+ puts " git tag v#{version} does not exist"
222
+ run("git tag -a v#{version} -m\"version #{version}\"")
223
+ end
224
+ end
225
+ end
226
+
227
+ def get_unique_ruby_constants
228
+ # Define the regular expression pattern
229
+ pattern = /\b([A-Z][A-Z0-9_]*)\b\s*=/
230
+
231
+ constants = []
232
+
233
+ # Loop through each .rb file in the specified directory
234
+ Dir.glob("#{directory}/**/*.rb").each do |file|
235
+ # Read the contents of the file
236
+ content = File.read(file)
237
+
238
+ # Scan the content for constants and add the matches to the array.
239
+ content.scan(pattern) do |match|
240
+ # Add matched constant name to the constants array.
241
+ constants << match[0]
242
+ end
243
+ # Scan the content for constants and add the matches to the array
244
+ #constants.concat(content.scan(pattern))
245
+ end
246
+
247
+ # Return unique constants
248
+ constants.uniq
249
+ end
250
+
251
+ #def setup
252
+ # DEFAULT_SUBDIRECTORIES.each do |subdirectory|
253
+ # FileUtils.mkdir_p(subdirectory)
254
+ # end
255
+ #end
256
+ end # class Directory
257
+ end # module Git
258
+ end # module Raykit
@@ -1,46 +1,46 @@
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 Files
7
- @url
8
- @commit_id
9
-
10
- def initialize(url, commit_id)
11
- @url = url
12
- @commit_id = commit_id
13
- end
14
-
15
- def clean
16
- FileUtils.rm_rf(commit_path) if Dir.exist?(commit_path)
17
- end
18
-
19
- def get(name)
20
- puts "commit_path(): #{commit_path}"
21
- unless Dir.exist?(commit_path)
22
- puts "cloning commit path..."
23
- clone = Raykit::Command.new("git clone #{@url} #{commit_path}")
24
- puts clone.output
25
- puts clone.error
26
- Dir.chdir(commit_path) do
27
- checkout = Raykit::Command.new("git checkout #{@commit_id}")
28
- end
29
- end
30
-
31
- return filename(name) if File.exist?(filename(name))
32
-
33
- ""
34
- end
35
-
36
- def commit_path
37
- Dir.tmpdir + File::SEPARATOR + "Raykit.Git.Files" + File::SEPARATOR + @url.gsub("://",
38
- ".") + File::SEPARATOR + @commit_id
39
- end
40
-
41
- def filename(name)
42
- commit_path + File::SEPARATOR + name
43
- end
44
- end
45
- end
46
- end
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 Files
7
+ @url
8
+ @commit_id
9
+
10
+ def initialize(url, commit_id)
11
+ @url = url
12
+ @commit_id = commit_id
13
+ end
14
+
15
+ def clean
16
+ FileUtils.rm_rf(commit_path) if Dir.exist?(commit_path)
17
+ end
18
+
19
+ def get(name)
20
+ puts "commit_path(): #{commit_path}"
21
+ unless Dir.exist?(commit_path)
22
+ puts "cloning commit path..."
23
+ clone = Raykit::Command.new("git clone #{@url} #{commit_path}")
24
+ puts clone.output
25
+ puts clone.error
26
+ Dir.chdir(commit_path) do
27
+ checkout = Raykit::Command.new("git checkout #{@commit_id}")
28
+ end
29
+ end
30
+
31
+ return filename(name) if File.exist?(filename(name))
32
+
33
+ ""
34
+ end
35
+
36
+ def commit_path
37
+ Dir.tmpdir + File::SEPARATOR + "Raykit.Git.Files" + File::SEPARATOR + @url.gsub("://",
38
+ ".") + File::SEPARATOR + @commit_id
39
+ end
40
+
41
+ def filename(name)
42
+ commit_path + File::SEPARATOR + name
43
+ end
44
+ end
45
+ end
46
+ end