release-gem 0.1.30 → 0.3.0

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.
@@ -1,16 +1,20 @@
1
1
 
2
2
 
3
3
  require 'tty/prompt'
4
+
4
5
  require_relative 'vcs_action'
6
+ require_relative 'cli'
5
7
 
6
8
  module Release
7
9
  module Gem
8
10
  module Cli
9
11
  class VcsAction
12
+
10
13
  def initialize(root, opts = { })
11
14
  opts = {} if opts.nil?
12
15
  opts[:ui] = TTY::Prompt.new
13
16
  @inst = Action::VcsAction.new(root,opts)
17
+ @root = root
14
18
  @prmt = TTY::Prompt.new
15
19
  @color = opts[:msgColor] || :yellow
16
20
  @discardColor = opts[:discardColor] || false
@@ -24,14 +28,39 @@ module Release
24
28
 
25
29
  loop do
26
30
 
27
- ops = @prmt.select(pmsg("\n Please select a VCS workspace operation : ")) do |m|
31
+ Cli.cls
32
+ Cli.print_header(@root)
33
+
34
+ # workspace overview
35
+ overview
36
+
37
+ ops = @prmt.select(pmsg("\n Please select a VCS workspace operation : "), filter: true) do |m|
38
+
39
+ if @inst.has_staged_files? or @inst.has_modified_files? or @inst.has_deleted_files?
40
+ m.choice "Commit all changes", :commit_all
41
+ end
42
+
43
+ if @inst.has_staged_files?
44
+ m.choice "Commit staged changes", :commit
45
+ end
46
+
47
+ if @inst.has_new_files?
48
+ m.choice "Add", :add
49
+ m.choice "Ignore a file", :ignore
50
+ end
51
+
52
+ if @inst.has_staged_files?
53
+ m.choice "Remove staged file", :remove_staged
54
+ end
55
+
56
+ if @inst.has_modified_files?
57
+ m.choice "Diff a file", :diff
58
+ end
59
+
60
+ if @inst.has_staged_files? or @inst.has_modified_files? or @inst.has_deleted_files? or @inst.has_new_files?
61
+ m.choice "Delete file", :del
62
+ end
28
63
 
29
- m.choice "Add", :add
30
- m.choice "Ignore", :ignore
31
- m.choice "Diff", :diff
32
- m.choice "Remove staged file", :remove_staged
33
- m.choice "Delete file", :del
34
- m.choice "Commit", :commit
35
64
  m.choice "Done", :done
36
65
  m.choice "Abort", :abort
37
66
 
@@ -53,6 +82,9 @@ module Release
53
82
  when :commit
54
83
  commit
55
84
  break
85
+ when :commit_all
86
+ commit_all
87
+ break
56
88
  when :done
57
89
  break
58
90
  end
@@ -61,6 +93,14 @@ module Release
61
93
 
62
94
  end
63
95
 
96
+ def overview
97
+ @inst.overview do |ops, val|
98
+
99
+ print_workspace_items(val)
100
+
101
+ end
102
+ end
103
+
64
104
  def add(*input, &block)
65
105
  @inst.add do |ops, *args|
66
106
  preset = false
@@ -79,13 +119,17 @@ module Release
79
119
  case ops
80
120
  when :select_files_to_add
81
121
 
122
+ Cli.cls
123
+ Cli.print_header(@root)
82
124
  mfiles = args.first
83
- @prmt.puts pmsg("\n Files already added to staging : ")
84
- mfiles[:staged].each do |k,v|
85
- v.each do |vv|
86
- @prmt.puts " * #{vv}"
87
- end
88
- end
125
+ print_workspace_items(mfiles)
126
+
127
+ #@prmt.puts pmsg("\n Files already added to staging : ")
128
+ #mfiles[:staged].each do |k,v|
129
+ # v.each do |vv|
130
+ # @prmt.puts " * #{vv}"
131
+ # end
132
+ #end
89
133
 
90
134
  @prmt.puts ""
91
135
  res = []
@@ -97,13 +141,12 @@ module Release
97
141
  end
98
142
  end
99
143
 
100
- sel = @prmt.multi_select pmsg("\n Following are files that could be added to version control : ") do |m|
144
+ sel = @prmt.multi_select(pmsg("\n Following are files that could be added to version control : "), filter: true) do |m|
101
145
 
102
146
  res.sort.each do |f|
103
147
  m.choice f, f.path
104
148
  end
105
149
 
106
- m.choice "Done", :done
107
150
  m.choice "Abort", :abort
108
151
  end
109
152
 
@@ -156,13 +199,12 @@ module Release
156
199
  end
157
200
  end
158
201
 
159
- sel = @prmt.multi_select pmsg("\n Select files for diff operation : ") do |m|
202
+ sel = @prmt.multi_select(pmsg("\n Select files for diff operation : "), filter: true) do |m|
160
203
 
161
204
  res.sort.each do |f|
162
205
  m.choice f, f.path
163
206
  end
164
207
 
165
- m.choice "Done", :done
166
208
  m.choice "Abort", :abort
167
209
  end
168
210
 
@@ -175,7 +217,9 @@ module Release
175
217
  when :diff_file_result
176
218
  v = args.first
177
219
  @prmt.puts "Diff result for file '#{v[:file]}'"
178
- puts v[:output].light_blue
220
+ puts pastel.bright_blue(v[:output])
221
+ puts ""
222
+ puts pastel.inverse("[Enter to close]")
179
223
  STDIN.gets
180
224
 
181
225
  when :diff_file_error
@@ -208,14 +252,12 @@ module Release
208
252
  when :select_files_to_ignore
209
253
 
210
254
  mfiles = args.first
211
- sel = @prmt.multi_select pmsg("\n Following are files that could be ignored : ") do |m|
255
+ sel = @prmt.multi_select(pmsg("\n Following are files that could be ignored : "), filter: true) do |m|
212
256
 
213
257
  mfiles[:files].sort.each do |v|
214
258
  m.choice v, v.path
215
259
  end
216
260
 
217
-
218
- m.choice "Done", :done
219
261
  m.choice "Abort", :abort
220
262
  end
221
263
 
@@ -260,14 +302,12 @@ module Release
260
302
 
261
303
  mfiles = args.first
262
304
 
263
- sel = @prmt.multi_select pmsg("\n Following are files that could be removed from staging : ") do |m|
305
+ sel = @prmt.multi_select(pmsg("\n Following are files that could be removed from staging : "), filter: true) do |m|
264
306
 
265
307
  mfiles[:files].sort.each do |v|
266
308
  m.choice v, v.path
267
309
  end
268
310
 
269
-
270
- m.choice "Done", :done
271
311
  m.choice "Abort", :abort
272
312
  end
273
313
 
@@ -325,7 +365,7 @@ module Release
325
365
  end
326
366
 
327
367
 
328
- sel = @prmt.multi_select pmsg("\n Following are files that could be deleted : ") do |m|
368
+ sel = @prmt.multi_select(pmsg("\n Following are files that could be deleted : "), filter: true) do |m|
329
369
  files.sort do |f|
330
370
  m.choice f, f
331
371
  end
@@ -370,9 +410,42 @@ module Release
370
410
 
371
411
  end # delete_file
372
412
 
413
+ def commit_all(*args, &block)
414
+ st, res = @inst.commit_all do |ops, *args|
415
+ case ops
416
+ when :commit_message
417
+
418
+ mfiles = args.first
419
+ @prmt.puts pmsg("\n Files eligible to be committed : ")
420
+ [:staged, :modified, :deleted].each do |cat|
421
+ mfiles[cat].each do |k,v|
422
+ v.each do |vv|
423
+ @prmt.puts pastel.magenta(" #{vv}")
424
+ end
425
+ end
426
+
427
+ end
428
+
429
+ msg = ""
430
+ loop do
431
+ msg = @prmt.ask(pmsg("\n Commit message : "), required: true)
432
+ confirm = @prmt.yes?(pmsg(" Commit message : #{msg}\n Proceed? No to provide a new commit message "))
433
+ if confirm
434
+ break
435
+ end
436
+ end
437
+
438
+ msg
439
+ end
440
+
441
+ end
373
442
 
443
+ res
444
+
445
+ end
374
446
 
375
447
  def commit(*args, &block)
448
+
376
449
  res = @inst.commit do |ops, *args|
377
450
 
378
451
  preset = false
@@ -391,58 +464,48 @@ module Release
391
464
 
392
465
  case ops
393
466
  when :select_files_to_commit
467
+
394
468
  mfiles = args.first
395
- @prmt.puts pmsg("\n Files already added to staging : ")
396
- mfiles[:staged].each do |k,v|
397
- v.each do |vv|
398
- @prmt.puts " * #{vv}"
399
- end
400
- end
469
+ print_workspace_items(mfiles)
470
+
471
+ #@prmt.puts pmsg("\n Files already added to staging : ")
472
+ #mfiles[:staged].each do |k,v|
473
+ # v.each do |vv|
474
+ # @prmt.puts " * #{vv}"
475
+ # end
476
+ #end
401
477
 
402
- @prmt.puts ""
478
+ #@prmt.puts ""
403
479
 
404
480
  files = []
405
481
  [:modified, :new, :deleted].each do |cat|
406
482
  mfiles[cat].each do |k,v|
407
483
  v.each do |vv|
408
484
  files << vv
409
- #m.choice vv, vv.path
410
485
  end
411
486
  end
412
487
 
413
488
  end
414
489
 
415
-
416
- sel = @prmt.multi_select pmsg("\n Following are files that could be added to version control : ") do |m|
490
+ sel = @prmt.multi_select(pmsg("\n Following are files that could be added to version control : "), filter: true) do |m|
417
491
 
418
492
  files.sort.each do |f|
419
493
  m.choice f, f.path
420
494
  end
421
495
 
422
496
  m.choice "Skip", :skip #if mfiles[:counter] == 0
423
- m.choice "Done", :done
424
497
  m.choice "Abort", :abort
425
498
  end
426
499
 
427
500
  if sel.include?(:abort)
428
501
  raise Release::Gem::Abort, "User aborted"
429
- elsif sel.include?(:skip)
430
- :skip
431
- else
432
- res = :done if sel.include?(:done)
433
- s = sel.clone
434
- s.delete_if { |e| e == :done }
435
- if not_empty?(s)
436
- st, cres = add_to_staging(*s) if not_empty?(s)
437
- if st
438
- @prmt.puts pmsg("\n Files added successfully", :green)
439
- else
440
- @prmt.puts pmsg("\n Files failed to be added. Message was : #{cres}", :red)
441
- end
442
- end
443
502
 
444
- res
503
+ elsif sel.include?(:skip)
504
+ []
445
505
 
506
+ else
507
+ # done
508
+ sel
446
509
  end
447
510
 
448
511
  when :commit_message
@@ -542,7 +605,7 @@ module Release
542
605
  case ops
543
606
  when :select_remote
544
607
  val = args.first
545
- sel = @prmt.select(pmsg("\n Please select one of the remote config below : ")) do |m|
608
+ sel = @prmt.select(pmsg("\n Please select one of the remote config below : "), filter: true) do |m|
546
609
  val.each do |k,v|
547
610
  m.choice "#{k} [#{v["push"]}]", k
548
611
  end
@@ -566,6 +629,11 @@ module Release
566
629
  else
567
630
  raise Release::Gem::Abort, "Failed to add remote configuration. Error was : #{res}"
568
631
  end
632
+
633
+ else
634
+ # no add... cannot sing already so exit
635
+ @prmt.puts pmsg("\n No remote configuration defined. Push operation skipped.", :green)
636
+
569
637
  end
570
638
 
571
639
  when :push_successful
@@ -595,7 +663,8 @@ module Release
595
663
  msg
596
664
  else
597
665
  if not_empty?(color)
598
- msg.send(color)
666
+ pastel.send(color, msg)
667
+ #msg.send(color)
599
668
  elsif not_empty?(@msgColor)
600
669
  msg.send(@msgColor)
601
670
  else
@@ -605,6 +674,43 @@ module Release
605
674
  end
606
675
  end
607
676
 
677
+ def print_workspace_items(itm, opts= {})
678
+
679
+ opts = {} if opts.nil?
680
+ title = opts[:title] || "Workspace Status : "
681
+ @prmt.puts pmsg(" #{title}")
682
+
683
+ mfiles = itm
684
+
685
+ mfiles[:staged].each do |k,v|
686
+ v.each do |vv|
687
+ @prmt.puts pastel.on_yellow(" * #{vv}")
688
+ end
689
+ end
690
+
691
+ @prmt.puts ""
692
+ res = []
693
+ [:modified, :deleted, :new].each do |cat|
694
+ mfiles[cat].each do |k,v|
695
+ v.each do |vv|
696
+ case cat
697
+ when :new
698
+ @prmt.puts vv
699
+ when :modified
700
+ @prmt.puts pastel.bright_yellow(vv)
701
+ when :deleted
702
+ @prmt.puts pastel.strikethrough(vv)
703
+ end
704
+ end
705
+ end
706
+ end
707
+
708
+ end # print_workspace_items
709
+
710
+ def pastel
711
+ Gem.pastel
712
+ end
713
+
608
714
  end
609
715
  end
610
716
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Release
4
4
  module Gem
5
- VERSION = "0.1.30"
5
+ VERSION = "0.3.0"
6
6
  end
7
7
  end
data/lib/release/gem.rb CHANGED
@@ -6,21 +6,24 @@ require 'teLogger'
6
6
  require 'tty/prompt'
7
7
  require 'colorize'
8
8
  require 'tty/command'
9
-
9
+ require 'pastel'
10
10
 
11
11
  require_relative "gem/version"
12
12
  require_relative 'gem/gem_engine'
13
13
  require_relative 'gem/release_infector'
14
14
 
15
+ require_relative 'gem/cli'
15
16
 
16
17
  module Release
17
18
  module Gem
19
+ include TR::CondUtils
20
+
18
21
  class Error < StandardError; end
19
22
  class Abort < StandardError; end
20
23
  # Your code goes here...
21
24
 
22
25
  def self.q(msg)
23
- "\n #{msg}\n".yellow
26
+ pastel.yellow("\n #{msg}\n")
24
27
  end
25
28
 
26
29
  def self.engine(eng, *args, &block)
@@ -44,14 +47,44 @@ module Release
44
47
  dt.strftime("%d %b %Y (%a), %H:%M:%S:%L")
45
48
  end
46
49
 
47
- def self.logger
50
+ def self.diff_only(a1, a2)
51
+ Set.new(a1)^a2
52
+ end
53
+
54
+ def self.logger(tag = nil, &block)
48
55
  if @_logger.nil?
49
- @_logger = TeLogger::Tlogger.new
50
- @_logger.tag = :gem_rel
56
+ if ENV['RELGEM_LOG_TO_STDOUT'] == "true"
57
+ @_logger = TeLogger::Tlogger.new
58
+ else
59
+ @_logger = TeLogger::Tlogger.new("relgem.log",5, 5*1024*1024)
60
+ end
51
61
  end
52
- @_logger
53
- end
54
62
 
63
+ if block
64
+ if not_empty?(tag)
65
+ @_logger.with_tag(tag, &block)
66
+ else
67
+ @_logger.with_tag(@_logger.tag, &block)
68
+ end
69
+ else
70
+ if is_empty?(tag)
71
+ @_logger.tag = :rel_gem
72
+ @_logger
73
+ else
74
+ # no block but tag is given? hmm
75
+ @_logger.tag = tag
76
+ @_logger
77
+ end
78
+ end
79
+
80
+ end # logger
81
+
82
+ def self.pastel
83
+ if @_pastel.nil?
84
+ @_pastel = Pastel.new
85
+ end
86
+ @_pastel
87
+ end
55
88
 
56
89
  end
57
90
  end
@@ -2,10 +2,13 @@
2
2
 
3
3
  require 'release/gem'
4
4
 
5
- puts "\n Standard GEM CLI release flow version #{Release::Gem::VERSION}".yellow
6
- puts " Current location : #{Dir.getwd}\n".yellow
5
+ ARGV.delete_if { |e| e == "gem:release" }
6
+ path = ARGV.first || Dir.getwd
7
+ path = File.expand_path(path)
7
8
 
8
- Release::Gem.engine(:gem, root: Dir.getwd) do
9
+ Release::Gem::Cli.print_header(path)
10
+
11
+ Release::Gem.engine(:gem, root: path) do
9
12
 
10
13
  begin
11
14
  # step 1 : run test
metadata CHANGED
@@ -1,99 +1,113 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: release-gem
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.30
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-10-01 00:00:00.000000000 Z
11
+ date: 2023-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: toolrack
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '0.23'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '0.23'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: teLogger
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '0.2'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '0.2'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: tty-prompt
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '0.23'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '0.23'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: colorize
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '1.1'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '1.1'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: tty-command
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: '0.10'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: '0.10'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pastel
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.8'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.8'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: git_cli
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - ">="
101
+ - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: '0'
103
+ version: '0.13'
90
104
  type: :runtime
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - ">="
108
+ - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: '0'
110
+ version: '0.13'
97
111
  description: ''
98
112
  email:
99
113
  - chris@antrapol.com
@@ -110,6 +124,7 @@ files:
110
124
  - exe/release-gem-infect
111
125
  - lib/release/Rakefile
112
126
  - lib/release/gem.rb
127
+ - lib/release/gem/cli.rb
113
128
  - lib/release/gem/gem_action.rb
114
129
  - lib/release/gem/gem_cli_action.rb
115
130
  - lib/release/gem/gem_engine.rb