release-gem 0.1.30 → 0.3.0

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