squared 0.8.6 → 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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +35 -25
- data/README.md +158 -126
- data/exe/sqd +224 -0
- data/lib/squared/common/base.rb +7 -3
- data/lib/squared/common/format.rb +8 -3
- data/lib/squared/common/prompt.rb +65 -33
- data/lib/squared/common/shell.rb +3 -1
- data/lib/squared/common/system.rb +2 -9
- data/lib/squared/config.rb +3 -3
- data/lib/squared/version.rb +1 -1
- data/lib/squared/workspace/application.rb +26 -29
- data/lib/squared/workspace/project/base.rb +104 -61
- data/lib/squared/workspace/project/docker.rb +93 -44
- data/lib/squared/workspace/project/git.rb +65 -96
- data/lib/squared/workspace/project/node.rb +14 -12
- data/lib/squared/workspace/project/python.rb +75 -35
- data/lib/squared/workspace/project/ruby.rb +61 -52
- data/lib/squared/workspace/project/support/class.rb +1 -1
- data/lib/squared/workspace/project/support/optionpartition.rb +16 -28
- data/lib/squared/workspace/repo.rb +5 -5
- data/lib/squared/workspace/series.rb +4 -2
- data/squared.gemspec +7 -5
- metadata +21 -5
|
@@ -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
|
|
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][
|
|
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
|
|
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[
|
|
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[
|
|
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)
|
|
@@ -219,13 +220,12 @@ module Squared
|
|
|
219
220
|
end
|
|
220
221
|
|
|
221
222
|
attr_reader :target, :extras, :found, :errors, :values, :project, :path, :sep
|
|
222
|
-
attr_accessor :stdout
|
|
223
223
|
|
|
224
224
|
def_delegators :@target, :+, :-, :<<, :any?, :none?, :include?, :add, :add?, :find, :find_all, :find_index,
|
|
225
225
|
:merge, :compact, :delete, :delete?, :delete_if, :grep, :grep_v, :inspect, :to_a, :to_s
|
|
226
226
|
def_delegators :@extras, :empty?, :member?, :each, :each_with_index, :each_with_object, :partition, :dup,
|
|
227
227
|
:first, :shift, :unshift, :pop, :push, :concat, :index, :join, :detect, :map, :map!, :select,
|
|
228
|
-
:select!, :reject, :slice, :slice!, :size
|
|
228
|
+
:select!, :filter, :filter!, :reject, :slice, :slice!, :size
|
|
229
229
|
|
|
230
230
|
def_delegator :@extras, :delete, :remove
|
|
231
231
|
def_delegator :@extras, :delete_at, :remove_at
|
|
@@ -242,16 +242,14 @@ module Squared
|
|
|
242
242
|
@sep = sep
|
|
243
243
|
@errors = []
|
|
244
244
|
@found = []
|
|
245
|
-
@stdout = false
|
|
246
245
|
parse(list, opts, **kwargs, &blk)
|
|
247
246
|
end
|
|
248
247
|
|
|
249
248
|
def parse(list, opts = extras, no: nil, single: nil, args: false, multiple: nil, first: nil, underscore: nil,
|
|
250
|
-
explicit: false, bool: %w[true false],
|
|
249
|
+
explicit: false, bool: %w[true false], stdin: false, &blk)
|
|
251
250
|
@extras = []
|
|
252
251
|
@values = []
|
|
253
252
|
bare = []
|
|
254
|
-
auto = auto.flat_map { |val| val.split('|', 2) }
|
|
255
253
|
e = []
|
|
256
254
|
b = []
|
|
257
255
|
m = []
|
|
@@ -272,7 +270,7 @@ module Squared
|
|
|
272
270
|
x, y = val.split('|', 2)
|
|
273
271
|
if y
|
|
274
272
|
if (n = val.index('='))
|
|
275
|
-
x += val[n
|
|
273
|
+
x += val[n..]
|
|
276
274
|
end
|
|
277
275
|
[x, y]
|
|
278
276
|
else
|
|
@@ -321,7 +319,7 @@ module Squared
|
|
|
321
319
|
bare.concat(mod)
|
|
322
320
|
when '/'
|
|
323
321
|
begin
|
|
324
|
-
val = val[n.succ
|
|
322
|
+
val = val[n.succ..]
|
|
325
323
|
pat = eval(val)
|
|
326
324
|
raise SyntaxError unless pat.is_a?(Regexp)
|
|
327
325
|
|
|
@@ -330,7 +328,7 @@ module Squared
|
|
|
330
328
|
warn "#{self.class}: invalid pattern (#{val})"
|
|
331
329
|
end
|
|
332
330
|
when '{'
|
|
333
|
-
group = val[(n + 2)
|
|
331
|
+
group = val[(n + 2)..].chomp!('}')&.split(',')
|
|
334
332
|
if group
|
|
335
333
|
mod.each { |key| ar[key] = group }
|
|
336
334
|
else
|
|
@@ -353,7 +351,6 @@ module Squared
|
|
|
353
351
|
tr = ->(a) { a.map { |val| val.tr('-', '_') } }
|
|
354
352
|
@values.concat(tr.call(@values))
|
|
355
353
|
bare.concat(tr.call(bare))
|
|
356
|
-
auto.concat(tr.call(auto))
|
|
357
354
|
e.concat(tr.call(e))
|
|
358
355
|
b.concat(tr.call(b))
|
|
359
356
|
m.concat(tr.call(m))
|
|
@@ -367,7 +364,6 @@ module Squared
|
|
|
367
364
|
ml.concat(tr.call(ml))
|
|
368
365
|
no.concat(tr.call(no))
|
|
369
366
|
end
|
|
370
|
-
bare.concat(auto)
|
|
371
367
|
if target.is_a?(JoinSet)
|
|
372
368
|
target.multiple = multiple if multiple
|
|
373
369
|
target.multiple = ml.map { |val| val.size == 1 ? "-#{val}" : "--#{val}" }
|
|
@@ -400,12 +396,8 @@ module Squared
|
|
|
400
396
|
add "#{sw[opt]}#{opt}"
|
|
401
397
|
else
|
|
402
398
|
add(opt.size == 1 ? "-#{opt}" : "--#{opt}")
|
|
403
|
-
if auto.include?(opt)
|
|
404
|
-
@stdout = true
|
|
405
|
-
break
|
|
406
|
-
end
|
|
407
399
|
end
|
|
408
|
-
elsif opt.start_with?(/no[-_]/) && no.include?(s = opt[3
|
|
400
|
+
elsif opt.start_with?(/no[-_]/) && no.include?(s = opt[3..])
|
|
409
401
|
add "--no-#{s}"
|
|
410
402
|
else
|
|
411
403
|
has = lambda do |list, key|
|
|
@@ -463,7 +455,7 @@ module Squared
|
|
|
463
455
|
push opt
|
|
464
456
|
end
|
|
465
457
|
opt = key unless opt == last
|
|
466
|
-
elsif has.call(m, key = opt[0]) && opt[1
|
|
458
|
+
elsif has.call(m, key = opt[0]) && opt[1..] =~ QUOTE_VALUE
|
|
467
459
|
add basic_option(key, $2, double: $1 == '"' || has.call(qq, key), **kwargs, merge: true)
|
|
468
460
|
opt = key
|
|
469
461
|
else
|
|
@@ -621,7 +613,7 @@ module Squared
|
|
|
621
613
|
else
|
|
622
614
|
args.each { |val| remove val }
|
|
623
615
|
end
|
|
624
|
-
args = temp[0, index] + args + temp[index
|
|
616
|
+
args = temp[0, index] + args + temp[index..]
|
|
625
617
|
target.clear
|
|
626
618
|
end
|
|
627
619
|
merge args
|
|
@@ -830,10 +822,6 @@ module Squared
|
|
|
830
822
|
end
|
|
831
823
|
end
|
|
832
824
|
|
|
833
|
-
def style?(*args)
|
|
834
|
-
!stdout && args.none?(&:!)
|
|
835
|
-
end
|
|
836
|
-
|
|
837
825
|
def uniq!(list)
|
|
838
826
|
list = uniq list
|
|
839
827
|
return if list.empty?
|
|
@@ -215,8 +215,8 @@ module Squared
|
|
|
215
215
|
opts << '--force-checkout'
|
|
216
216
|
when 'rebase', 'detach'
|
|
217
217
|
opts << "--#{val}"
|
|
218
|
-
when /^(
|
|
219
|
-
opts << '--
|
|
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 << '--
|
|
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
|
|
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].
|
|
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.
|
|
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 "
|
|
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.
|
|
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:
|
|
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,14 +135,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
119
135
|
requirements:
|
|
120
136
|
- - ">="
|
|
121
137
|
- !ruby/object:Gem::Version
|
|
122
|
-
version: 2.
|
|
138
|
+
version: 2.7.0
|
|
123
139
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
124
140
|
requirements:
|
|
125
141
|
- - ">="
|
|
126
142
|
- !ruby/object:Gem::Version
|
|
127
143
|
version: '0'
|
|
128
144
|
requirements: []
|
|
129
|
-
rubygems_version: 4.0.
|
|
145
|
+
rubygems_version: 4.0.21
|
|
130
146
|
specification_version: 4
|
|
131
147
|
summary: Rake task generator for managing multi-language workspaces.
|
|
132
148
|
test_files: []
|