release-gem 0.1.4 → 0.1.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 25dd9ae22ee2f6e81080fb7dfad95726cf299aa4c8e437ea49ccf015ba383566
4
- data.tar.gz: f3f0f229c66f3eb7e3c9aa2cbf275a0cbaed4f55da0987c17bddcde48bfb8890
3
+ metadata.gz: b5f829021df7a73c3e93c06b2e4d788f103a1f0ac096d3c472a7b4cfd575122c
4
+ data.tar.gz: 7c4a3acaa233d7bcff3a1ef308dbdfe3ea7b669f3418d3205072b6b2c5b9ada2
5
5
  SHA512:
6
- metadata.gz: e892d6126c332f5266abaf1c3bb992c4cd4f9157eac46da023f4eff89b9a1217e69fed6656c24447fe903d707d2803c86241290b65f0aada86e06985faa8ee33
7
- data.tar.gz: 2142260e3f9bc6af01c6bc6e3812b9258e8ec077dbb44d77f77243989b722ed9306fe8f6d2a467043d5681acf37fb193004b504815cef932552307e82cee3831
6
+ metadata.gz: e8cc062083ef870fd5ef74eff9b9d8b05072b2348096d10fddab73c8d1ad2cf3ad81ce52dcf5c5447787103429e6c14f970189729a3873293358a432bf83aeb8
7
+ data.tar.gz: 9ae8f560785f812de5578155547df4ab94deefafa4e741fb2d6b23af13f063c672ae93a75cbce10abc5067d5be7abf640d4aa46f359808ab26f9d66c5327049e
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- release-gem (0.1.4)
4
+ release-gem (0.1.6)
5
5
  colorize
6
6
  git_cli
7
7
  gvcs
@@ -15,7 +15,7 @@ GEM
15
15
  specs:
16
16
  colorize (0.8.1)
17
17
  diff-lcs (1.5.0)
18
- git_cli (0.11.2)
18
+ git_cli (0.11.3)
19
19
  gvcs
20
20
  ptools (~> 1.4.0)
21
21
  teLogger
@@ -39,7 +39,7 @@ GEM
39
39
  rspec-support (~> 3.12.0)
40
40
  rspec-support (3.12.0)
41
41
  teLogger (0.2.2)
42
- toolrack (0.21.0)
42
+ toolrack (0.22.0)
43
43
  tty-color (0.6.0)
44
44
  tty-command (0.10.1)
45
45
  pastel (~> 0.8)
@@ -1,7 +1,7 @@
1
1
 
2
2
  #require 'rake'
3
3
  require "bundler/gem_tasks"
4
- require "rspec/core/rake_task"
4
+ #require "rspec/core/rake_task"
5
5
  require 'yaml'
6
6
  require_relative 'gemdep'
7
7
 
@@ -36,6 +36,13 @@ module Release
36
36
  if block
37
37
 
38
38
  block.call(:action_start, :relase_dependencies)
39
+
40
+ gemdepInst.development_gem.each do |k,v|
41
+ gemdepInst.infect_gem(v, k, &block)
42
+ block.call(:block_until_dev_gem_done, { name: k, path: v })
43
+ end
44
+
45
+
39
46
  keys = gemdepInst.development_gem.keys
40
47
  loop do
41
48
  begin
@@ -322,7 +329,7 @@ module Release
322
329
  end
323
330
 
324
331
  def method_missing(mtd, *args, &block)
325
- if not @engine.nil? and @engine.respond_to?(mtd)
332
+ if not @engine.nil?
326
333
  @engine.send(mtd, *args, &block)
327
334
  else
328
335
  super
@@ -12,6 +12,8 @@ module Release
12
12
  opts[:ui] = TTY::Prompt.new
13
13
  @inst = Action::GemAction.new(root, opts)
14
14
  @pmt = opts[:tty] || opts[:ui]
15
+ @msgColor = opts[:msgColor] || :yellow
16
+ @discardColor = opts[:discardColor] || false
15
17
  end
16
18
 
17
19
  def exec(&block)
@@ -22,7 +24,58 @@ module Release
22
24
  @inst.release_dependencies do |ops, *args|
23
25
  case ops
24
26
  when :action_start
25
- @pmt.say "\n Release dependencies starting...\n".yellow
27
+ @pmt.say pmsg("\n Release dependencies starting...\n")
28
+
29
+ ## from release_infector
30
+ when :multiple_gemspec
31
+ v = args.first
32
+ @pmt.select(pmsg("\n There are multiple gemspecs found. Please select one to proceed : ")) do |m|
33
+ v.each do |vv|
34
+ m.choice vv, vv
35
+ end
36
+ end
37
+
38
+ when :adding_to_gemspec
39
+ v = args.first
40
+ @pmt.say pmsg("\n Adding release-gem to gemspec '#{v[:gemspec]}'")
41
+
42
+ when :gemspec_updated
43
+ v = args.first
44
+ @pmt.say pmsg("\n Gemspec file of GEM '#{v[:name]}' updated with release-gem gem")
45
+
46
+ when :adding_to_rackfile
47
+ v = args.first
48
+ @pmt.say pmsg("\n Adding require to Rakefile at #{v[:rakefile]}")
49
+
50
+ when :creating_new_rakefile
51
+ v = args.first
52
+ @pmt.say pmsg("\n Creating new Rakefile at #{v[:rakefile]}")
53
+
54
+ when :rakefile_updated
55
+ v = args.first
56
+ @pmt.say pmsg("\n Rakefile '#{v[:rakefile]}' updated!")
57
+
58
+ when :select_terminal
59
+ v = args.first
60
+ @pmt.select(pmsg("\n Please select a terminal for development GEM '#{v[:name]}' release : ")) do |m|
61
+ v[:options].each do |t|
62
+ m.choice t, t
63
+ end
64
+ end
65
+
66
+ when :new_terminal_launching
67
+ v = args.first
68
+ @pmt.say pmsg("\n New terminal lanching for GEM '#{v[:name]}' using terminal '#{v[:terminal]}'")
69
+
70
+ when :new_terminal_launched
71
+ v = args.first
72
+ @pmt.say pmsg("\n New terminal launched for GEM '#{v[:name]}' using terminal '#{v[:terminal]}'")
73
+
74
+ when :block_until_dev_gem_done
75
+ v = args.first
76
+ @pmt.yes? pmsg("\n Development GEM '#{v[:name]}' has separate windows for release. Is it done? ")
77
+
78
+ ### End release_infector
26
79
 
27
80
  when :define_gem_prod_config
28
81
 
@@ -31,7 +84,7 @@ module Release
31
84
 
32
85
  loop do
33
86
 
34
- sel = @pmt.select("\n The following development gems requires configuration. Please select one to configure ".yellow) do |m|
87
+ sel = @pmt.select(pmsg("\n The following development gems requires configuration. Please select one to configure ")) do |m|
35
88
  selections.each do |g|
36
89
  m.choice g, g
37
90
  end
@@ -39,17 +92,17 @@ module Release
39
92
 
40
93
  config[sel] = {} if config[sel].nil?
41
94
 
42
- type = @pmt.select("\n The gem in production will be runtime or development ? ".yellow) do |m|
95
+ type = @pmt.select(pmsg("\n The gem in production will be runtime or development ? ")) do |m|
43
96
  m.choice "Runtime", :runtime
44
97
  m.choice "Development only", :dev
45
98
  end
46
99
 
47
100
  config[sel][:type] = type
48
101
 
49
- ver = @pmt.ask("\n Is there specific version pattern (including the ~>/>/>=/= of gemspec) for the gem in production? (Not mandatory) : ".yellow)
102
+ ver = @pmt.ask(pmsg("\n Is there specific version pattern (including the ~>/>/>=/= of gemspec) for the gem in production? (Not mandatory) : "))
50
103
  config[sel][:version] = ver if not_empty?(ver)
51
104
 
52
- @pmt.puts " ** Done configure for gem #{sel}".yellow
105
+ @pmt.puts pmsg(" ** Done configure for gem #{sel}")
53
106
  selections.delete_if { |v| v == sel }
54
107
  break if selections.length == 0
55
108
 
@@ -58,10 +111,10 @@ module Release
58
111
  config
59
112
 
60
113
  when :development_gem_temporary_promoted
61
- @pmt.puts "\n Development gem(s) temporary promoted to production status".yellow
114
+ @pmt.puts pmsg("\n Development gem(s) temporary promoted to production status")
62
115
 
63
116
  when :no_development_gems_found
64
- @pmt.puts "\n No development gem(s) in used found".yellow
117
+ @pmt.puts pmsg("\n No development gem(s) in used found")
65
118
 
66
119
  end
67
120
  end
@@ -73,7 +126,7 @@ module Release
73
126
  @inst.build do |ops, *args|
74
127
  case ops
75
128
  when :action_start
76
- @pmt.say " Gem building starting...\n".yellow
129
+ @pmt.say pmsg(" Gem building starting...\n")
77
130
  when :select_version
78
131
  preset = false
79
132
  if block
@@ -90,7 +143,7 @@ module Release
90
143
  if preset
91
144
 
92
145
  opts = args.first
93
- res = @pmt.select("\n Please select new gem version : \n".yellow) do |m|
146
+ res = @pmt.select(pmsg("\n Please select new gem version : \n")) do |m|
94
147
  opts[:proposed_next].reverse.each do |v|
95
148
  m.choice v,v
96
149
  end
@@ -103,8 +156,8 @@ module Release
103
156
 
104
157
  if res == :custom
105
158
  loop do
106
- res = @pmt.ask("\n Please provide custom version number for the release : ".yellow,required: true)
107
- confirmed = @pmt.yes?("\n Use version '#{res}'? No to try again")
159
+ res = @pmt.ask(pmsg("\n Please provide custom version number for the release : "),required: true)
160
+ confirmed = @pmt.yes?(pmsg("\n Use version '#{res}'? No to try again"))
108
161
  break if confirmed
109
162
  end
110
163
  end
@@ -128,7 +181,7 @@ module Release
128
181
 
129
182
  if preset
130
183
 
131
- res = @pmt.select("\n There are multiple version file found. Please select which one to update : ".yellow) do |m|
184
+ res = @pmt.select(pmsg("\n There are multiple version file found. Please select which one to update : ")) do |m|
132
185
  opts = args.first
133
186
  opts.each do |f|
134
187
  m.choice f,f
@@ -144,7 +197,7 @@ module Release
144
197
  @selVersion = args.first
145
198
 
146
199
  when :gem_build_successfully
147
- @pmt.puts "\n Gem version '#{args.first}' built successfully".green
200
+ @pmt.puts pmsg("\n Gem version '#{args.first}' built successfully", :green)
148
201
  @inst.register(:selected_version, args.first)
149
202
  [true, args.first]
150
203
  end
@@ -158,7 +211,7 @@ module Release
158
211
  case ops
159
212
  when :multiple_rubygems_account
160
213
  creds = args.first
161
- res = @pmt.select("\n Multiple rubygems account detected. Please select one : ".yellow) do |m|
214
+ res = @pmt.select(pmsg("\n Multiple rubygems account detected. Please select one : ")) do |m|
162
215
  creds.each do |k,v|
163
216
  m.choice k,k
164
217
  end
@@ -173,9 +226,9 @@ module Release
173
226
  st = pargs.first
174
227
  res = pargs[1]
175
228
  if st
176
- @pmt.puts "\n Gem push successful.".green
229
+ @pmt.puts pmsg("\n Gem push successful.", :green)
177
230
  else
178
- @pmt.puts "\n Gem push failed. Error was :\n #{res}".red
231
+ @pmt.puts pmsg("\n Gem push failed. Error was :\n #{res}", :red)
179
232
  end
180
233
  end
181
234
  end
@@ -184,7 +237,7 @@ module Release
184
237
 
185
238
  def install(*args, &block)
186
239
 
187
- sysInst = @pmt.yes?("\n Install release into system? ".yellow)
240
+ sysInst = @pmt.yes?(pmsg("\n Install release into system? "))
188
241
  if sysInst
189
242
  @inst.install(*args)
190
243
  end
@@ -195,6 +248,22 @@ module Release
195
248
  @inst.send(mtd,*args, &block)
196
249
  end
197
250
 
251
+ def pmsg(msg, color = nil)
252
+ if not msg.nil?
253
+ if @discardColor == true
254
+ msg
255
+ else
256
+ if not_empty?(color)
257
+ msg.send(color)
258
+ elsif not_empty?(@msgColor)
259
+ msg.send(@msgColor)
260
+ else
261
+ msg
262
+ end
263
+ end
264
+ end
265
+ end
266
+
198
267
  end
199
268
  end
200
269
  end
@@ -11,6 +11,7 @@ module Release
11
11
 
12
12
  def initialize(root, opts = { })
13
13
  @root = root
14
+ @discardColor = opts[:discardColor] || false
14
15
  @devGems = {}
15
16
  @gemConfig = {}
16
17
  @fileHistory = {}
@@ -82,6 +83,12 @@ module Release
82
83
  @fileHistory.clear
83
84
  end
84
85
 
86
+ def infect_gem(gem_root,name, &block)
87
+ ri = ReleaseInfector.new(gem_root, name)
88
+ ri.infect(&block)
89
+ ri.trigger_release_gem(&block)
90
+ end
91
+
85
92
  private
86
93
  def remove_dev_gem_from_gemfile
87
94
  if has_development_gem?
@@ -0,0 +1,179 @@
1
+
2
+
3
+ module Release
4
+ module Gem
5
+
6
+ class ReleaseInfectorError < StandardError; end
7
+
8
+ #
9
+ # Setup the release-gem into other gem project automatically!
10
+ #
11
+ class ReleaseInfector
12
+ include TR::CondUtils
13
+ include TR::TerminalUtils
14
+
15
+ def initialize(root, name)
16
+ @root = root
17
+ @name = name
18
+ @backupFiles = {}
19
+ end
20
+
21
+ def infect(&block)
22
+ if not is_release_gem_installed?
23
+ add_to_gemspec(&block)
24
+ Bundler.with_clean_env do
25
+ res = `cd #{@root} && bundle`
26
+ end
27
+ end
28
+
29
+ if not is_rakefile_activated?
30
+ activate_rakefile(&block)
31
+ end
32
+ end
33
+
34
+ def trigger_release_gem(&block)
35
+
36
+ block.call(:triggering_release_gem) if block
37
+
38
+ poss = tu_possible_terminal
39
+ raise ReleaseInfectorError, "No possible terminal found" if is_empty?(poss)
40
+
41
+ Bundler.with_clean_env do
42
+
43
+ cmd = "cd #{@root} && rake gem:release"
44
+ terminal = ""
45
+ if block
46
+ terminal = block.call(:select_terminal, name: @name, options: poss)
47
+ terminal = poss.first if is_empty?(terminal)
48
+
49
+ block.call(:new_terminal_launching, name: @name, terminal: terminal)
50
+ tu_new_terminal(terminal, cmd)
51
+ else
52
+ terminal = poss.first
53
+ block.call(:new_terminal_launching, name: @name, terminal: terminal)
54
+ tu_new_terminal(terminal, cmd)
55
+ end
56
+
57
+ block.call(:new_terminal_launched, name: @name, terminal: terminal) if block
58
+
59
+ end
60
+
61
+ end
62
+
63
+ def is_release_gem_installed?
64
+ #Bundler.with_clean_env do
65
+ Bundler.with_unbundled_env do
66
+
67
+ res = `cd #{@root} && bundle 2>&1`
68
+
69
+ puts res
70
+
71
+ if $?.success?
72
+ found = false
73
+ res.each_line do |l|
74
+ if l =~ / release-gem /
75
+ found = true
76
+ break
77
+ end
78
+ end
79
+
80
+ found
81
+ else
82
+ raise ReleaseInfectorError, "Error running bundle in '#{@root}'. Error was :\n#{res}"
83
+ end
84
+
85
+ end
86
+ end # is_release_gem_installed?
87
+
88
+ def add_to_gemspec(&block)
89
+
90
+
91
+ gs = Dir.glob(File.join(@root,"*.gemspec"))
92
+ raise ReleaseInfectorError, "gemspec not found at '#{@root}'" if is_empty?(gs)
93
+
94
+ block.call(:adding_to_gemspec, gemspec: gs) if block
95
+
96
+ if gs.length > 1
97
+ if block
98
+ gs = block.call(:multiple_gemspecs, gs)
99
+ else
100
+ raise ReleaseInfectorError, "There are more than 1 gemspec file found (#{gs.length} found). Since no block to filter out the required one, this will be an error condition"
101
+ end
102
+
103
+ else
104
+ gs = gs.first
105
+ end
106
+
107
+ cont = File.read(gs)
108
+ lastEnd = cont.rindex("end")
109
+
110
+ FileUtils.mv(gs, "#{gs}.bak")
111
+ @backupFiles[gs] = "#{gs}.bak"
112
+
113
+ File.open(gs, "w") do |f|
114
+ f.write cont[0...lastEnd]
115
+ f.puts " spec.add_development_dependency 'release-gem'"
116
+ f.puts "end"
117
+ end
118
+ block.call(:gemspec_updated, name: @name, gemspec: gs )
119
+
120
+ end # add_to_gemspec
121
+
122
+ def activate_rakefile(&block)
123
+
124
+ rf = File.join(@root,"Rakefile")
125
+ if not File.exist?(rf)
126
+ rfCont <<-END
127
+ # frozen_string_literal: true
128
+
129
+ require "bundler/gem_tasks"
130
+ require "rspec/core/rake_task"
131
+
132
+ require "release/gem"
133
+
134
+ RSpec::Core::RakeTask.new(:spec)
135
+
136
+ task default: :spec
137
+ END
138
+ block.call(:creating_new_rakefile, rakefile: rf )
139
+ File.open(rf,"w") do |f|
140
+ f.write rfCont
141
+ end
142
+ else
143
+
144
+ block.call(:adding_to_rakefile, rakefile: rf )
145
+
146
+ cont = File.read(rf)
147
+ FileUtils.mv(rf, "#{rf}.bak")
148
+ @backupFiles[rf] = "#{rf}.bak"
149
+
150
+ File.open(rf,"w") do |f|
151
+ f.puts cont
152
+ f.puts "require 'release/gem'"
153
+ end
154
+
155
+ block.call(:rakefile_updated, name: @name, rakefile: rf) if block
156
+
157
+ end
158
+ end
159
+
160
+ def is_rakefile_activated?
161
+ rf = File.join(@root,"Rakefile")
162
+ if not File.exist?(rf)
163
+ false
164
+ else
165
+ cont = File.read(rf)
166
+ found = false
167
+ cont.each_line do |l|
168
+ if l =~ /require ('|")(release\/gem)("|')/
169
+ found = true
170
+ break
171
+ end
172
+ end
173
+ found
174
+ end
175
+ end
176
+
177
+ end
178
+ end
179
+ end
@@ -42,6 +42,72 @@ module Release
42
42
  instance_eval(&block) if block
43
43
  end
44
44
 
45
+ #
46
+ # Special operation since the gem build will only include files from
47
+ # git ls-files
48
+ #
49
+ def commit_new_files(msg = nil, &block)
50
+
51
+ res = :value
52
+ if block
53
+
54
+ loop do
55
+
56
+ stgDir, stgFiles = @ws.staged_files
57
+ newDir, newFiles = @ws.new_files
58
+
59
+ if is_empty?(newFiles)
60
+ res = :skip
61
+ break
62
+ end
63
+
64
+ newFiles.delete_if { |f| stgFiles.include?(f) }
65
+ newDir.delete_if { |f| stgDir.include?(f) }
66
+
67
+ res = block.call(:select_files_to_commit, { new: { files: newFiles, dirs: newDir }, staged: { files: stgFiles, dirs: stgDir }, vcs: self } )
68
+
69
+ break if res == :skip or res == :done
70
+
71
+ end
72
+
73
+ if res == :done
74
+
75
+ stgDir, stgFiles = @ws.staged_files
76
+ block.call(:staged_elements_of_commit, { files: stgFiles, dirs: stgDir })
77
+
78
+ msg = block.call(:commit_message) if is_empty?(msg)
79
+ raise VcsActionError, "Commit message is empty" if is_empty?(msg)
80
+
81
+ cp "Commit with user message : #{msg}"
82
+ st, res = @ws.commit(msg)
83
+ if st
84
+ block.call(:commit_successful, res) if block
85
+ else
86
+ block.call(:commit_failed, res) if block
87
+ end
88
+ [st, res]
89
+
90
+ end
91
+
92
+
93
+ elsif not_empty?(msg)
94
+
95
+ newDir, newFiles = @ws.new_files
96
+ add_to_staging(*newFiles)
97
+
98
+ cp "Commit with user message : #{msg}"
99
+ st, res = @ws.commit(msg)
100
+ if st
101
+ block.call(:commit_successful, res) if block
102
+ else
103
+ block.call(:commit_failed, res) if block
104
+ end
105
+ [st, res]
106
+
107
+ end
108
+
109
+ end
110
+
45
111
  def commit(msg = nil, &block)
46
112
 
47
113
  res = :value
@@ -57,6 +123,12 @@ module Release
57
123
 
58
124
  modFiles.delete_if { |f| stgFiles.include?(f) }
59
125
  modDir.delete_if { |f| stgDir.include?(f) }
126
+
127
+ newFiles.delete_if { |f| stgFiles.include?(f) }
128
+ newDir.delete_if { |f| stgDir.include?(f) }
129
+
130
+ delFiles.delete_if { |f| stgFiles.include?(f) }
131
+ delDir.delete_if { |f| stgDir.include?(f) }
60
132
 
61
133
  # block should call vcs for add, remove, ignore and other operations
62
134
  res = block.call(:select_files_to_commit, { modified: { files: modFiles, dirs: modDir }, new: { files: newFiles, dirs: newDir }, deleted: { files: delFiles, dirs: delDir }, staged: { files: stgFiles, dirs: stgDir }, vcs: self, counter: counter } )
@@ -12,12 +12,113 @@ module Release
12
12
  opts[:ui] = TTY::Prompt.new
13
13
  @inst = Action::VcsAction.new(root,opts)
14
14
  @prmt = TTY::Prompt.new
15
+ @color = opts[:msgColor] || :yellow
16
+ @discardColor = opts[:discardColor] || false
15
17
  end
16
18
 
17
19
  def exec(&block)
18
20
  instance_eval(&block) if block
19
21
  end
20
22
 
23
+ def commit_new_files(*args, &block)
24
+ res = @inst.commit_new_files do |ops, *args|
25
+
26
+ preset = false
27
+ if block
28
+ res = block.call(ops, *args)
29
+ if res.nil?
30
+ preset = true
31
+ else
32
+ res
33
+ end
34
+ else
35
+ preset = true
36
+ end
37
+
38
+ if preset
39
+
40
+ case ops
41
+ when :select_files_to_commit
42
+ mfiles = args.first
43
+ @prmt.puts pmsg("\n Files already added to staging : ")
44
+ mfiles[:staged].each do |k,v|
45
+ v.each do |vv|
46
+ @prmt.puts " * #{vv}"
47
+ end
48
+ end
49
+
50
+ @prmt.puts ""
51
+
52
+ sel = @prmt.multi_select pmsg("\n Following are new files that could be added to version control : ") do |m|
53
+
54
+ mfiles[:new].each do |k,v|
55
+ v.each do |vv|
56
+ m.choice vv, vv.path
57
+ end
58
+ end
59
+
60
+ m.choice "Skip", :skip #if mfiles[:counter] == 0
61
+ m.choice "Done", :done
62
+ m.choice "Abort", :abort
63
+ end
64
+
65
+ if sel.include?(:abort)
66
+ raise Release::Gem::Abort, "User aborted"
67
+ elsif sel.include?(:skip)
68
+ :skip
69
+ else
70
+ res = :done if sel.include?(:done)
71
+ s = sel.clone
72
+ s.delete_if { |e| e == :done }
73
+ if not_empty?(s)
74
+ st, cres = add_to_staging(*s) if not_empty?(s)
75
+ if st
76
+ @prmt.puts pmsg("\n Files added successfully", :green)
77
+ else
78
+ @prmt.puts pmsg("\n Files failed to be added. Message was : #{cres}", :red)
79
+ end
80
+ end
81
+
82
+ res
83
+
84
+ end
85
+
86
+ when :commit_message
87
+ msg = ""
88
+ loop do
89
+ msg = @prmt.ask(pmsg("\n Commit message : "), required: true)
90
+ confirm = @prmt.yes?(pmsg(" Commit message : #{msg}\n Proceed? No to provide a new commit message "))
91
+ if confirm
92
+ break
93
+ end
94
+ end
95
+
96
+ msg
97
+
98
+ when :staged_elements_of_commit
99
+
100
+ elements = args.first
101
+ @prmt.puts pmsg("\n Following new files/directories shall be committed in this session : ")
102
+ elements.each do |k,v|
103
+ v.each do |vv|
104
+ @prmt.puts " * #{vv}"
105
+ end
106
+ end
107
+
108
+ when :commit_successful
109
+ @prmt.puts pmsg("\n Changes committed",:green)
110
+ @prmt.puts args.first
111
+
112
+ when :commit_failed
113
+ @prmt.puts pmsg("\n Changes failed to be committed. Error was : #{args.first}")
114
+
115
+ end
116
+ end
117
+ end # commit_new_files block
118
+
119
+ end # commit_new_files
120
+
121
+
21
122
  def commit(*args, &block)
22
123
  res = @inst.commit do |ops, *args|
23
124
 
@@ -38,7 +139,7 @@ module Release
38
139
  case ops
39
140
  when :select_files_to_commit
40
141
  mfiles = args.first
41
- @prmt.puts "\n Files already added to staging : ".yellow
142
+ @prmt.puts pmsg("\n Files already added to staging : ")
42
143
  mfiles[:staged].each do |k,v|
43
144
  v.each do |vv|
44
145
  @prmt.puts " * #{vv}"
@@ -47,7 +148,7 @@ module Release
47
148
 
48
149
  @prmt.puts ""
49
150
 
50
- sel = @prmt.multi_select "\n Following are files that could be added to version control : ".yellow do |m|
151
+ sel = @prmt.multi_select pmsg("\n Following are files that could be added to version control : ") do |m|
51
152
 
52
153
  [:modified, :new, :deleted].each do |cat|
53
154
  mfiles[cat].each do |k,v|
@@ -58,7 +159,7 @@ module Release
58
159
 
59
160
  end
60
161
 
61
- m.choice "Skip", :skip if mfiles[:counter] == 0
162
+ m.choice "Skip", :skip #if mfiles[:counter] == 0
62
163
  m.choice "Done", :done
63
164
  m.choice "Abort", :abort
64
165
  end
@@ -74,9 +175,9 @@ module Release
74
175
  if not_empty?(s)
75
176
  st, cres = add_to_staging(*s) if not_empty?(s)
76
177
  if st
77
- @prmt.puts "\n Files added successfully".green
178
+ @prmt.puts pmsg("\n Files added successfully", :green)
78
179
  else
79
- @prmt.puts "\n Files failed to be added. Message was : #{cres}".red
180
+ @prmt.puts pmsg("\n Files failed to be added. Message was : #{cres}", :red)
80
181
  end
81
182
  end
82
183
 
@@ -87,8 +188,8 @@ module Release
87
188
  when :commit_message
88
189
  msg = ""
89
190
  loop do
90
- msg = @prmt.ask("\n Commit message : ".yellow, required: true)
91
- confirm = @prmt.yes?(" Commit message : #{msg}\n Proceed? No to provide a new commit message ".yellow)
191
+ msg = @prmt.ask(pmsg("\n Commit message : "), required: true)
192
+ confirm = @prmt.yes?(pmsg(" Commit message : #{msg}\n Proceed? No to provide a new commit message "))
92
193
  if confirm
93
194
  break
94
195
  end
@@ -99,7 +200,7 @@ module Release
99
200
  when :staged_elements_of_commit
100
201
 
101
202
  elements = args.first
102
- @prmt.puts "\n Following files/directories shall be committed in this session : ".yellow
203
+ @prmt.puts pmsg("\n Following files/directories shall be committed in this session : ")
103
204
  elements.each do |k,v|
104
205
  v.each do |vv|
105
206
  @prmt.puts " * #{vv}"
@@ -107,11 +208,11 @@ module Release
107
208
  end
108
209
 
109
210
  when :commit_successful
110
- @prmt.puts "\n Changes committed".green
211
+ @prmt.puts pmsg("\n Changes committed",:green)
111
212
  @prmt.puts args.first
112
213
 
113
214
  when :commit_failed
114
- @prmt.puts "\n Changes failed to be committed. Error was : #{args.first}"
215
+ @prmt.puts pmsg("\n Changes failed to be committed. Error was : #{args.first}")
115
216
 
116
217
  end
117
218
  end
@@ -139,17 +240,17 @@ module Release
139
240
 
140
241
  case ops
141
242
  when :tag_message
142
- @prmt.ask("\n Please provide message for the tag : ".yellow, value: "Auto tagging by gem-release gem during releasing version #{@selVer}", required: true)
243
+ @prmt.ask(pmsg("\n Please provide message for the tag : "), value: "Auto tagging by gem-release gem during releasing version #{@selVer}", required: true)
143
244
 
144
245
  when :tagging_success
145
- @prmt.puts "\n Tagging of source code is successful.".green
246
+ @prmt.puts pmsg("\n Tagging of source code is successful.", :green)
146
247
  @prmt.puts args.first
147
248
 
148
249
  when :tagging_failed
149
- @prmt.puts "\n Tagging of source code failed. Error was : #{args.first}".red
250
+ @prmt.puts pmsg("\n Tagging of source code failed. Error was : #{args.first}", :red)
150
251
 
151
252
  when :no_tagging_required
152
- @prmt.puts "\n No tagging required. Source head is the tagged item ".green
253
+ @prmt.puts pmsg("\n No tagging required. Source head is the tagged item ", :green)
153
254
 
154
255
  end
155
256
  end # preset ?
@@ -178,7 +279,7 @@ module Release
178
279
  case ops
179
280
  when :select_remote
180
281
  val = args.first
181
- sel = @prmt.select("\n Please select one of the remote config below : ") do |m|
282
+ sel = @prmt.select(pmsg("\n Please select one of the remote config below : ")) do |m|
182
283
  val.each do |k,v|
183
284
  m.choice k, k
184
285
  end
@@ -190,14 +291,14 @@ module Release
190
291
  sel
191
292
 
192
293
  when :no_remote_repos_defined
193
- add = @prmt.yes?("\n No remote configuration defined. Add one now?")
294
+ add = @prmt.yes?(pmsg("\n No remote configuration defined. Add one now?"))
194
295
  if add
195
- name = @prmt.ask("\n Name of the repository : ", value: "origin", required: true)
196
- url = @prmt.ask("\n URL of the repository : ", required: true)
296
+ name = @prmt.ask(pmsg("\n Name of the repository : "), value: "origin", required: true)
297
+ url = @prmt.ask(pmsg(" URL of the repository : "), required: true)
197
298
 
198
299
  st, res = add_remote(name, url)
199
300
  if st
200
- @prmt.puts "\n Remote configuration added successfully".green
301
+ @prmt.puts pmsg("\n Remote configuration added successfully",:green)
201
302
  name
202
303
  else
203
304
  raise Release::Gem::Abort, "Failed to add remote configuration. Error was : #{res}"
@@ -205,15 +306,15 @@ module Release
205
306
  end
206
307
 
207
308
  when :push_successful
208
- @prmt.puts "\n Push success!".green
309
+ @prmt.puts pmsg("\n Push success!",:green)
209
310
  @prmt.puts args.first
210
311
 
211
312
  when :push_failed
212
- @prmt.puts "\nPush failed. Error was : #{args.first}".red
313
+ @prmt.puts pmsg("\nPush failed. Error was : #{args.first}",:red)
213
314
 
214
315
  when :no_changes_to_push
215
316
  val = args.first
216
- @prmt.puts "\n Local is in sync with remote (#{val[:remote]}/#{val[:branch]}). Push is not required. "
317
+ @prmt.puts pmsg("\n Local is in sync with remote (#{val[:remote]}/#{val[:branch]}). Push is not required. ")
217
318
  end
218
319
  end
219
320
 
@@ -225,6 +326,22 @@ module Release
225
326
  @inst.send(mtd, *args, &block)
226
327
  end
227
328
 
329
+ def pmsg(msg, color = nil)
330
+ if not msg.nil?
331
+ if @discardColor == true
332
+ msg
333
+ else
334
+ if not_empty?(color)
335
+ msg.send(color)
336
+ elsif not_empty?(@msgColor)
337
+ msg.send(@msgColor)
338
+ else
339
+ msg
340
+ end
341
+ end
342
+ end
343
+ end
344
+
228
345
  end
229
346
  end
230
347
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Release
4
4
  module Gem
5
- VERSION = "0.1.4"
5
+ VERSION = "0.1.6"
6
6
  end
7
7
  end
data/lib/release/gem.rb CHANGED
@@ -10,6 +10,7 @@ require 'tty/command'
10
10
 
11
11
  require_relative "gem/version"
12
12
  require_relative 'gem/gem_engine'
13
+ require_relative 'gem/release_infector'
13
14
 
14
15
 
15
16
  module Release
@@ -15,6 +15,8 @@ Release::Gem.engine(:gem, root: Dir.getwd) do
15
15
  # step 2 : check dependency
16
16
  release_dependencies
17
17
 
18
+ vcs_commit_new_files
19
+
18
20
  # step 3 : build the gem
19
21
  st, ver = build
20
22
 
@@ -47,7 +49,7 @@ Release::Gem.engine(:gem, root: Dir.getwd) do
47
49
  rescue TTY::Reader::InputInterrupt => ex
48
50
  rescue Exception => ex
49
51
  STDERR.puts "\n -- Error thrown. Message was : #{ex.message}".red
50
- STDERR.puts "\n#{ex.backtrace.join("\n")}" if ENV["RELGEM_DEBUG"] == true
52
+ STDERR.puts "\n#{ex.backtrace.join("\n")}" if ENV["RELGEM_DEBUG"] == "true"
51
53
  ensure
52
54
  gem_dependency_restore
53
55
  end
@@ -59,6 +59,87 @@ Release::Gem.engine(:gem, root: Dir.getwd, ui: STDOUT) do
59
59
  end
60
60
  end
61
61
 
62
+ ## Check in NEW file first or else the gem build will not pick up by the git ls-files
63
+ vcs_commit_new_files do |ops, *args|
64
+
65
+ case ops
66
+ when :select_files_to_commit
67
+ mfiles = args.first
68
+ pmt.puts "\n Files already added to staging : ".yellow
69
+ mfiles[:staged].each do |k,v|
70
+ v.each do |vv|
71
+ pmt.puts " * #{vv}"
72
+ end
73
+ end
74
+
75
+ pmt.puts ""
76
+
77
+ sel = pmt.multi_select "\n Following are new files that could be added to version control : ".yellow do |m|
78
+
79
+ [:modified, :new, :deleted].each do |cat|
80
+ mfiles[cat].each do |k,v|
81
+ v.each do |vv|
82
+ m.choice vv, vv.path
83
+ end
84
+ end
85
+
86
+ end
87
+
88
+ m.choice "Skip", :skip if mfiles[:counter] == 0
89
+ m.choice "Done", :done
90
+ m.choice "Abort", :abort
91
+ end
92
+
93
+ if sel.include?(:abort)
94
+ raise Release::Gem::Abort, "User aborted"
95
+ elsif sel.include?(:skip)
96
+ :skip
97
+ else
98
+ res = :done if sel.include?(:done)
99
+ s = sel.clone
100
+ s.delete_if { |e| e == :done }
101
+ if not_empty?(s)
102
+ st, cres = add_to_staging(*s) if not_empty?(s)
103
+ if st
104
+ pmt.puts "\n Files added successfully".green
105
+ else
106
+ pmt.puts "\n Files failed to be added. Message was : #{cres}".red
107
+ end
108
+ end
109
+
110
+ res
111
+ end
112
+
113
+ when :commit_message
114
+ msg = ""
115
+ loop do
116
+ msg = pmt.ask("\n Commit message : ".yellow, required: true)
117
+ confirm = pmt.yes?(" Commit message : #{msg}\n Proceed? No to provide a new commit message ".yellow)
118
+ if confirm
119
+ break
120
+ end
121
+ end
122
+ msg
123
+
124
+ when :staged_elements_of_commit
125
+ elements = args.first
126
+ pmt.puts "\n Following files/directories shall be committed in this session : ".yellow
127
+ elements.each do |k,v|
128
+ v.each do |vv|
129
+ pmt.puts " * #{vv}"
130
+ end
131
+ end
132
+
133
+ when :commit_successful
134
+ pmt.puts "\n Changes committed".green
135
+
136
+ when :commit_failed
137
+ pmt.puts "\n Changes failed to be committed. Error was : #{args.first}"
138
+
139
+ end
140
+
141
+ end
142
+
62
143
  # step 3 : build the gem
63
144
  st, ver = build do |ops, *args|
64
145
  case ops
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: release-gem
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris
@@ -126,6 +126,7 @@ files:
126
126
  - lib/release/gem/gem_cli_action.rb
127
127
  - lib/release/gem/gem_engine.rb
128
128
  - lib/release/gem/gemdep.rb
129
+ - lib/release/gem/release_infector.rb
129
130
  - lib/release/gem/vcs_action.rb
130
131
  - lib/release/gem/vcs_cli_action.rb
131
132
  - lib/release/gem/version.rb