raykit 0.0.524 → 0.0.525

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