raykit 0.0.471 → 0.0.472

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,340 +1,339 @@
1
- # frozen_string_literal: true
2
-
3
- require "rake/clean"
4
- require "digest"
5
- RAKE_DIRECTORY = Rake.application.original_dir
6
-
7
- module Raykit
8
- class Project
9
- attr_accessor :name, :description, :version, :timer, :verbose, :target
10
-
11
- @directory
12
- #@version
13
- @remote
14
- @repository
15
- @git_directory
16
- @timeout
17
- @values
18
- @commands
19
-
20
- # @log
21
- # @commit_message_filename
22
-
23
- # TODO: refactor to remove the defaults
24
- def initialize(name = "", description = "", version = "")
25
- @description = description if description.length.positive?
26
- @version = version if version.length.positive?
27
- @timeout = 1000 * 60 * 15
28
- @verbose = false
29
- @timer = Raykit::Timer.new
30
- @remote = ""
31
- @commit_message_filename = "commit_message.tmp"
32
- if Dir.exist?(RAKE_DIRECTORY)
33
- @directory = RAKE_DIRECTORY
34
- if Dir.exist?("#{RAKE_DIRECTORY}/.git") && Dir.exist?(@directory)
35
- @git_directory = Raykit::Git::Directory.new(@directory)
36
- @remote = @git_directory.remote
37
- end
38
- else
39
- @directory = ""
40
- end
41
-
42
- # @log=Log.new("#{RAKE_DIRECTORY}/tmp/raykit.log")
43
- if (name.length.positive?)
44
- @name = name
45
- else
46
- if defined?(NAME)
47
- @name = NAME
48
- else
49
- slns = Dir.glob("*.sln")
50
- if slns.length == 1
51
- @name = slns[0].gsub(".sln", "")
52
- else
53
- gemspecs = Dir.glob("*.gemspec")
54
- if gemspecs.length == 1
55
- @name = gemspecs[0].gsub(".gemspec", "")
56
- else
57
- remote_parts = @remote.split("/")
58
- @name = remote_parts[-1].gsub(".git", "") if remote_parts.length.positive?
59
- end
60
- end
61
- end
62
- end
63
-
64
- if version.length.zero?
65
- if defined?(VERSION)
66
- @version = VERSION
67
- else
68
- @version = Raykit::Version.detect(@name, true)
69
- end
70
- end
71
-
72
- if description.length.zero?
73
- @description = DESCRIPTION if defined?(DESCRIPTION)
74
- end
75
-
76
- @repository = Raykit::Git::Repository.new(@remote)
77
- @values = Hash::new()
78
- @commands = Array::new()
79
- end
80
-
81
- def get_dev_dir(subdir)
82
- Raykit::Environment.get_dev_dir(subdir)
83
- end
84
-
85
- attr_reader :log, :directory, :remote
86
-
87
- # def target
88
- # @target
89
- # end
90
- def target_md5
91
- return Digest::MD5.file(target).to_s.strip if !target.nil? && File.exist?(target)
92
-
93
- ""
94
- end
95
-
96
- def branch
97
- return "main" if @git_directory.nil?
98
- @git_directory.branch
99
- end
100
-
101
- def values
102
- @values
103
- end
104
-
105
- # latest local commit
106
- def latest_commit
107
- return "" if detached?
108
- Dir.chdir(@directory) do
109
- text = `git log -n 1`
110
- scan = text.scan(/commit (\w+)\s/)
111
- return scan[0][0].to_s
112
- end
113
- end
114
-
115
- def outstanding_commit?
116
- Dir.chdir(@directory) do
117
- return true unless `git status`.include?("nothing to commit")
118
- end
119
- false
120
- end
121
-
122
- def outstanding_tag?
123
- # puts `git log -n 1`
124
- # !latest_tag_commit.eql?(latest_commit)
125
- # commit 2e4cb6d6c0721e16cd06afee85b7cdc27354921b (HEAD -> master, tag: 0.0.180, origin/master, origin/HEAD)
126
- outstanding_commit? || !`git log -n 1`.include?("tag:")
127
- end
128
-
129
- def read_only?
130
- return true if !File.exist?(".git") || detached?
131
- return false
132
- end
133
-
134
- def detached?
135
- return true if @git_directory.nil?
136
- @git_directory.detached?
137
- end
138
-
139
- def has_diff?(filename)
140
- Dir.chdir(@directory) do
141
- text = `git diff #{filename}`.strip
142
- return true if text.length.positive?
143
- end
144
- end
145
-
146
- def set_version(version)
147
- @version = version
148
- end
149
-
150
- def latest_tag
151
- `git describe --abbrev=0`.strip
152
- end
153
-
154
- def latest_tag_commit
155
- `git show-ref -s #{latest_tag}`.strip
156
- end
157
-
158
- def latest_tag_md5
159
- text = `git tag #{latest_tag} -n3`
160
- scan = text.scan(/md5=(\w{32})/)
161
- return scan[0][0].to_s.strip if scan.length.positive? && scan[0].length.positive?
162
-
163
- ""
164
- end
165
-
166
- def last_modified_filename
167
- Dir.chdir(@directory) do
168
- Dir.glob("**/*.*").select { |f| File.file?(f) }.max_by { |f| File.mtime(f) }
169
- end
170
- end
171
-
172
- def size
173
- Dir.chdir(@directory) do
174
- text = `git count-objects -v -H`
175
- if matches = text.match(/size: ([. \w]+)$/)
176
- matches[1]
177
- else
178
- text
179
- end
180
- end
181
- end
182
-
183
- def size_pack
184
- Dir.chdir(@directory) do
185
- text = `git count-objects -v -H`
186
- if matches = text.match(/size-pack: ([. \w]+)$/)
187
- matches[1]
188
- else
189
- text
190
- end
191
- end
192
- end
193
-
194
- def elapsed
195
- elapsed = @timer.elapsed
196
- if elapsed < 1.0
197
- "#{format("%.1f", @timer.elapsed)}s"
198
- else
199
- "#{format("%.0f", @timer.elapsed)}s"
200
- end
201
- end
202
-
203
- def info
204
- ljust = 35
205
- puts ""
206
- puts "PROJECT.name".ljust(ljust) + Rainbow(PROJECT.name).yellow.bright
207
- puts "PROJECT.version".ljust(ljust) + Rainbow(PROJECT.version).yellow.bright
208
- puts "PROJECT.remote".ljust(ljust) + Rainbow(PROJECT.remote).yellow.bright
209
- puts "PROJECT.branch".ljust(ljust) + Rainbow(PROJECT.branch).yellow.bright
210
- puts "PROJECT.detached?".ljust(ljust) + Rainbow(PROJECT.detached?).yellow.bright
211
- # puts "PROJECT.target".ljust(ljust) + Rainbow(PROJECT.target).yellow.bright
212
- # puts "PROJECT.target_md5".ljust(ljust) + Rainbow(PROJECT.target_md5).yellow.bright
213
- puts "PROJECT.latest_tag".ljust(ljust) + Rainbow(PROJECT.latest_tag).yellow.bright
214
- puts "PROJECT.latest_tag_commit".ljust(ljust) + Rainbow(PROJECT.latest_tag_commit).yellow.bright
215
- puts "PROJECT.latest_tag_md5".ljust(ljust) + Rainbow(PROJECT.latest_tag_md5).yellow.bright
216
- puts "PROJECT.latest_commit".ljust(ljust) + Rainbow(PROJECT.latest_commit).yellow.bright
217
- puts "PROJECT.last_modified_filename".ljust(ljust) + Rainbow(PROJECT.last_modified_filename).yellow.bright
218
- # puts "PROJECT.elapsed".ljust(ljust) + Rainbow(PROJECT.elapsed).yellow.bright
219
- puts "PROJECT.size".ljust(ljust) + Rainbow(PROJECT.size).yellow.bright
220
- puts "PROJECT.size_pack".ljust(ljust) + Rainbow(PROJECT.size_pack).yellow.bright
221
- puts "PROJECT.outstanding_commit?".ljust(ljust) + Rainbow(PROJECT.outstanding_commit?).yellow.bright
222
- puts "PROJECT.outstanding_tag?".ljust(ljust) + Rainbow(PROJECT.outstanding_tag?).yellow.bright
223
- puts ""
224
- self
225
- end
226
-
227
- def to_markdown()
228
- md = "# #{@name}"
229
- md += get_markdown_nvp("Name", "Value", " ")
230
- md += get_markdown_nvp("-", "-", "-")
231
- md += get_markdown_nvp("Version", "#{@version}", " ")
232
- md += get_markdown_nvp("Machine", "#{Raykit::Environment::machine}", " ")
233
- md += get_markdown_nvp("User", "#{Raykit::Environment::user}", " ")
234
- @values.each do |key, value|
235
- md += get_markdown_nvp(key, value, " ")
236
- end
237
- @commands.each do |cmd|
238
- md = md + "\n" + cmd.to_markdown
239
- end
240
- md
241
- end
242
-
243
- def get_markdown_nvp(key, value, pad_char)
244
- "\n| " + key.to_s.ljust(36, pad_char) + "| " + value.to_s.ljust(36, pad_char)
245
- end
246
-
247
- def summary
248
- info if @verbose
249
- puts "[#{elapsed}] #{Rainbow(@name).yellow.bright} #{Rainbow(version).yellow.bright}"
250
- end
251
-
252
- def commit_message_filename
253
- warn "[DEPRECATION] 'commit_message_filename' is deprecated."
254
- @commit_message_filename
255
- end
256
-
257
- def commit(commit_message)
258
- warn "[DEPRECATION] 'commit_message_filename' is deprecated. Use a run command for better transparency."
259
- Dir.chdir(@directory) do
260
- if File.exist?(".gitignore")
261
- status = `git status`
262
- if status.include?("Changes not staged for commit:")
263
- run("git add --all")
264
- if GIT_DIRECTORY.outstanding_commit?
265
- if File.exist?(@commit_message_filename)
266
- run("git commit --file #{@commit_message_filename}")
267
- File.delete(@commit_message_filename)
268
- else
269
- run("git commit -m'#{commit_message}'")
270
- end
271
- end
272
- end
273
- else
274
- puts "warning: .gitignore not found."
275
- end
276
- end
277
- self
278
- end
279
-
280
- def push
281
- Dir.chdir(@directory) do
282
- status = `git status`
283
- if status.include?('use "git push"')
284
- run("git push")
285
- end
286
- end
287
- self
288
- end
289
-
290
- def pull
291
- Dir.chdir(@directory) do
292
- run("git pull")
293
- end
294
- self
295
- end
296
-
297
- def tag
298
- warn "[DEPRECATION] 'tag' is deprecated. Use run command(s) for better transparency."
299
- Dir.chdir(@directory) do
300
- specific_tag = `git tag -l #{@version}`.strip
301
- puts Rainbow("git tag - #{@version}").green if @verbose
302
- puts `git tag -l #{@version}` if @verbose
303
- if specific_tag.length.zero?
304
- puts "tag #{@version} not detected." if @verbose
305
- tag = `git describe --abbrev=0 --tags`.strip
306
- if @version != tag
307
- puts "latest tag #{@tag}" if @verbose
308
- run("git tag #{@version} -m'#{@version}'")
309
- run("git push origin #{@version}")
310
- # push
311
- end
312
- elsif @verbose
313
- puts "already has tag #{specific_tag}"
314
- end
315
- end
316
- self
317
- end
318
-
319
- def run(command, quit_on_failure = true)
320
- if command.is_a?(Array)
321
- command.each { |subcommand| run(subcommand, quit_on_failure) }
322
- else
323
- cmd = Command.new(command).set_timeout(@timeout).run
324
- cmd.summary
325
- elapsed_str = Timer.get_elapsed_str(cmd.elapsed, 0)
326
- if !cmd.exitstatus.nil? && cmd.exitstatus.zero?
327
- else
328
- # display error details
329
- cmd.details
330
- if quit_on_failure
331
- abort
332
- end
333
- end
334
- cmd.save
335
- @commands << cmd
336
- cmd
337
- end
338
- end
339
- end
340
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "rake/clean"
4
+ require "digest"
5
+
6
+ module Raykit
7
+ class Project
8
+ attr_accessor :name, :description, :version, :timer, :verbose, :target
9
+
10
+ @directory
11
+ #@version
12
+ @remote
13
+ @repository
14
+ @git_directory
15
+ @timeout
16
+ @values
17
+ @commands
18
+
19
+ # @log
20
+ # @commit_message_filename
21
+
22
+ # TODO: refactor to remove the defaults
23
+ def initialize(name = "", description = "", version = "")
24
+ @description = description if description.length.positive?
25
+ @version = version if version.length.positive?
26
+ @timeout = 1000 * 60 * 15
27
+ @verbose = false
28
+ @timer = Raykit::Timer.new
29
+ @remote = ""
30
+ @commit_message_filename = "commit_message.tmp"
31
+ if Dir.exist?(RAKE_DIRECTORY)
32
+ @directory = RAKE_DIRECTORY
33
+ if Dir.exist?("#{RAKE_DIRECTORY}/.git") && Dir.exist?(@directory)
34
+ @git_directory = Raykit::Git::Directory.new(@directory)
35
+ @remote = @git_directory.remote
36
+ end
37
+ else
38
+ @directory = ""
39
+ end
40
+
41
+ # @log=Log.new("#{RAKE_DIRECTORY}/tmp/raykit.log")
42
+ if (name.length.positive?)
43
+ @name = name
44
+ else
45
+ if defined?(NAME)
46
+ @name = NAME
47
+ else
48
+ slns = Dir.glob("*.sln")
49
+ if slns.length == 1
50
+ @name = slns[0].gsub(".sln", "")
51
+ else
52
+ gemspecs = Dir.glob("*.gemspec")
53
+ if gemspecs.length == 1
54
+ @name = gemspecs[0].gsub(".gemspec", "")
55
+ else
56
+ remote_parts = @remote.split("/")
57
+ @name = remote_parts[-1].gsub(".git", "") if remote_parts.length.positive?
58
+ end
59
+ end
60
+ end
61
+ end
62
+
63
+ if version.length.zero?
64
+ if defined?(VERSION)
65
+ @version = VERSION
66
+ else
67
+ @version = Raykit::Version.detect(@name, true)
68
+ end
69
+ end
70
+
71
+ if description.length.zero?
72
+ @description = DESCRIPTION if defined?(DESCRIPTION)
73
+ end
74
+
75
+ @repository = Raykit::Git::Repository.new(@remote)
76
+ @values = Hash::new()
77
+ @commands = Array::new()
78
+ end
79
+
80
+ def get_dev_dir(subdir)
81
+ Raykit::Environment.get_dev_dir(subdir)
82
+ end
83
+
84
+ attr_reader :log, :directory, :remote
85
+
86
+ # def target
87
+ # @target
88
+ # end
89
+ def target_md5
90
+ return Digest::MD5.file(target).to_s.strip if !target.nil? && File.exist?(target)
91
+
92
+ ""
93
+ end
94
+
95
+ def branch
96
+ return "main" if @git_directory.nil?
97
+ @git_directory.branch
98
+ end
99
+
100
+ def values
101
+ @values
102
+ end
103
+
104
+ # latest local commit
105
+ def latest_commit
106
+ return "" if detached?
107
+ Dir.chdir(@directory) do
108
+ text = `git log -n 1`
109
+ scan = text.scan(/commit (\w+)\s/)
110
+ return scan[0][0].to_s
111
+ end
112
+ end
113
+
114
+ def outstanding_commit?
115
+ Dir.chdir(@directory) do
116
+ return true unless `git status`.include?("nothing to commit")
117
+ end
118
+ false
119
+ end
120
+
121
+ def outstanding_tag?
122
+ # puts `git log -n 1`
123
+ # !latest_tag_commit.eql?(latest_commit)
124
+ # commit 2e4cb6d6c0721e16cd06afee85b7cdc27354921b (HEAD -> master, tag: 0.0.180, origin/master, origin/HEAD)
125
+ outstanding_commit? || !`git log -n 1`.include?("tag:")
126
+ end
127
+
128
+ def read_only?
129
+ return true if !File.exist?(".git") || detached?
130
+ return false
131
+ end
132
+
133
+ def detached?
134
+ return true if @git_directory.nil?
135
+ @git_directory.detached?
136
+ end
137
+
138
+ def has_diff?(filename)
139
+ Dir.chdir(@directory) do
140
+ text = `git diff #{filename}`.strip
141
+ return true if text.length.positive?
142
+ end
143
+ end
144
+
145
+ def set_version(version)
146
+ @version = version
147
+ end
148
+
149
+ def latest_tag
150
+ `git describe --abbrev=0`.strip
151
+ end
152
+
153
+ def latest_tag_commit
154
+ `git show-ref -s #{latest_tag}`.strip
155
+ end
156
+
157
+ def latest_tag_md5
158
+ text = `git tag #{latest_tag} -n3`
159
+ scan = text.scan(/md5=(\w{32})/)
160
+ return scan[0][0].to_s.strip if scan.length.positive? && scan[0].length.positive?
161
+
162
+ ""
163
+ end
164
+
165
+ def last_modified_filename
166
+ Dir.chdir(@directory) do
167
+ Dir.glob("**/*.*").select { |f| File.file?(f) }.max_by { |f| File.mtime(f) }
168
+ end
169
+ end
170
+
171
+ def size
172
+ Dir.chdir(@directory) do
173
+ text = `git count-objects -v -H`
174
+ if matches = text.match(/size: ([. \w]+)$/)
175
+ matches[1]
176
+ else
177
+ text
178
+ end
179
+ end
180
+ end
181
+
182
+ def size_pack
183
+ Dir.chdir(@directory) do
184
+ text = `git count-objects -v -H`
185
+ if matches = text.match(/size-pack: ([. \w]+)$/)
186
+ matches[1]
187
+ else
188
+ text
189
+ end
190
+ end
191
+ end
192
+
193
+ def elapsed
194
+ elapsed = @timer.elapsed
195
+ if elapsed < 1.0
196
+ "#{format("%.1f", @timer.elapsed)}s"
197
+ else
198
+ "#{format("%.0f", @timer.elapsed)}s"
199
+ end
200
+ end
201
+
202
+ def info
203
+ ljust = 35
204
+ puts ""
205
+ puts "PROJECT.name".ljust(ljust) + Rainbow(PROJECT.name).yellow.bright
206
+ puts "PROJECT.version".ljust(ljust) + Rainbow(PROJECT.version).yellow.bright
207
+ puts "PROJECT.remote".ljust(ljust) + Rainbow(PROJECT.remote).yellow.bright
208
+ puts "PROJECT.branch".ljust(ljust) + Rainbow(PROJECT.branch).yellow.bright
209
+ puts "PROJECT.detached?".ljust(ljust) + Rainbow(PROJECT.detached?).yellow.bright
210
+ # puts "PROJECT.target".ljust(ljust) + Rainbow(PROJECT.target).yellow.bright
211
+ # puts "PROJECT.target_md5".ljust(ljust) + Rainbow(PROJECT.target_md5).yellow.bright
212
+ puts "PROJECT.latest_tag".ljust(ljust) + Rainbow(PROJECT.latest_tag).yellow.bright
213
+ puts "PROJECT.latest_tag_commit".ljust(ljust) + Rainbow(PROJECT.latest_tag_commit).yellow.bright
214
+ puts "PROJECT.latest_tag_md5".ljust(ljust) + Rainbow(PROJECT.latest_tag_md5).yellow.bright
215
+ puts "PROJECT.latest_commit".ljust(ljust) + Rainbow(PROJECT.latest_commit).yellow.bright
216
+ puts "PROJECT.last_modified_filename".ljust(ljust) + Rainbow(PROJECT.last_modified_filename).yellow.bright
217
+ # puts "PROJECT.elapsed".ljust(ljust) + Rainbow(PROJECT.elapsed).yellow.bright
218
+ puts "PROJECT.size".ljust(ljust) + Rainbow(PROJECT.size).yellow.bright
219
+ puts "PROJECT.size_pack".ljust(ljust) + Rainbow(PROJECT.size_pack).yellow.bright
220
+ puts "PROJECT.outstanding_commit?".ljust(ljust) + Rainbow(PROJECT.outstanding_commit?).yellow.bright
221
+ puts "PROJECT.outstanding_tag?".ljust(ljust) + Rainbow(PROJECT.outstanding_tag?).yellow.bright
222
+ puts ""
223
+ self
224
+ end
225
+
226
+ def to_markdown()
227
+ md = "# #{@name}"
228
+ md += get_markdown_nvp("Name", "Value", " ")
229
+ md += get_markdown_nvp("-", "-", "-")
230
+ md += get_markdown_nvp("Version", "#{@version}", " ")
231
+ md += get_markdown_nvp("Machine", "#{Raykit::Environment::machine}", " ")
232
+ md += get_markdown_nvp("User", "#{Raykit::Environment::user}", " ")
233
+ @values.each do |key, value|
234
+ md += get_markdown_nvp(key, value, " ")
235
+ end
236
+ @commands.each do |cmd|
237
+ md = md + "\n" + cmd.to_markdown
238
+ end
239
+ md
240
+ end
241
+
242
+ def get_markdown_nvp(key, value, pad_char)
243
+ "\n| " + key.to_s.ljust(36, pad_char) + "| " + value.to_s.ljust(36, pad_char)
244
+ end
245
+
246
+ def summary
247
+ info if @verbose
248
+ puts "[#{elapsed}] #{Rainbow(@name).yellow.bright} #{Rainbow(version).yellow.bright}"
249
+ end
250
+
251
+ def commit_message_filename
252
+ warn "[DEPRECATION] 'commit_message_filename' is deprecated."
253
+ @commit_message_filename
254
+ end
255
+
256
+ def commit(commit_message)
257
+ warn "[DEPRECATION] 'commit_message_filename' is deprecated. Use a run command for better transparency."
258
+ Dir.chdir(@directory) do
259
+ if File.exist?(".gitignore")
260
+ status = `git status`
261
+ if status.include?("Changes not staged for commit:")
262
+ run("git add --all")
263
+ if GIT_DIRECTORY.outstanding_commit?
264
+ if File.exist?(@commit_message_filename)
265
+ run("git commit --file #{@commit_message_filename}")
266
+ File.delete(@commit_message_filename)
267
+ else
268
+ run("git commit -m'#{commit_message}'")
269
+ end
270
+ end
271
+ end
272
+ else
273
+ puts "warning: .gitignore not found."
274
+ end
275
+ end
276
+ self
277
+ end
278
+
279
+ def push
280
+ Dir.chdir(@directory) do
281
+ status = `git status`
282
+ if status.include?('use "git push"')
283
+ run("git push")
284
+ end
285
+ end
286
+ self
287
+ end
288
+
289
+ def pull
290
+ Dir.chdir(@directory) do
291
+ run("git pull")
292
+ end
293
+ self
294
+ end
295
+
296
+ def tag
297
+ warn "[DEPRECATION] 'tag' is deprecated. Use run command(s) for better transparency."
298
+ Dir.chdir(@directory) do
299
+ specific_tag = `git tag -l #{@version}`.strip
300
+ puts Rainbow("git tag - #{@version}").green if @verbose
301
+ puts `git tag -l #{@version}` if @verbose
302
+ if specific_tag.length.zero?
303
+ puts "tag #{@version} not detected." if @verbose
304
+ tag = `git describe --abbrev=0 --tags`.strip
305
+ if @version != tag
306
+ puts "latest tag #{@tag}" if @verbose
307
+ run("git tag #{@version} -m'#{@version}'")
308
+ run("git push origin #{@version}")
309
+ # push
310
+ end
311
+ elsif @verbose
312
+ puts "already has tag #{specific_tag}"
313
+ end
314
+ end
315
+ self
316
+ end
317
+
318
+ def run(command, quit_on_failure = true)
319
+ if command.is_a?(Array)
320
+ command.each { |subcommand| run(subcommand, quit_on_failure) }
321
+ else
322
+ cmd = Command.new(command).set_timeout(@timeout).run
323
+ cmd.summary
324
+ elapsed_str = Timer.get_elapsed_str(cmd.elapsed, 0)
325
+ if !cmd.exitstatus.nil? && cmd.exitstatus.zero?
326
+ else
327
+ # display error details
328
+ cmd.details
329
+ if quit_on_failure
330
+ abort
331
+ end
332
+ end
333
+ cmd.save
334
+ @commands << cmd
335
+ cmd
336
+ end
337
+ end
338
+ end
339
+ end