release-gem 0.1.4 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
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