squared 0.8.5 → 0.9.0.pre1

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.
@@ -236,10 +236,10 @@ module Squared
236
236
  File.foreach(rakefile) do |line|
237
237
  next unless line.match?(%r{\brequire\s+(["'])bundler/gem_tasks\1})
238
238
 
239
- cmd = bundle_output('exec rake').to_s
240
- @output[0] = "#{cmd} build"
241
- @copy = "#{cmd} install"
242
- @clean = "#{cmd} clean" if @clean.nil?
239
+ cmd = "#{bundle_output('exec rake')} %s"
240
+ @output[0] = cmd % 'build'
241
+ @copy = cmd % 'install'
242
+ @clean = cmd % 'clean' if @clean.nil?
243
243
  break
244
244
  end
245
245
  rescue => e
@@ -329,7 +329,7 @@ module Squared
329
329
  opts = args.to_a
330
330
  cmd = opts.delete('::')
331
331
  if (n = opts.index('c'))
332
- args = opts.slice!(n.succ..-1)
332
+ args = opts.slice!(n.succ..)
333
333
  else
334
334
  file = opts.shift
335
335
  args = []
@@ -459,11 +459,13 @@ module Squared
459
459
  when :build, :push, :exec, :update
460
460
  format_desc(action, flag, 'opts*', after: case flag
461
461
  when :exec then 'command,args*'
462
- when :push then 'file/:'
462
+ when :push then 'file/:,d/dry-run?'
463
463
  when :update then 'name*'
464
464
  end)
465
465
  task flag do |_, args|
466
- gem(flag, opts: args.to_a, banner: true)
466
+ opts = args.to_a
467
+ filter = { dryrun: true } if flag == :push && has_value!(opts, 'd', 'dry-run')
468
+ gem(flag, opts: opts, banner: true, filter: filter)
467
469
  end
468
470
  when :install, :uninstall, :pristine
469
471
  format_desc(action, flag, 'opts*', after: flag == :pristine ? 'name*|name?@version' : 'name*')
@@ -570,13 +572,18 @@ module Squared
570
572
  else
571
573
  %w[## ;]
572
574
  end
573
- msg = if Prompt.reline.respond_to?(:readmultiline)
574
- 'ruby>'
575
- else
576
- multiline = Array(multiline)
577
- 'Enter script'
578
- end
579
- command = ENV['RUBY_E'] || readline(msg, force: true, multiline: multiline)
575
+ unless (command = ENV['RUBY_E'])
576
+ command = if Prompt.reline.respond_to?(:readmultiline)
577
+ require 'ripper'
578
+ readline('ruby>', force: true, multiline: multiline) do |code|
579
+ next if code.strip.empty? || !Ripper.sexp(code)
580
+
581
+ Array(multiline).any? { |s| code.split.last.match?(/(?<!#{s[-1]})#{s}$/) }
582
+ end
583
+ else
584
+ readline('Enter script', force: true, multiline: Array(multiline))
585
+ end
586
+ end
580
587
  ruby(flag, opts: args.to_a, command: command)
581
588
  end
582
589
  when :version
@@ -699,7 +706,7 @@ module Squared
699
706
  .lines
700
707
  .map { |line| line.sub(/#.*$/, '').strip }
701
708
  .reject(&:empty?)
702
- .yield_self do |lines|
709
+ .then do |lines|
703
710
  target = lines.find { |line| line.include?(tool) }
704
711
  target ? [target] : lines
705
712
  end
@@ -786,7 +793,7 @@ module Squared
786
793
  when '1', 'true' then nil
787
794
  else
788
795
  if val.start_with?('~')
789
- val = File.join(Dir.home, val == '~' ? '.bundle' : val[1..-1])
796
+ val = File.join(Dir.home, val == '~' ? '.bundle' : val[1..])
790
797
  if prod?
791
798
  config_set('binstubs', shell_quote(val), global: true)
792
799
  val = nil
@@ -976,8 +983,9 @@ module Squared
976
983
  if found > 0
977
984
  unless Array(items).empty?
978
985
  gems = if se
979
- choice('Select a package', items.map(&:first),
980
- multiple: true, force: false, index: true, border: true).map { |n| items[n.pred].last }
986
+ choice('Select a package', items.map(&:first), multiple: true, force: false, index: true,
987
+ border: true, **parse_select)
988
+ .map { |n| items[n.pred].last }
981
989
  else
982
990
  items.map(&:last)
983
991
  end
@@ -1211,8 +1219,9 @@ module Squared
1211
1219
  puts 'No updates were found'
1212
1220
  else
1213
1221
  if items
1214
- update = choice('Select a package', items.map(&:first),
1215
- multiple: true, force: false, index: true, border: true).map { |n| items[n.pred].last }
1222
+ update = choice('Select a package', items.map(&:first), multiple: true, force: false, index: true,
1223
+ border: true, **parse_select)
1224
+ .map { |n| items[n.pred].last }
1216
1225
  end
1217
1226
  unless Array(update).empty?
1218
1227
  opts = ['f']
@@ -1296,7 +1305,12 @@ module Squared
1296
1305
 
1297
1306
  op.add_path(file)
1298
1307
  end
1299
- return run(from: from, interactive: ['Push', 'N', target || gemname]) unless with || !banner
1308
+ if dryrun? || kwargs[:filter]&.fetch(:dryrun, nil)
1309
+ print_item "> #{op}"
1310
+ exit 0
1311
+ elsif !with && banner
1312
+ return run(from: from, interactive: ['Push', 'N', target || gemname])
1313
+ end
1300
1314
  when :exec
1301
1315
  min = if op.arg?('g', 'gem')
1302
1316
  1
@@ -1365,9 +1379,9 @@ module Squared
1365
1379
  name = op.remove_at(n)
1366
1380
  n = name.index('@')
1367
1381
  pre, ver = if n == 0
1368
- [gemname, name[1..-1]]
1382
+ [gemname, name[1..]]
1369
1383
  else
1370
- [name[0, n], name[n.succ..-1]]
1384
+ [name[0, n], name[n.succ..]]
1371
1385
  end
1372
1386
  op.adjoin(pre, quote_option('version', ver))
1373
1387
  .clear
@@ -1826,10 +1840,7 @@ module Squared
1826
1840
  set.call(ver, val)
1827
1841
  end
1828
1842
  end
1829
- if semgte?('2.6')
1830
- target = RUBY_VERSION.start_with?('2.6') ? RubyVM : $LOAD_PATH
1831
- parse.call(target.resolve_feature_path(gemname)&.last)
1832
- end
1843
+ parse.call($LOAD_PATH.resolve_feature_path(gemname)&.last)
1833
1844
  unless gemdir || pwd_set { parse.call(`#{bundle_output('show', gemname)}`) }
1834
1845
  raise Errno::ENOENT, 'gems home'
1835
1846
  end
@@ -2057,7 +2068,7 @@ module Squared
2057
2068
  end
2058
2069
 
2059
2070
  def gemlib
2060
- @gemlib ||= Set.new(['lib']).yield_self do |lib|
2071
+ @gemlib ||= Set.new(['lib']).then do |lib|
2061
2072
  if (spec = gemspec)
2062
2073
  lib.merge(spec.require_paths || [])
2063
2074
  end
@@ -153,7 +153,7 @@ module Squared
153
153
  return true if super
154
154
  return extras.include?(obj) unless (n = extras.index(@partition))
155
155
 
156
- extras[0..n].include?(obj)
156
+ extras[..n].include?(obj)
157
157
  end
158
158
 
159
159
  def multiple?(val)
@@ -19,7 +19,6 @@ module Squared
19
19
  class << self
20
20
  include Common::Format
21
21
  include Shell
22
- include Prompt
23
22
 
24
23
  def append(target, *args, delim: false, escape: false, quote: true, strip: nil, double: false, filter: nil,
25
24
  pass: nil, **kwargs)
@@ -82,7 +81,7 @@ module Squared
82
81
  kwargs[:hint] ||= 'unrecognized'
83
82
  append(target, opts, delim: true) if kwargs.delete(:append)
84
83
  warn log_warn(opts.join(', '), pass: true, **kwargs)
85
- exit 1 unless !strict && (pass || confirm("Run? [#{sub_style(target, styles)}]", 'N'))
84
+ exit 1 unless !strict && (pass || Common::Prompt.confirm("Run? [#{sub_style(target, styles)}]", 'N'))
86
85
  end
87
86
 
88
87
  def delete_key(target, *args, value: false, reverse: false, count: -1)
@@ -104,7 +103,7 @@ module Squared
104
103
  next if s.empty? || pass == i
105
104
 
106
105
  if s == '--'
107
- ret << s << args[i.succ..-1].join(' ')
106
+ ret << s << args[i.succ..].join(' ')
108
107
  break
109
108
  end
110
109
  next ret << s unless s.start_with?('-')
@@ -139,7 +138,7 @@ module Squared
139
138
  j = val =~ OPT_VALUE ? $1 : val
140
139
  (out[j] ||= []) << i unless pass.include?(j)
141
140
  end
142
- .map { |item| item[1].size > 1 ? item[1][0..-2] : [] }
141
+ .map { |item| item[1].size > 1 ? item[1][..-2] : [] }
143
142
  .reject(&:empty?)
144
143
  return if data.empty?
145
144
 
@@ -152,12 +151,12 @@ module Squared
152
151
  val = val.strip
153
152
  return [val, nil, ''] unless (i = val.index('='))
154
153
 
155
- last = val[i.succ..-1].strip
154
+ last = val[i.succ..].strip
156
155
  if last =~ /\A(["'])(.*)\1\z/m
157
156
  last = $2
158
157
  quote = $1
159
158
  end
160
- [val[0..i.pred], last, quote || '']
159
+ [val[...i], last, quote || '']
161
160
  end
162
161
 
163
162
  def parse_arg!(name, val)
@@ -174,7 +173,7 @@ module Squared
174
173
  r << matchopts(s, value) unless s.empty?
175
174
  a = target.to_a
176
175
  if (n = a.index('--'))
177
- a = a[0..n]
176
+ a = a[..n]
178
177
  end
179
178
  r.any? { |pat| a.any?(pat) }
180
179
  end
@@ -193,6 +192,8 @@ module Squared
193
192
  false
194
193
  end
195
194
 
195
+ alias filter select
196
+
196
197
  private
197
198
 
198
199
  def matchopt(val, value = false)
@@ -224,7 +225,7 @@ module Squared
224
225
  :merge, :compact, :delete, :delete?, :delete_if, :grep, :grep_v, :inspect, :to_a, :to_s
225
226
  def_delegators :@extras, :empty?, :member?, :each, :each_with_index, :each_with_object, :partition, :dup,
226
227
  :first, :shift, :unshift, :pop, :push, :concat, :index, :join, :detect, :map, :map!, :select,
227
- :select!, :reject, :slice, :slice!, :size
228
+ :select!, :filter, :filter!, :reject, :slice, :slice!, :size
228
229
 
229
230
  def_delegator :@extras, :delete, :remove
230
231
  def_delegator :@extras, :delete_at, :remove_at
@@ -269,7 +270,7 @@ module Squared
269
270
  x, y = val.split('|', 2)
270
271
  if y
271
272
  if (n = val.index('='))
272
- x += val[n..-1]
273
+ x += val[n..]
273
274
  end
274
275
  [x, y]
275
276
  else
@@ -318,7 +319,7 @@ module Squared
318
319
  bare.concat(mod)
319
320
  when '/'
320
321
  begin
321
- val = val[n.succ..-1]
322
+ val = val[n.succ..]
322
323
  pat = eval(val)
323
324
  raise SyntaxError unless pat.is_a?(Regexp)
324
325
 
@@ -327,7 +328,7 @@ module Squared
327
328
  warn "#{self.class}: invalid pattern (#{val})"
328
329
  end
329
330
  when '{'
330
- group = val[(n + 2)..-1].chomp!('}')&.split(',')
331
+ group = val[(n + 2)..].chomp!('}')&.split(',')
331
332
  if group
332
333
  mod.each { |key| ar[key] = group }
333
334
  else
@@ -396,7 +397,7 @@ module Squared
396
397
  else
397
398
  add(opt.size == 1 ? "-#{opt}" : "--#{opt}")
398
399
  end
399
- elsif opt.start_with?(/no[-_]/) && no.include?(s = opt[3..-1])
400
+ elsif opt.start_with?(/no[-_]/) && no.include?(s = opt[3..])
400
401
  add "--no-#{s}"
401
402
  else
402
403
  has = lambda do |list, key|
@@ -454,7 +455,7 @@ module Squared
454
455
  push opt
455
456
  end
456
457
  opt = key unless opt == last
457
- elsif has.call(m, key = opt[0]) && opt[1..-1] =~ QUOTE_VALUE
458
+ elsif has.call(m, key = opt[0]) && opt[1..] =~ QUOTE_VALUE
458
459
  add basic_option(key, $2, double: $1 == '"' || has.call(qq, key), **kwargs, merge: true)
459
460
  opt = key
460
461
  else
@@ -612,7 +613,7 @@ module Squared
612
613
  else
613
614
  args.each { |val| remove val }
614
615
  end
615
- args = temp[0, index] + args + temp[index..-1]
616
+ args = temp[0, index] + args + temp[index..]
616
617
  target.clear
617
618
  end
618
619
  merge args
@@ -215,8 +215,8 @@ module Squared
215
215
  opts << '--force-checkout'
216
216
  when 'rebase', 'detach'
217
217
  opts << "--#{val}"
218
- when /^(fetch-)?submodules$/
219
- opts << '--fetch-submodules' if repo_submodules?(true, **envargs)
218
+ when /^(recurse-)?submodules$/
219
+ opts << '--recurse-submodules' if repo_submodules?(true, **envargs)
220
220
  when /^(fail-)?fast$/
221
221
  opts << '--fail-fast'
222
222
  when /^no-(manifest-)?update$/
@@ -228,7 +228,7 @@ module Squared
228
228
  if (jobs = ENV['REPO_JOBS']) || opts.none?(/^--?j(obs)?$/)
229
229
  opts << "-j#{jobs || Rake::CpuCounter.count}"
230
230
  end
231
- opts << '--fetch-submodules' if repo_submodules?(**envargs)
231
+ opts << '--recurse-submodules' if repo_submodules?(**envargs)
232
232
  begin
233
233
  repo_run('sync', opts, exception: opts.include?('--fail-fast'), options: stage != 'init')
234
234
  rescue Errno::ENOENT => e
@@ -262,7 +262,7 @@ module Squared
262
262
  return false unless root.directory?
263
263
 
264
264
  path = sub_style root, theme[:inline]
265
- @repo_override = case env('REPO_Y')
265
+ @repo_override = case __arg__('YES', 'REPO') || env('REPO_Y')
266
266
  when '0', 'false'
267
267
  false
268
268
  when '1', 'true'
@@ -345,7 +345,7 @@ module Squared
345
345
  def repo_opts(*args)
346
346
  return args unless (n = ARGV.index('--'))
347
347
 
348
- ARGV[n.succ..-1].concat(args)
348
+ ARGV[n.succ..].concat(args)
349
349
  end
350
350
 
351
351
  def repo_submodules?(val = false, **kwargs)
@@ -9,6 +9,7 @@ module Squared
9
9
  extend Forwardable
10
10
 
11
11
  attr_reader :sync, :multiple, :parallel
12
+ attr_writer :ref_min
12
13
 
13
14
  def_delegators :@data, :[], :each, :each_key, :keys, :key?, :include?, :fetch, :update, :merge!, :any?, :none?,
14
15
  :delete, :delete_if, :find, :find_all, :to_a, :to_s, :inspect
@@ -19,6 +20,7 @@ module Squared
19
20
  @sync = []
20
21
  @multiple = []
21
22
  @parallel = []
23
+ @ref_min = 2
22
24
  @chain = {}
23
25
  @exclude = exclude.freeze
24
26
  @task = Struct::SeriesData.new(workspace.config_get(:rename))
@@ -56,7 +58,7 @@ module Squared
56
58
  @session = {
57
59
  group: Support.hashlist,
58
60
  parent: Support.hashlist,
59
- id: []
61
+ id: Set.new
60
62
  }.freeze
61
63
  end
62
64
 
@@ -85,7 +87,7 @@ module Squared
85
87
 
86
88
  def build(parallel: [], pattern: [], **)
87
89
  subcheck = ->(val) { (ns = task_namespace(val)) && parallel.include?(ns) }
88
- update @session[:parent] if @session[:id].uniq.size > 1
90
+ update @session[:parent] if @session[:id].size >= @ref_min
89
91
  update @session[:group]
90
92
  each do |key, items|
91
93
  next if exclude?(key, empty: true) || @workspace.task_exclude?(t = name_get(key))
data/squared.gemspec CHANGED
@@ -11,21 +11,23 @@ Gem::Specification.new do |spec|
11
11
  spec.summary = "Rake task generator for managing multi-language workspaces."
12
12
  spec.description = "Rake task generator for managing multi-language workspaces."
13
13
  spec.homepage = "https://github.com/anpham6/squared-ruby"
14
- spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
14
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
15
15
  spec.licenses = ["BSD-3-Clause"]
16
16
 
17
17
  spec.metadata["homepage_uri"] = spec.homepage
18
18
  spec.metadata["source_code_uri"] = spec.homepage
19
19
  spec.metadata["documentation_uri"] = "https://squared.readthedocs.io"
20
20
 
21
- spec.files = Dir["lib/**/*"] +
22
- %w[CHANGELOG.md LICENSE README.md squared.gemspec]
23
21
  spec.bindir = "exe"
24
- spec.executables = []
22
+ spec.executables = Dir["exe/*"].map { |f| File.basename(f) }
23
+
24
+ spec.files = Dir["exe/*"] + Dir["lib/**/*"] +
25
+ %w[CHANGELOG.md LICENSE README.md squared.gemspec]
25
26
  spec.require_paths = ["lib"]
26
27
 
27
28
  spec.add_dependency "rake"
29
+ spec.add_dependency "optparse"
28
30
  spec.add_dependency "logger"
29
31
  spec.add_dependency "rexml"
30
- spec.add_dependency "readline"
32
+ spec.add_dependency "reline"
31
33
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: squared
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.5
4
+ version: 0.9.0.pre1
5
5
  platform: ruby
6
6
  authors:
7
7
  - An Pham
@@ -23,6 +23,20 @@ dependencies:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
25
  version: '0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: optparse
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
26
40
  - !ruby/object:Gem::Dependency
27
41
  name: logger
28
42
  requirement: !ruby/object:Gem::Requirement
@@ -52,7 +66,7 @@ dependencies:
52
66
  - !ruby/object:Gem::Version
53
67
  version: '0'
54
68
  - !ruby/object:Gem::Dependency
55
- name: readline
69
+ name: reline
56
70
  requirement: !ruby/object:Gem::Requirement
57
71
  requirements:
58
72
  - - ">="
@@ -68,13 +82,15 @@ dependencies:
68
82
  description: Rake task generator for managing multi-language workspaces.
69
83
  email:
70
84
  - anpham6@gmail.com
71
- executables: []
85
+ executables:
86
+ - sqd
72
87
  extensions: []
73
88
  extra_rdoc_files: []
74
89
  files:
75
90
  - CHANGELOG.md
76
91
  - LICENSE
77
92
  - README.md
93
+ - exe/sqd
78
94
  - lib/squared.rb
79
95
  - lib/squared/app.rb
80
96
  - lib/squared/common.rb
@@ -119,7 +135,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
119
135
  requirements:
120
136
  - - ">="
121
137
  - !ruby/object:Gem::Version
122
- version: 2.5.0
138
+ version: 2.7.0
123
139
  required_rubygems_version: !ruby/object:Gem::Requirement
124
140
  requirements:
125
141
  - - ">="