squared 0.0.10 → 0.0.11
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/README.ruby.md +45 -26
- data/lib/squared/app.rb +10 -0
- data/lib/squared/common/base.rb +7 -13
- data/lib/squared/common/class.rb +20 -3
- data/lib/squared/common/format.rb +59 -15
- data/lib/squared/common/prompt.rb +38 -0
- data/lib/squared/common/system.rb +6 -36
- data/lib/squared/common/task.rb +3 -2
- data/lib/squared/common/utils.rb +25 -16
- data/lib/squared/common.rb +1 -0
- data/lib/squared/config.rb +18 -16
- data/lib/squared/version.rb +1 -1
- data/lib/squared/workspace/application.rb +224 -110
- data/lib/squared/workspace/project/base.rb +258 -163
- data/lib/squared/workspace/project/git.rb +66 -76
- data/lib/squared/workspace/project/node.rb +220 -73
- data/lib/squared/workspace/project/python.rb +22 -16
- data/lib/squared/workspace/project/ruby.rb +76 -60
- data/lib/squared/workspace/project.rb +0 -3
- data/lib/squared/workspace/repo.rb +25 -12
- data/lib/squared/workspace/series.rb +80 -52
- data/lib/squared/workspace.rb +5 -4
- data/lib/squared.rb +1 -11
- metadata +4 -2
@@ -23,6 +23,8 @@ module Squared
|
|
23
23
|
|
24
24
|
class << self
|
25
25
|
def populate(*); end
|
26
|
+
def batchargs(*); end
|
27
|
+
def aliasargs(*); end
|
26
28
|
|
27
29
|
def tasks
|
28
30
|
[].freeze
|
@@ -44,30 +46,31 @@ module Squared
|
|
44
46
|
def to_s
|
45
47
|
super.to_s.match(/[^:]+$/)[0]
|
46
48
|
end
|
49
|
+
|
50
|
+
def config?(*)
|
51
|
+
false
|
52
|
+
end
|
47
53
|
end
|
48
54
|
|
49
55
|
@@print_order = 0
|
50
56
|
@@tasks = {}
|
51
57
|
|
52
|
-
attr_reader :name, :project, :workspace, :
|
53
|
-
attr_accessor :exception, :pipe, :verbose
|
58
|
+
attr_reader :name, :project, :workspace, :path, :exception, :pipe, :verbose, :theme, :group, :parent
|
54
59
|
|
55
|
-
def initialize(
|
56
|
-
group: nil, verbose: nil, pass: nil, exclude: nil,
|
57
|
-
common: Common::KEY[:COMMON], pipe: Common::KEY[:PIPE], **kwargs)
|
58
|
-
@name = name.to_s
|
60
|
+
def initialize(workspace, path, name, *, group: nil, pass: nil, exclude: nil, common: ARG[:COMMON], **kwargs)
|
59
61
|
@path = path
|
60
|
-
@project = @path.basename.to_s
|
61
62
|
@workspace = workspace
|
62
|
-
@
|
63
|
+
@name = name.to_s.freeze
|
64
|
+
@project = @path.basename.to_s.freeze
|
65
|
+
@group = group&.to_s.freeze
|
63
66
|
@depend = kwargs[:depend]
|
64
67
|
@doc = kwargs[:doc]
|
65
68
|
@test = kwargs[:test]
|
66
69
|
@copy = kwargs[:copy]
|
67
70
|
@clean = kwargs[:clean]
|
68
|
-
@exception = workspace.exception
|
69
|
-
@pipe = env_pipe(pipe
|
70
|
-
@verbose =
|
71
|
+
@exception = kwargs.key?(:exception) ? env_bool(kwargs[:exception]) : workspace.exception
|
72
|
+
@pipe = kwargs.key?(:pipe) ? env_pipe(kwargs[:pipe]) : workspace.pipe
|
73
|
+
@verbose = kwargs.key?(:verbose) ? kwargs[:verbose] : workspace.verbose
|
71
74
|
@theme = if !@verbose
|
72
75
|
{}
|
73
76
|
elsif common
|
@@ -80,10 +83,11 @@ module Squared
|
|
80
83
|
@children = []
|
81
84
|
@pass = (pass ? as_a(pass, :to_sym) : []).freeze
|
82
85
|
@exclude = (exclude ? as_a(exclude, :to_sym) : []).freeze
|
83
|
-
@envname = @name.gsub(/[^\w]+/, '_').upcase
|
84
|
-
@desc = @name.split(':').join(
|
86
|
+
@envname = @name.gsub(/[^\w]+/, '_').upcase.freeze
|
87
|
+
@desc = (@name.include?(':') ? @name.split(':').join(ARG[:SPACE]) : @name).freeze
|
88
|
+
@parent = nil
|
85
89
|
@global = false
|
86
|
-
run_set
|
90
|
+
run_set(kwargs[:run], kwargs[:env], opts: kwargs.fetch(:opts, true))
|
87
91
|
initialize_ref(Base.ref)
|
88
92
|
end
|
89
93
|
|
@@ -93,7 +97,7 @@ module Squared
|
|
93
97
|
|
94
98
|
def initialize_build(ref, **kwargs)
|
95
99
|
initialize_ref(ref)
|
96
|
-
if (@script = @workspace.
|
100
|
+
if (@script = @workspace.script_get(group: @group, ref: ref))
|
97
101
|
if @script[:log] && !kwargs.key?(:log)
|
98
102
|
kwargs[:log] = @script[:log]
|
99
103
|
@log = nil
|
@@ -107,7 +111,7 @@ module Squared
|
|
107
111
|
initialize_logger(**kwargs)
|
108
112
|
return if @output[0] == false
|
109
113
|
|
110
|
-
data = @workspace.
|
114
|
+
data = @workspace.script_find(*@ref, @group)
|
111
115
|
if @output[0].nil?
|
112
116
|
if (scr = data[:script])
|
113
117
|
@global = true
|
@@ -140,8 +144,8 @@ module Squared
|
|
140
144
|
return if @log
|
141
145
|
|
142
146
|
log = log.is_a?(::Hash) ? log.dup : { file: log }
|
143
|
-
|
144
|
-
file = case
|
147
|
+
unless (file = env('LOG_FILE'))
|
148
|
+
file = case env('LOG_AUTO')
|
145
149
|
when 'y', 'year'
|
146
150
|
"#{@name}-#{Date.today.year}.log"
|
147
151
|
when 'm', 'month'
|
@@ -152,7 +156,7 @@ module Squared
|
|
152
156
|
end
|
153
157
|
if file ||= log[:file]
|
154
158
|
file = Date.today.strftime(file)
|
155
|
-
file = (dir = env('LOG_DIR')) ?
|
159
|
+
file = (dir = env('LOG_DIR')) ? @workspace.home.join(dir, file) : @workspace.home.join(file)
|
156
160
|
begin
|
157
161
|
file = file.realdirpath
|
158
162
|
rescue StandardError => e
|
@@ -163,7 +167,7 @@ module Squared
|
|
163
167
|
end
|
164
168
|
end
|
165
169
|
log[:progname] ||= @name
|
166
|
-
if (val = env('LOG_LEVEL', ignore:
|
170
|
+
if (val = env('LOG_LEVEL', ignore: false))
|
167
171
|
log[:level] = val
|
168
172
|
end
|
169
173
|
log.delete(:file)
|
@@ -171,10 +175,14 @@ module Squared
|
|
171
175
|
end
|
172
176
|
|
173
177
|
def initialize_env(dev: nil, prod: nil, **)
|
174
|
-
|
175
|
-
@dev = env_match("#{
|
176
|
-
@prod = env_match("#{
|
177
|
-
|
178
|
+
pre = "BUILD_#{@envname}"
|
179
|
+
@dev = env_match("#{pre}_DEV", dev)
|
180
|
+
@prod = env_match("#{pre}_PROD", prod)
|
181
|
+
cmd = @output[0]
|
182
|
+
unless cmd == false || cmd.is_a?(::Array) || (val = env('BUILD', suffix: 'OPTS')).nil?
|
183
|
+
@output[cmd ? 1 : 3] = shell_split(val, join: true)
|
184
|
+
end
|
185
|
+
unless @output[2] == false || (val = env('BUILD', suffix: 'ENV')).nil?
|
178
186
|
begin
|
179
187
|
data = JSON.parse(val)
|
180
188
|
raise_error('invalid JSON object', val, hint: "#{prefix}_ENV") unless data.is_a?(::Hash)
|
@@ -186,10 +194,12 @@ module Squared
|
|
186
194
|
return unless (val = env('BUILD', strict: true))
|
187
195
|
|
188
196
|
@global = false
|
189
|
-
if
|
197
|
+
if val == '0'
|
198
|
+
@output = [false]
|
199
|
+
elsif script?
|
190
200
|
script_set val
|
191
201
|
else
|
192
|
-
run_set
|
202
|
+
run_set val
|
193
203
|
end
|
194
204
|
end
|
195
205
|
|
@@ -198,36 +208,57 @@ module Squared
|
|
198
208
|
end
|
199
209
|
|
200
210
|
def populate(*)
|
201
|
-
check = lambda do |proj, key|
|
202
|
-
workspace.series.include?(key) ? proj.has?(key, Base.ref) : workspace.task_extend?(proj, key)
|
203
|
-
end
|
204
|
-
|
205
211
|
namespace name do
|
206
212
|
workspace.series.each_key do |key|
|
207
|
-
next unless
|
213
|
+
next unless workspace.task_include?(self, key)
|
208
214
|
|
209
|
-
|
210
|
-
|
211
|
-
|
215
|
+
alt = workspace.series.name_get(key)
|
216
|
+
unless workspace.task_defined?(name, alt)
|
217
|
+
desc message(@desc, alt)
|
218
|
+
task alt do
|
212
219
|
__send__(key)
|
213
220
|
end
|
214
221
|
end
|
215
|
-
next if (items = @children.select { |item|
|
222
|
+
next if (items = @children.select { |item| workspace.task_include?(item, key) }).empty?
|
216
223
|
|
217
|
-
desc message(@desc,
|
218
|
-
task
|
224
|
+
desc message(@desc, alt, 'workspace')
|
225
|
+
task task_join(alt, 'workspace') => items.map { |item| task_join(item.name, alt) }
|
219
226
|
end
|
220
227
|
end
|
221
228
|
end
|
222
229
|
|
223
|
-
def
|
224
|
-
|
230
|
+
def with(**kwargs, &blk)
|
231
|
+
@withargs = kwargs.empty? ? nil : kwargs
|
232
|
+
if block_given?
|
233
|
+
instance_eval(&blk)
|
234
|
+
@withargs = nil
|
235
|
+
end
|
236
|
+
self
|
237
|
+
end
|
225
238
|
|
239
|
+
def add(path, name = nil, **kwargs, &blk)
|
240
|
+
if path.is_a?(::String) && (data = %r{^(.+)[\\/]\*+$}.match(path))
|
241
|
+
path = base_path(data[1]).children.select(&:directory?)
|
242
|
+
end
|
243
|
+
if path.is_a?(::Array)
|
244
|
+
name = @name if name == true
|
245
|
+
path.each { |val| add(val, name && task_join(name, File.basename(val)), **kwargs, &blk) }
|
246
|
+
return self
|
247
|
+
elsif !source_path?(path = base_path(path))
|
248
|
+
return self
|
249
|
+
elsif !name.is_a?(::String) && !name.is_a?(::Symbol)
|
250
|
+
name = nil
|
251
|
+
end
|
252
|
+
if @withargs
|
253
|
+
data = @withargs.dup
|
254
|
+
data.merge!(kwargs)
|
255
|
+
kwargs = data
|
256
|
+
end
|
226
257
|
kwargs[:group] = group unless kwargs.key?(:group)
|
227
258
|
kwargs[:ref] = ref unless kwargs.key?(:ref)
|
228
259
|
parent = self
|
229
260
|
proj = nil
|
230
|
-
workspace.add(path, name || path.basename
|
261
|
+
workspace.add(path, name || path.basename, **kwargs) do
|
231
262
|
variable_set :parent, parent
|
232
263
|
proj = self
|
233
264
|
end
|
@@ -236,54 +267,49 @@ module Squared
|
|
236
267
|
self
|
237
268
|
end
|
238
269
|
|
239
|
-
def build(*args, sync:
|
270
|
+
def build(*args, sync: invoked_sync?('build'), **)
|
240
271
|
if args.empty?
|
241
|
-
cmd, opts, var = @output
|
242
|
-
|
272
|
+
cmd, opts, var, flags = @output
|
273
|
+
banner = verbose == 1
|
243
274
|
else
|
244
275
|
cmd = args.shift
|
245
276
|
opts = args.map { |val| shell_quote(val, force: false) }.join(' ')
|
277
|
+
banner = verbose
|
246
278
|
end
|
247
279
|
if cmd
|
248
|
-
|
280
|
+
case opts
|
281
|
+
when ::String
|
249
282
|
cmd = "#{cmd} #{opts}"
|
250
|
-
|
283
|
+
when ::Array
|
251
284
|
cmd = cmd.join(' && ')
|
285
|
+
else
|
286
|
+
cmd = [cmd, compose(opts, script: false)].compact.join(' ') unless opts == false || !respond_to?(:compose)
|
252
287
|
end
|
253
|
-
banner = verbose != false
|
254
288
|
else
|
255
289
|
return unless respond_to?(:compose)
|
256
290
|
|
257
|
-
cmd = compose(opts)
|
258
|
-
banner = verbose == 1
|
291
|
+
cmd = compose(opts, flags, script: true)
|
259
292
|
end
|
260
293
|
run(cmd, var, banner: banner, sync: sync)
|
261
294
|
end
|
262
295
|
|
263
|
-
def
|
264
|
-
|
265
|
-
return if run_task "#{name}:copy"
|
266
|
-
|
267
|
-
copy if copy?
|
296
|
+
def depend(*, sync: invoked_sync?('depend'), **)
|
297
|
+
run(@depend, sync: sync) if @depend
|
268
298
|
end
|
269
299
|
|
270
|
-
def
|
271
|
-
|
300
|
+
def copy(*, sync: invoked_sync?('copy'), **)
|
301
|
+
run_s(@copy, sync: sync) if @copy
|
272
302
|
end
|
273
303
|
|
274
|
-
def
|
275
|
-
|
304
|
+
def doc(*, sync: invoked_sync?('doc'), **)
|
305
|
+
build(@doc, sync: sync) if @doc
|
276
306
|
end
|
277
307
|
|
278
|
-
def
|
279
|
-
build(@
|
308
|
+
def test(*, sync: invoked_sync?('test'), **)
|
309
|
+
build(@test, sync: sync) if @test
|
280
310
|
end
|
281
311
|
|
282
|
-
def
|
283
|
-
build(@test, sync: invoked_sync?('test')) if @test
|
284
|
-
end
|
285
|
-
|
286
|
-
def clean
|
312
|
+
def clean(*)
|
287
313
|
case @clean
|
288
314
|
when ::String
|
289
315
|
run_s(@clean, sync: invoked_sync?('clean'))
|
@@ -311,15 +337,21 @@ module Squared
|
|
311
337
|
end
|
312
338
|
|
313
339
|
def log
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
@log
|
318
|
-
end
|
340
|
+
return @log unless @log.is_a?(::Array)
|
341
|
+
|
342
|
+
@log = Logger.new(enabled? ? @log[0] : nil, **@log[1])
|
319
343
|
end
|
320
344
|
|
321
|
-
def base_path(*args)
|
322
|
-
path.join(*args)
|
345
|
+
def base_path(*args, ascend: nil)
|
346
|
+
ret = path.join(*args)
|
347
|
+
return ret unless ascend && !ret.exist?
|
348
|
+
|
349
|
+
path.parent.ascend.each do |dir|
|
350
|
+
target = dir.join(*args)
|
351
|
+
return target if target.exist?
|
352
|
+
break if (ascend.is_a?(String) && dir.join(ascend).exist?) || workspace.root == dir || parent&.path == dir
|
353
|
+
end
|
354
|
+
ret
|
323
355
|
end
|
324
356
|
|
325
357
|
def color(val)
|
@@ -328,26 +360,34 @@ module Squared
|
|
328
360
|
end
|
329
361
|
|
330
362
|
def variable_set(key, *val, **kwargs)
|
331
|
-
if
|
363
|
+
if variables.include?(key)
|
332
364
|
case key
|
333
365
|
when :run
|
334
|
-
run_set(*val,
|
366
|
+
run_set(*val, **kwargs)
|
335
367
|
when :script
|
336
368
|
script_set(*val, **kwargs)
|
337
369
|
when :env
|
338
|
-
run_set(output[0], *val,
|
370
|
+
run_set(output[0], *val, **kwargs)
|
371
|
+
when :parent
|
372
|
+
@parent = val if (val = val.first).is_a?(Project::Base)
|
339
373
|
else
|
340
374
|
instance_variable_set :"@#{key}", val.first
|
341
375
|
end
|
342
376
|
else
|
343
|
-
log.warn "variable_set: @#{key} (
|
377
|
+
log.warn "variable_set: @#{key} (private)"
|
344
378
|
end
|
345
379
|
end
|
346
380
|
|
347
|
-
def
|
381
|
+
def variables
|
348
382
|
VAR_SET
|
349
383
|
end
|
350
384
|
|
385
|
+
def allref
|
386
|
+
@ref.reverse_each
|
387
|
+
end
|
388
|
+
|
389
|
+
def version(*); end
|
390
|
+
|
351
391
|
def inspect
|
352
392
|
"#<#{self.class}: #{name} => #{self}>"
|
353
393
|
end
|
@@ -384,12 +424,12 @@ module Squared
|
|
384
424
|
@output[0].nil? && !!@output[1] && respond_to?(:compose)
|
385
425
|
end
|
386
426
|
|
387
|
-
def
|
388
|
-
|
427
|
+
def depend?
|
428
|
+
!!@depend
|
389
429
|
end
|
390
430
|
|
391
|
-
def
|
392
|
-
@
|
431
|
+
def copy?
|
432
|
+
runnable?(@copy) || workspace.task_defined?(name, 'copy')
|
393
433
|
end
|
394
434
|
|
395
435
|
def doc?
|
@@ -400,12 +440,8 @@ module Squared
|
|
400
440
|
!!@test
|
401
441
|
end
|
402
442
|
|
403
|
-
def copy?
|
404
|
-
runnable?(@copy) || workspace.task_defined?("#{name}:copy")
|
405
|
-
end
|
406
|
-
|
407
443
|
def clean?
|
408
|
-
runnable?(@clean) || workspace.task_defined?(
|
444
|
+
runnable?(@clean) || workspace.task_defined?(name, 'clean')
|
409
445
|
end
|
410
446
|
|
411
447
|
def dev?
|
@@ -418,12 +454,16 @@ module Squared
|
|
418
454
|
|
419
455
|
private
|
420
456
|
|
421
|
-
def
|
457
|
+
def puts(*args)
|
458
|
+
puts_oe(*args, pipe: pipe)
|
459
|
+
end
|
460
|
+
|
461
|
+
def run(cmd = @session, var = nil, exception: @exception, sync: true, req: nil, banner: ARG[:BANNER], **)
|
422
462
|
if req && !base_path(req).exist?
|
423
463
|
log.warn "#{req} (not found)"
|
424
464
|
return
|
425
465
|
end
|
426
|
-
cmd =
|
466
|
+
cmd = session_done(cmd)
|
427
467
|
log.info cmd
|
428
468
|
begin
|
429
469
|
if cmd =~ /^\S+:(\S+:?)+$/ && workspace.task_defined?(cmd)
|
@@ -441,50 +481,55 @@ module Squared
|
|
441
481
|
end
|
442
482
|
end
|
443
483
|
|
444
|
-
def run_s(cmd, **kwargs)
|
445
|
-
|
484
|
+
def run_s(*cmd, env: nil, **kwargs)
|
485
|
+
cmd.each { |val| run(val, env, banner: !!verbose, **kwargs) }
|
446
486
|
end
|
447
487
|
|
448
488
|
def run_task(key)
|
449
489
|
return false unless workspace.task_defined?(key)
|
450
490
|
|
451
|
-
invoke(key,
|
491
|
+
invoke(key, **workspace.invokeargs)
|
452
492
|
true
|
453
493
|
end
|
454
494
|
|
455
|
-
def env(key, default = nil,
|
495
|
+
def env(key, default = nil, suffix: nil, equals: nil, ignore: nil, strict: false)
|
456
496
|
a = "#{key}_#{@envname}"
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
ret = ENV.fetch(a, b)
|
497
|
+
ret = if suffix
|
498
|
+
ENV.fetch("#{a}_#{suffix}", '')
|
499
|
+
else
|
500
|
+
ignore = ['0'].freeze if ignore.nil? && !strict
|
501
|
+
ENV[a] || (strict ? '' : ENV.fetch(key, ''))
|
502
|
+
end
|
464
503
|
return ret == equals.to_s unless equals.nil?
|
465
504
|
|
466
|
-
ret.empty? || as_a(ignore).any? { |val| ret == val.to_s } ? default : ret
|
505
|
+
ret.empty? || (ignore && as_a(ignore).any? { |val| ret == val.to_s }) ? default : ret
|
467
506
|
end
|
468
507
|
|
469
|
-
def
|
470
|
-
|
471
|
-
end
|
472
|
-
|
473
|
-
def session(*cmd, prefix: nil)
|
474
|
-
if (val = ENV["#{(prefix || cmd.first).upcase}_OPTIONS"])
|
508
|
+
def session(*cmd, prefix: cmd.first)
|
509
|
+
if (val = env("#{prefix.upcase}_OPTIONS"))
|
475
510
|
split_escape(val).each { |opt| cmd << fill_option(opt) }
|
476
511
|
end
|
477
512
|
@session = JoinSet.new(cmd)
|
478
513
|
end
|
479
514
|
|
480
|
-
def
|
481
|
-
return cmd unless cmd.respond_to?(:done)
|
515
|
+
def session_done(cmd)
|
516
|
+
return cmd.to_s unless cmd.respond_to?(:done)
|
482
517
|
|
483
518
|
raise_error('no args were added', hint: cmd.first || name) unless cmd.size > 1
|
484
519
|
@session = nil if cmd == @session
|
485
520
|
cmd.done
|
486
521
|
end
|
487
522
|
|
523
|
+
def option(*args, prefix: @session&.first, **kwargs)
|
524
|
+
if prefix
|
525
|
+
args.each do |val|
|
526
|
+
ret = env("#{prefix}_#{val.gsub(/\W/, '_')}".upcase, **kwargs)
|
527
|
+
return ret if ret
|
528
|
+
end
|
529
|
+
end
|
530
|
+
nil
|
531
|
+
end
|
532
|
+
|
488
533
|
def print_item(*val)
|
489
534
|
puts unless @@print_order == 0 || stdin?
|
490
535
|
@@print_order += 1
|
@@ -516,33 +561,37 @@ module Squared
|
|
516
561
|
out.join("\n")
|
517
562
|
end
|
518
563
|
|
519
|
-
def print_footer(*lines, sub: nil,
|
564
|
+
def print_footer(*lines, sub: nil, reverse: false, right: false, **kwargs)
|
565
|
+
border = kwargs.key?(:border) ? kwargs[:border] : borderstyle
|
520
566
|
n = Project.max_width(lines)
|
521
567
|
sub = as_a(sub)
|
522
568
|
lines.map! do |val|
|
523
|
-
s = val.ljust(n)
|
569
|
+
s = right ? val.rjust(n) : val.ljust(n)
|
524
570
|
sub.each { |h| s = sub_style(s, **h) }
|
525
571
|
s
|
526
572
|
end
|
527
|
-
ret = [sub_style('-' * n, styles: border), *lines]
|
573
|
+
ret = [sub_style('-' * n, styles: border || theme[:border]), *lines]
|
528
574
|
ret.reverse! if reverse
|
529
575
|
ret.join("\n")
|
530
576
|
end
|
531
577
|
|
532
|
-
def format_desc(action, flag, opts = nil, req:
|
578
|
+
def format_desc(action, flag, opts = nil, req: nil, arg: 'opts*')
|
533
579
|
opts = "#{arg}=#{opts.join(',')}" if opts.is_a?(::Array)
|
534
|
-
|
580
|
+
val = [@desc]
|
581
|
+
if flag
|
582
|
+
val << action
|
583
|
+
else
|
535
584
|
flag = action
|
536
|
-
action = ''
|
537
585
|
end
|
538
|
-
req = opts ? "#{req}," : "[#{req}]"
|
539
|
-
|
586
|
+
req = opts ? "#{req}," : "[#{req}]" if req
|
587
|
+
val << (opts ? "#{flag}[#{req}#{opts}]" : "#{flag}#{req}")
|
588
|
+
message(*val)
|
540
589
|
end
|
541
590
|
|
542
|
-
def format_banner(cmd, banner:
|
591
|
+
def format_banner(cmd, banner: ARG[:BANNER], multiple: false)
|
543
592
|
return unless banner
|
544
593
|
|
545
|
-
if (data = workspace.
|
594
|
+
if (data = workspace.banner_get(*@ref, group: group))
|
546
595
|
client = true
|
547
596
|
else
|
548
597
|
data = { command: true, order: %i[path], styles: theme[:banner], border: theme[:border] }
|
@@ -550,7 +599,26 @@ module Squared
|
|
550
599
|
if verbose
|
551
600
|
out = []
|
552
601
|
out << cmd.sub(/^\S+/, &:upcase) if data[:command]
|
553
|
-
data[:order].each
|
602
|
+
data[:order].each do |val|
|
603
|
+
if val.is_a?(::Array)
|
604
|
+
s = ' '
|
605
|
+
found = false
|
606
|
+
val = val.map do |meth|
|
607
|
+
if meth.is_a?(::String)
|
608
|
+
s = ''
|
609
|
+
meth
|
610
|
+
elsif respond_to?(meth)
|
611
|
+
found = true
|
612
|
+
__send__(meth)
|
613
|
+
end
|
614
|
+
end
|
615
|
+
val = val.compact.join(s)
|
616
|
+
next unless found && !val.empty?
|
617
|
+
elsif (val = __send__(val)).nil?
|
618
|
+
next
|
619
|
+
end
|
620
|
+
out << val.to_s
|
621
|
+
end
|
554
622
|
print_banner(*out, styles: data[:styles], border: data[:border], client: client)
|
555
623
|
elsif multiple && workspace.series.multiple?
|
556
624
|
"## #{__send__(data[:order].first || :path)} ##"
|
@@ -569,8 +637,12 @@ module Squared
|
|
569
637
|
opts.each { |val| @session << val }
|
570
638
|
end
|
571
639
|
|
572
|
-
def append_nocolor
|
573
|
-
@session <<
|
640
|
+
def append_nocolor(flag = nil)
|
641
|
+
@session << '--no-color' if flag || !ARG[:COLOR] || stdin?
|
642
|
+
end
|
643
|
+
|
644
|
+
def task_join(*val)
|
645
|
+
val.join(':')
|
574
646
|
end
|
575
647
|
|
576
648
|
def guard_params(action, flag, args: nil, key: nil, pat: nil)
|
@@ -587,6 +659,26 @@ module Squared
|
|
587
659
|
end
|
588
660
|
end
|
589
661
|
|
662
|
+
def semver(val)
|
663
|
+
return val if val[3]
|
664
|
+
|
665
|
+
val[3] = '.'
|
666
|
+
val[4] = '0'
|
667
|
+
unless val[1]
|
668
|
+
val[1] = '.'
|
669
|
+
val[2] = '0'
|
670
|
+
end
|
671
|
+
val
|
672
|
+
end
|
673
|
+
|
674
|
+
def semmajor(cur, want)
|
675
|
+
(cur[0] == '0' && want[0] == '0' ? cur[2] != want[2] : cur[0] != want[0]) && !want[5]
|
676
|
+
end
|
677
|
+
|
678
|
+
def semscan(val)
|
679
|
+
val.scan(SEM_VER).first
|
680
|
+
end
|
681
|
+
|
590
682
|
def pwd_set(done = nil, &blk)
|
591
683
|
pwd = Pathname.pwd
|
592
684
|
if block_given?
|
@@ -612,39 +704,27 @@ module Squared
|
|
612
704
|
end
|
613
705
|
end
|
614
706
|
|
615
|
-
def
|
616
|
-
unless
|
617
|
-
|
618
|
-
|
707
|
+
def run_set(cmd, val = nil, opts: nil, **)
|
708
|
+
unless @output[1] == false && !@output[0].nil?
|
709
|
+
if opts == false
|
710
|
+
@output[1] = false
|
711
|
+
elsif opts && opts != true
|
712
|
+
@output[1] = opts
|
713
|
+
end
|
619
714
|
end
|
620
|
-
unless
|
621
|
-
val
|
622
|
-
|
715
|
+
unless @output[2] == false
|
716
|
+
if val.is_a?(::Hash)
|
717
|
+
@output[2] = val
|
718
|
+
elsif val == false
|
719
|
+
@output[2] = false
|
720
|
+
end
|
623
721
|
end
|
624
|
-
val
|
625
|
-
end
|
626
|
-
|
627
|
-
def semmajor(cur, want)
|
628
|
-
(cur[0] == '0' && want[0] == '0' ? cur[2] != want[2] : cur[0] != want[0]) && !want[5]
|
629
|
-
end
|
630
|
-
|
631
|
-
def scriptargs
|
632
|
-
{ target: script? ? @output[1] : @output[0], ref: ref, group: group, global: @global }
|
633
|
-
end
|
634
|
-
|
635
|
-
def run_set(cmd, val = nil, *, opts: true, **)
|
636
722
|
@output[0] = cmd
|
637
|
-
@output[1] = if cmd && opts
|
638
|
-
env('BUILD', opts.is_a?(::String) ? opts : nil, suffix: 'OPTS')
|
639
|
-
end
|
640
|
-
if val.is_a?(::Hash)
|
641
|
-
@output[2] = val
|
642
|
-
elsif val == false
|
643
|
-
@output[2] = nil
|
644
|
-
end
|
645
723
|
end
|
646
724
|
|
647
|
-
def script_set(cmd,
|
725
|
+
def script_set(cmd, prod: nil, **)
|
726
|
+
return if @output[1] == false && @output[0].nil?
|
727
|
+
|
648
728
|
@output[0] = nil
|
649
729
|
@output[1] = if @global && cmd.is_a?(::Array)
|
650
730
|
cmd[prod == true ? 1 : 0]
|
@@ -657,14 +737,6 @@ module Squared
|
|
657
737
|
Pathname.new(val).absolute? ? val.to_s.start_with?(File.join(path, '')) : !val.to_s.match?(%r{^\.\.[/\\]})
|
658
738
|
end
|
659
739
|
|
660
|
-
def warning?
|
661
|
-
workspace.warning
|
662
|
-
end
|
663
|
-
|
664
|
-
def stdin?
|
665
|
-
pipe == 0
|
666
|
-
end
|
667
|
-
|
668
740
|
def runnable?(val)
|
669
741
|
case val
|
670
742
|
when ::String
|
@@ -676,10 +748,10 @@ module Squared
|
|
676
748
|
end
|
677
749
|
end
|
678
750
|
|
679
|
-
def from_sync?(val)
|
680
|
-
if invoked?(val)
|
681
|
-
!workspace.task_defined?(
|
682
|
-
elsif workspace.series.sync?(
|
751
|
+
def from_sync?(*val)
|
752
|
+
if invoked?(key = task_join(*val))
|
753
|
+
!workspace.task_defined?(key, 'sync')
|
754
|
+
elsif workspace.series.sync?(task_join(key, 'sync'))
|
683
755
|
true
|
684
756
|
end
|
685
757
|
end
|
@@ -687,12 +759,35 @@ module Squared
|
|
687
759
|
def invoked_sync?(action, val = nil)
|
688
760
|
return true if !val.nil? || from_sync?(ac = workspace.task_name(action))
|
689
761
|
|
690
|
-
return val if group && !(val = from_sync?(
|
691
|
-
return val if (base = workspace.find_base(self)) && !(val = from_sync?(
|
762
|
+
return val if group && !(val = from_sync?(ac, group)).nil?
|
763
|
+
return val if (base = workspace.find_base(self)) && !(val = from_sync?(ac, base.ref)).nil?
|
764
|
+
|
765
|
+
return true if invoked?(name, ac) && (!invoked?(ac) || !workspace.task_defined?(ac, 'sync'))
|
766
|
+
|
767
|
+
val = workspace.series.name_get(action)
|
768
|
+
val == action ? false : invoked_sync?(val)
|
769
|
+
end
|
770
|
+
|
771
|
+
def stdin?
|
772
|
+
pipe == 0
|
773
|
+
end
|
774
|
+
|
775
|
+
def warning?
|
776
|
+
workspace.warning
|
777
|
+
end
|
778
|
+
|
779
|
+
def borderstyle
|
780
|
+
if (data = workspace.banner_get(*@ref, group: group))
|
781
|
+
data[:border]
|
782
|
+
end
|
783
|
+
end
|
692
784
|
|
693
|
-
|
785
|
+
def scriptargs
|
786
|
+
{ target: script? ? @output[1] : @output[0], ref: ref, group: group, global: @global }
|
694
787
|
end
|
695
788
|
end
|
789
|
+
|
790
|
+
Application.base_project = Base
|
696
791
|
end
|
697
792
|
end
|
698
793
|
end
|