squared 0.4.29 → 0.5.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +62 -416
- data/README.md +1279 -650
- data/README.ruby.md +722 -0
- data/lib/squared/common/base.rb +8 -9
- data/lib/squared/common/format.rb +22 -29
- data/lib/squared/common/prompt.rb +46 -47
- data/lib/squared/common/shell.rb +50 -63
- data/lib/squared/common/system.rb +34 -37
- data/lib/squared/common/utils.rb +3 -28
- data/lib/squared/common.rb +2 -1
- data/lib/squared/config.rb +21 -21
- data/lib/squared/version.rb +1 -1
- data/lib/squared/workspace/application.rb +74 -95
- data/lib/squared/workspace/project/base.rb +408 -536
- data/lib/squared/workspace/project/docker.rb +176 -206
- data/lib/squared/workspace/project/git.rb +357 -498
- data/lib/squared/workspace/project/node.rb +180 -286
- data/lib/squared/workspace/project/python.rb +88 -306
- data/lib/squared/workspace/project/ruby.rb +221 -301
- data/lib/squared/workspace/project/support/class.rb +93 -300
- data/lib/squared/workspace/project.rb +0 -10
- data/lib/squared/workspace/repo.rb +54 -93
- data/lib/squared/workspace/series.rb +34 -32
- data/lib/squared/workspace/support/data.rb +3 -2
- data/lib/squared/workspace/support.rb +0 -1
- data/lib/squared/workspace.rb +1 -1
- data/squared.gemspec +5 -5
- metadata +7 -8
- data/lib/squared/common/class.rb +0 -171
- data/lib/squared/workspace/support/base.rb +0 -32
data/lib/squared/common/utils.rb
CHANGED
|
@@ -17,13 +17,13 @@ module Squared
|
|
|
17
17
|
val = val.strip
|
|
18
18
|
return [val, '', ''] unless (i = val.index('='))
|
|
19
19
|
|
|
20
|
-
last = val[
|
|
20
|
+
last = val[i + 1..-1].strip
|
|
21
21
|
quote = ''
|
|
22
22
|
if last =~ /\A(["'])(.+)\1\z/
|
|
23
23
|
last = $2
|
|
24
24
|
quote = $1
|
|
25
25
|
end
|
|
26
|
-
[val[0..
|
|
26
|
+
[val[0..i - 1], last, quote]
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def task_invoke(*cmd, args: [], exception: true, warning: true)
|
|
@@ -88,41 +88,16 @@ module Squared
|
|
|
88
88
|
end
|
|
89
89
|
end
|
|
90
90
|
|
|
91
|
-
def time_offset(val = nil)
|
|
92
|
-
val = DateTime.parse(val) if val.is_a?(::String)
|
|
93
|
-
cur = DateTime.now
|
|
94
|
-
ret = 0
|
|
95
|
-
if (r = /^([+-])(\d+):(\d+):(\d+)$/.match((val || cur).strftime('%::z')))
|
|
96
|
-
ret += (r[1] == '+' ? -1 : 1) * ((r[2].to_i * 60 * 60) + (r[3].to_i * 60) + r[4].to_i) * 1000
|
|
97
|
-
end
|
|
98
|
-
return ret unless val
|
|
99
|
-
|
|
100
|
-
(cur.strftime('%Q').to_i + time_offset) - (val.strftime('%Q').to_i + ret)
|
|
101
|
-
end
|
|
102
|
-
|
|
103
91
|
def time_since(val, ms: true)
|
|
104
92
|
s = ms ? '%s%L' : '%s'
|
|
105
93
|
Time.now.utc.strftime(s).to_i - Time.parse(val).utc.strftime(s).to_i
|
|
106
94
|
end
|
|
107
95
|
|
|
108
|
-
def rand_s(size)
|
|
109
|
-
if RUBY_VERSION >= '3.1'
|
|
110
|
-
require 'random/formatter'
|
|
111
|
-
Random.new.alphanumeric(size)
|
|
112
|
-
else
|
|
113
|
-
(0...size).map { rand(97..122).chr }.join
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
|
|
117
96
|
def env(key, default = nil, suffix: nil, strict: false, equals: nil, ignore: nil)
|
|
118
97
|
ret = env_value(key, suffix: suffix, strict: strict)
|
|
119
98
|
return ret == equals.to_s unless equals.nil?
|
|
120
99
|
|
|
121
|
-
ret.empty? || (ignore &&
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
def env_key(*val)
|
|
125
|
-
val.join('_').gsub(/\W+/, '_').upcase
|
|
100
|
+
ret.empty? || (ignore && as_a(ignore).any? { |val| val.to_s == ret }) ? default : ret
|
|
126
101
|
end
|
|
127
102
|
|
|
128
103
|
def env_value(key, default = '', suffix: nil, strict: false)
|
data/lib/squared/common.rb
CHANGED
data/lib/squared/config.rb
CHANGED
|
@@ -15,7 +15,8 @@ module Squared
|
|
|
15
15
|
def parse(gem, namespace, ext = [pkg])
|
|
16
16
|
require gem
|
|
17
17
|
obj = eval namespace
|
|
18
|
-
|
|
18
|
+
ext = [ext] unless ext.is_a?(Array)
|
|
19
|
+
ext.each { |val| @@mime_obj[val] = [obj, ext] }
|
|
19
20
|
rescue LoadError, NameError => e
|
|
20
21
|
warn e
|
|
21
22
|
nil
|
|
@@ -26,7 +27,7 @@ module Squared
|
|
|
26
27
|
def link(project, main = project.dependfile.basename, name = nil, **kwargs, &blk)
|
|
27
28
|
return unless project.enabled?
|
|
28
29
|
|
|
29
|
-
ret =
|
|
30
|
+
ret = new(main, name, project: project, **kwargs)
|
|
30
31
|
ret.instance_eval(&blk) if block_given?
|
|
31
32
|
ret
|
|
32
33
|
end
|
|
@@ -88,16 +89,16 @@ module Squared
|
|
|
88
89
|
@required = true
|
|
89
90
|
project ? [project, 'not found'] : ['name', 'missing']
|
|
90
91
|
end
|
|
91
|
-
warn log_message(Logger::WARN, msg, subject: self.class, hint: hint)
|
|
92
|
+
warn log_message(Logger::WARN, msg, subject: self.class, hint: hint, pass: true)
|
|
92
93
|
end
|
|
93
94
|
|
|
94
95
|
def build
|
|
95
96
|
return unless enabled?
|
|
96
97
|
|
|
97
|
-
namespace task_name(name) do
|
|
98
|
+
namespace(ns = task_name(name)) do
|
|
98
99
|
@mime.each do |type, items|
|
|
99
100
|
items.each do |command, file, opts|
|
|
100
|
-
next if Rake::Task.task_defined?("#{ns
|
|
101
|
+
next if Rake::Task.task_defined?("#{ns}:#{command}:#{type}")
|
|
101
102
|
|
|
102
103
|
namespace command do
|
|
103
104
|
unless (data = @@mime_obj[type])
|
|
@@ -128,7 +129,7 @@ module Squared
|
|
|
128
129
|
require(gem || type)
|
|
129
130
|
obj = eval namespace
|
|
130
131
|
else
|
|
131
|
-
|
|
132
|
+
as_a(ext).each do |val|
|
|
132
133
|
next unless (data = @@mime_obj[val])
|
|
133
134
|
|
|
134
135
|
obj = data.first
|
|
@@ -136,7 +137,7 @@ module Squared
|
|
|
136
137
|
end
|
|
137
138
|
end
|
|
138
139
|
if obj
|
|
139
|
-
ext << type if (ext =
|
|
140
|
+
ext << type if (ext = as_a(ext)).empty?
|
|
140
141
|
if !file && target?
|
|
141
142
|
ext.each do |val|
|
|
142
143
|
next unless (out = basepath("#{main}.#{val}")).exist?
|
|
@@ -169,7 +170,7 @@ module Squared
|
|
|
169
170
|
end
|
|
170
171
|
|
|
171
172
|
def style(name, *args)
|
|
172
|
-
apply_style
|
|
173
|
+
apply_style theme, name, args
|
|
173
174
|
self
|
|
174
175
|
end
|
|
175
176
|
|
|
@@ -196,7 +197,7 @@ module Squared
|
|
|
196
197
|
private
|
|
197
198
|
|
|
198
199
|
def puts(*args)
|
|
199
|
-
|
|
200
|
+
puts_oe(*args, pipe: pipe)
|
|
200
201
|
end
|
|
201
202
|
|
|
202
203
|
def log
|
|
@@ -212,8 +213,8 @@ module Squared
|
|
|
212
213
|
file = nil
|
|
213
214
|
ext[0] = mime
|
|
214
215
|
elsif file
|
|
215
|
-
keys.
|
|
216
|
-
alt = basepath
|
|
216
|
+
keys.prepend(file)
|
|
217
|
+
alt = basepath("#{main}.{#{ext.join(',')}}")
|
|
217
218
|
file = Dir[alt].first
|
|
218
219
|
else
|
|
219
220
|
alt = main
|
|
@@ -242,15 +243,14 @@ module Squared
|
|
|
242
243
|
[
|
|
243
244
|
{ pat: /\A((?:[^:]|(?<! ):(?! ))+)\z/, styles: theme[:banner] },
|
|
244
245
|
{ pat: /\A(.*?)(<[^>]+>)(.+)\z/m, styles: theme[:undefined], index: 2 },
|
|
245
|
-
{ pat: /\A(
|
|
246
|
-
{ pat: /\A(
|
|
246
|
+
{ pat: /\A((?~ : ))( : (?!undefined).+)\z/m, styles: theme[:key] },
|
|
247
|
+
{ pat: /\A((?~: ): )(-?[\d.]+)(\s*)\z/m, styles: theme[:number],
|
|
247
248
|
index: 2 },
|
|
248
|
-
{ pat: /\A(
|
|
249
|
-
{ pat: /\A(
|
|
250
|
-
{ pat: /\A(
|
|
251
|
-
{ pat: /\A(.+ : )(true|false)(\s*)\z/m, styles: theme[:boolean],
|
|
249
|
+
{ pat: /\A((?~: ): ")(.+)("\s*)\z/m, styles: theme[:string], index: 2 },
|
|
250
|
+
{ pat: /\A((?~: ): \{)(.+)(\}\s*)\z/m, styles: theme[:hash], index: 2 },
|
|
251
|
+
{ pat: /\A((?~: ): \[)(.+)(\]\s*)\z/m, styles: theme[:array],
|
|
252
252
|
index: 2 },
|
|
253
|
-
{ pat: /\A(
|
|
253
|
+
{ pat: /\A((?~: ): (?!undefined))([^"\[{].*)\z/m, styles: theme[:value],
|
|
254
254
|
index: 2 }
|
|
255
255
|
]
|
|
256
256
|
end, border: theme[:border])
|
|
@@ -309,7 +309,7 @@ module Squared
|
|
|
309
309
|
return unless Rake::TaskManager.record_task_metadata
|
|
310
310
|
|
|
311
311
|
val = "#{ext.first}[#{target ? '' : "file?=#{File.basename(main)}.#{ext.last},"}keys+]"
|
|
312
|
-
args = *name.split(':').
|
|
312
|
+
args = *name.split(':').append(command, val)
|
|
313
313
|
if project
|
|
314
314
|
project.workspace.task_desc(*args)
|
|
315
315
|
else
|
|
@@ -346,8 +346,8 @@ module Squared
|
|
|
346
346
|
basepath(file = main + @ext).to_s rescue file
|
|
347
347
|
end
|
|
348
348
|
|
|
349
|
-
def basepath(
|
|
350
|
-
project ? project.basepath(
|
|
349
|
+
def basepath(file)
|
|
350
|
+
project ? project.basepath(file) : Pathname.pwd + file
|
|
351
351
|
end
|
|
352
352
|
end
|
|
353
353
|
end
|
data/lib/squared/version.rb
CHANGED
|
@@ -26,10 +26,10 @@ module Squared
|
|
|
26
26
|
next unless base || obj < impl_project
|
|
27
27
|
|
|
28
28
|
if base
|
|
29
|
-
|
|
29
|
+
@impl_project = obj
|
|
30
30
|
impl_series.base_set(obj)
|
|
31
31
|
else
|
|
32
|
-
kind_project.
|
|
32
|
+
kind_project.prepend(obj)
|
|
33
33
|
obj.tasks&.each { |task| impl_series.add(task, obj) }
|
|
34
34
|
end
|
|
35
35
|
if (args = obj.batchargs)
|
|
@@ -39,7 +39,7 @@ module Squared
|
|
|
39
39
|
impl_series.alias(*args)
|
|
40
40
|
end
|
|
41
41
|
if (args = obj.bannerargs)
|
|
42
|
-
attr_banner.merge(args)
|
|
42
|
+
@attr_banner.merge(args)
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
45
|
end
|
|
@@ -73,7 +73,7 @@ module Squared
|
|
|
73
73
|
end
|
|
74
74
|
|
|
75
75
|
@kind_project = []
|
|
76
|
-
@task_exclude =
|
|
76
|
+
@task_exclude = Set.new
|
|
77
77
|
|
|
78
78
|
attr_reader :root, :home, :main, :prefix, :exception, :warning, :pipe, :verbose, :theme, :series, :closed
|
|
79
79
|
|
|
@@ -92,18 +92,12 @@ module Squared
|
|
|
92
92
|
@prefix = prefix
|
|
93
93
|
@series = Application.series_wrap(self)
|
|
94
94
|
@project = {}
|
|
95
|
-
@kind =
|
|
95
|
+
@kind = {}
|
|
96
96
|
@extensions = []
|
|
97
|
-
@envname =
|
|
98
|
-
@pipe =
|
|
97
|
+
@envname = @main.gsub(/[^\w]+/, '_').upcase.freeze
|
|
98
|
+
@pipe = env_pipe(pipe, (ARG[:OUT] && env(ARG[:OUT])) || 1, root: @home)
|
|
99
99
|
@exception = env_bool exception
|
|
100
|
-
@verbose =
|
|
101
|
-
false
|
|
102
|
-
elsif verbose.nil?
|
|
103
|
-
@pipe != 0
|
|
104
|
-
else
|
|
105
|
-
env_bool(verbose, verbose.is_a?(String) ? @pipe != 0 : verbose, index: true)
|
|
106
|
-
end
|
|
100
|
+
@verbose = env_bool(verbose, verbose.nil? || verbose.is_a?(String) ? @pipe != 0 : verbose, index: true)
|
|
107
101
|
@warning = @verbose != false
|
|
108
102
|
@closed = false
|
|
109
103
|
if common
|
|
@@ -112,20 +106,20 @@ module Squared
|
|
|
112
106
|
else
|
|
113
107
|
@theme = {}
|
|
114
108
|
end
|
|
115
|
-
@chain =
|
|
109
|
+
@chain = {}
|
|
116
110
|
@script = {
|
|
117
|
-
group:
|
|
118
|
-
ref:
|
|
111
|
+
group: {},
|
|
112
|
+
ref: {},
|
|
119
113
|
group!: {},
|
|
120
114
|
ref!: {}
|
|
121
115
|
}.freeze
|
|
122
116
|
@events = {
|
|
123
|
-
group:
|
|
124
|
-
ref:
|
|
117
|
+
group: {},
|
|
118
|
+
ref: {}
|
|
125
119
|
}.freeze
|
|
126
120
|
@pass = {
|
|
127
|
-
group:
|
|
128
|
-
ref:
|
|
121
|
+
group: {},
|
|
122
|
+
ref: {},
|
|
129
123
|
global: {},
|
|
130
124
|
pattern: []
|
|
131
125
|
}.freeze
|
|
@@ -140,19 +134,20 @@ module Squared
|
|
|
140
134
|
return unless @pipe.is_a?(Pathname)
|
|
141
135
|
|
|
142
136
|
msg = "Session started on #{Time.now} by #{@main}"
|
|
143
|
-
bord = '#' *
|
|
137
|
+
bord = '#' * s.size
|
|
144
138
|
puts bord, msg, bord
|
|
145
139
|
end
|
|
146
140
|
|
|
147
141
|
def build(parallel: [], pass: nil, **kwargs)
|
|
148
142
|
return self unless enabled? && !@closed
|
|
149
143
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
144
|
+
if kwargs[:pattern].is_a?(Array)
|
|
145
|
+
kwargs[:parallel] = parallel.map(&:to_s)
|
|
146
|
+
else
|
|
147
|
+
kwargs[:pattern] = []
|
|
148
|
+
kwargs[:parallel] = parallel.reject { |val| val.is_a?(Regexp) && (kwargs[:pattern] << val) }
|
|
149
|
+
.map(&:to_s)
|
|
150
|
+
end
|
|
156
151
|
@pass[:pattern].concat(pass.map { |val| val.is_a?(Regexp) ? val : val.to_s }) if pass
|
|
157
152
|
@project.each_value do |proj|
|
|
158
153
|
if proj.enabled?
|
|
@@ -225,12 +220,12 @@ module Squared
|
|
|
225
220
|
if arg.include?(':') || (keys && !keys.include?(arg))
|
|
226
221
|
task_name(arg)
|
|
227
222
|
else
|
|
228
|
-
|
|
223
|
+
/#{Regexp.escape(arg)}:/
|
|
229
224
|
end
|
|
230
225
|
end
|
|
231
226
|
end
|
|
232
|
-
data =
|
|
233
|
-
@chain[task_name(task.to_s)] << data
|
|
227
|
+
data = Support::ChainData.new(action, step, ns.call(with), ns.call(before), ns.call(after), sync)
|
|
228
|
+
(@chain[task_name(task.to_s)] ||= []) << data
|
|
234
229
|
self
|
|
235
230
|
end
|
|
236
231
|
|
|
@@ -272,9 +267,9 @@ module Squared
|
|
|
272
267
|
|
|
273
268
|
def pass(name, group: @group, ref: @ref, &blk)
|
|
274
269
|
data = if group
|
|
275
|
-
@pass[:group][group]
|
|
270
|
+
@pass[:group][group] ||= {}
|
|
276
271
|
elsif ref
|
|
277
|
-
@pass[:ref][ref]
|
|
272
|
+
@pass[:ref][ref] ||= {}
|
|
278
273
|
else
|
|
279
274
|
@pass[:global]
|
|
280
275
|
end
|
|
@@ -283,7 +278,7 @@ module Squared
|
|
|
283
278
|
end
|
|
284
279
|
|
|
285
280
|
def banner(*args, command: true, styles: nil, border: nil, group: @group, ref: @ref)
|
|
286
|
-
data =
|
|
281
|
+
data = Support::BannerData.new(command, [], check_style(styles, empty: false), check_style(border))
|
|
287
282
|
args.each do |meth|
|
|
288
283
|
if meth.is_a?(Array)
|
|
289
284
|
found = false
|
|
@@ -306,24 +301,31 @@ module Squared
|
|
|
306
301
|
elsif !Application.attr_banner.include?(meth = meth.to_sym)
|
|
307
302
|
next
|
|
308
303
|
end
|
|
309
|
-
data
|
|
304
|
+
data.order << meth
|
|
310
305
|
end
|
|
311
|
-
data = {} if !command && data[:order].empty?
|
|
312
306
|
if group
|
|
313
307
|
label = :group
|
|
314
|
-
items =
|
|
308
|
+
items = as_a group
|
|
315
309
|
else
|
|
316
310
|
label = :ref
|
|
317
|
-
items =
|
|
311
|
+
items = ref ? as_a(ref) : [:_]
|
|
318
312
|
end
|
|
319
313
|
items.each { |val| @banner[label][val.to_sym] = data }
|
|
320
314
|
self
|
|
321
315
|
end
|
|
322
316
|
|
|
323
317
|
def add(path, project = nil, **kwargs, &blk)
|
|
324
|
-
kwargs =
|
|
325
|
-
ref = kwargs.key?(:ref)
|
|
326
|
-
|
|
318
|
+
kwargs = @withargs.yield_self { |data| data.dup.update(kwargs) } if @withargs
|
|
319
|
+
ref = if kwargs.key?(:ref)
|
|
320
|
+
kwargs = kwargs.dup unless @withargs
|
|
321
|
+
kwargs.delete(:ref)
|
|
322
|
+
elsif @ref.is_a?(Symbol)
|
|
323
|
+
@ref
|
|
324
|
+
end
|
|
325
|
+
if @group.is_a?(String) && !kwargs.key?(:group)
|
|
326
|
+
kwargs = kwargs.dup unless @withargs
|
|
327
|
+
kwargs[:group] = @group
|
|
328
|
+
end
|
|
327
329
|
path = root + path
|
|
328
330
|
project = (project || path.basename).to_s
|
|
329
331
|
name = task_name project
|
|
@@ -353,14 +355,14 @@ module Squared
|
|
|
353
355
|
end
|
|
354
356
|
.each do |dir, basename, opts|
|
|
355
357
|
args = kwargs.dup
|
|
356
|
-
args.
|
|
358
|
+
args.update(opts) if opts
|
|
357
359
|
add(dir, basename, group: val, **args, &blk)
|
|
358
360
|
end
|
|
359
361
|
self
|
|
360
362
|
end
|
|
361
363
|
|
|
362
364
|
def compose(name, &blk)
|
|
363
|
-
namespace(task_name(name), &blk)
|
|
365
|
+
namespace(task_name(name), &blk) if block_given?
|
|
364
366
|
self
|
|
365
367
|
end
|
|
366
368
|
|
|
@@ -372,7 +374,7 @@ module Squared
|
|
|
372
374
|
def style(obj, *args, target: nil, empty: false)
|
|
373
375
|
data = nil
|
|
374
376
|
if target
|
|
375
|
-
|
|
377
|
+
as_a(target).each_with_index do |key, i|
|
|
376
378
|
if i == 0
|
|
377
379
|
break unless (data = __get__(:theme)[key.to_sym])
|
|
378
380
|
else
|
|
@@ -392,7 +394,7 @@ module Squared
|
|
|
392
394
|
}
|
|
393
395
|
data.each do |key, val|
|
|
394
396
|
key = key.to_s
|
|
395
|
-
if key.
|
|
397
|
+
if key.start_with?(/(\\A|\^)/) || key.match?(/(\\z|\$)\z/)
|
|
396
398
|
@describe[:replace] << [Regexp.new(key), val]
|
|
397
399
|
else
|
|
398
400
|
@describe[val.is_a?(Regexp) ? :pattern : :alias][key.to_s] = val
|
|
@@ -410,13 +412,13 @@ module Squared
|
|
|
410
412
|
if ret.empty?
|
|
411
413
|
ret = @project.select { |_, item| item.ref?(ref) }.map(&:last) if ref
|
|
412
414
|
if ret.empty? && (path || name)
|
|
413
|
-
path &&= rootpath
|
|
415
|
+
path &&= rootpath path
|
|
414
416
|
name &&= name.to_s
|
|
415
417
|
proj = @project.find { |_, item| (path && item.path == path) || (name && item.name == name) }&.last
|
|
416
418
|
ret << proj if proj
|
|
417
419
|
end
|
|
418
420
|
end
|
|
419
|
-
return (group || ref ? ret : ret
|
|
421
|
+
return (group || ref ? ret : ret[0]) unless block_given?
|
|
420
422
|
|
|
421
423
|
ret.each(&blk)
|
|
422
424
|
self
|
|
@@ -478,7 +480,7 @@ module Squared
|
|
|
478
480
|
end
|
|
479
481
|
|
|
480
482
|
def task_namespace(val, first: false)
|
|
481
|
-
return unless (ret = val.to_s.split(':')).size > 1
|
|
483
|
+
return nil unless (ret = val.to_s.split(':')).size > 1
|
|
482
484
|
|
|
483
485
|
first ? ret.first : task_join(*ret[0..-2])
|
|
484
486
|
end
|
|
@@ -510,7 +512,7 @@ module Squared
|
|
|
510
512
|
obj.allref.each do |ref|
|
|
511
513
|
next unless obj.has?(key, ref) && (alt = data[ref])
|
|
512
514
|
|
|
513
|
-
ret = task_resolve
|
|
515
|
+
ret = task_resolve obj, alt
|
|
514
516
|
break unless ret.empty?
|
|
515
517
|
end
|
|
516
518
|
else
|
|
@@ -530,7 +532,7 @@ module Squared
|
|
|
530
532
|
end
|
|
531
533
|
|
|
532
534
|
def format_desc(val, opts = nil, arg: 'opts*', before: nil, after: nil, out: false)
|
|
533
|
-
return unless TASK_METADATA
|
|
535
|
+
return unless TASK_METADATA
|
|
534
536
|
|
|
535
537
|
val = val.split(':') if val.is_a?(String)
|
|
536
538
|
if before || after || opts
|
|
@@ -616,25 +618,13 @@ module Squared
|
|
|
616
618
|
end
|
|
617
619
|
|
|
618
620
|
def home?
|
|
619
|
-
|
|
621
|
+
!(proj = find(home)).nil? && proj.enabled?
|
|
620
622
|
end
|
|
621
623
|
|
|
622
624
|
def windows?
|
|
623
625
|
Rake::Win32.windows?
|
|
624
626
|
end
|
|
625
627
|
|
|
626
|
-
def mri?
|
|
627
|
-
RUBY_ENGINE == 'ruby'
|
|
628
|
-
end
|
|
629
|
-
|
|
630
|
-
def jruby?
|
|
631
|
-
RUBY_ENGINE == 'jruby'
|
|
632
|
-
end
|
|
633
|
-
|
|
634
|
-
def truffleruby?
|
|
635
|
-
RUBY_ENGINE == 'truffleruby'
|
|
636
|
-
end
|
|
637
|
-
|
|
638
628
|
def docker?
|
|
639
629
|
!Dir['/.dockerenv', '/docker-*.{sh,d}'].empty?
|
|
640
630
|
end
|
|
@@ -671,10 +661,6 @@ module Squared
|
|
|
671
661
|
{ exception: exception, warning: warning }
|
|
672
662
|
end
|
|
673
663
|
|
|
674
|
-
def size
|
|
675
|
-
@project.size
|
|
676
|
-
end
|
|
677
|
-
|
|
678
664
|
def to_s
|
|
679
665
|
(home? ? home : root).to_s
|
|
680
666
|
end
|
|
@@ -688,14 +674,9 @@ module Squared
|
|
|
688
674
|
private
|
|
689
675
|
|
|
690
676
|
def __build__(default: nil, **)
|
|
691
|
-
unless task_defined?(
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
end
|
|
695
|
-
end
|
|
696
|
-
if default && task_defined?(out = task_name(default))
|
|
697
|
-
task Rake.application.default_task_name => out
|
|
698
|
-
end
|
|
677
|
+
return unless default && task_defined?(out = task_name(default))
|
|
678
|
+
|
|
679
|
+
task Rake.application.default_task_name => out
|
|
699
680
|
end
|
|
700
681
|
|
|
701
682
|
def __chain__(*)
|
|
@@ -717,7 +698,7 @@ module Squared
|
|
|
717
698
|
else
|
|
718
699
|
step = 0
|
|
719
700
|
catch :found do
|
|
720
|
-
has = ->(c, d) { c.any? { |e| e.is_a?(Regexp) ? d.
|
|
701
|
+
has = ->(c, d) { c.any? { |e| e.is_a?(Regexp) ? d.start_with?(e) : d == e } }
|
|
721
702
|
w = data.with
|
|
722
703
|
a = data.after
|
|
723
704
|
b = data.before
|
|
@@ -776,7 +757,7 @@ module Squared
|
|
|
776
757
|
end
|
|
777
758
|
end
|
|
778
759
|
if step == -1
|
|
779
|
-
level.
|
|
760
|
+
level.prepend(data.action)
|
|
780
761
|
step = 0
|
|
781
762
|
elsif step > 0
|
|
782
763
|
(level[step -= 1] ||= []).concat(data.action)
|
|
@@ -797,8 +778,8 @@ module Squared
|
|
|
797
778
|
format_desc key
|
|
798
779
|
task key do
|
|
799
780
|
unless failed.empty? && group.empty?
|
|
800
|
-
puts
|
|
801
|
-
subject: 'failed placement', hint: false
|
|
781
|
+
puts log_message(Logger::ERROR, *(failed + group.map { |val| val.action }.flatten),
|
|
782
|
+
subject: 'failed placement', hint: false, pass: true)
|
|
802
783
|
end
|
|
803
784
|
cols = level.flatten(1).map(&:size).max
|
|
804
785
|
level.each_with_index do |grp, n|
|
|
@@ -814,13 +795,13 @@ module Squared
|
|
|
814
795
|
end
|
|
815
796
|
end
|
|
816
797
|
|
|
817
|
-
def puts(*args
|
|
818
|
-
|
|
798
|
+
def puts(*args)
|
|
799
|
+
puts_oe(*args, pipe: pipe)
|
|
819
800
|
end
|
|
820
801
|
|
|
821
802
|
def script_command(task, val, group, ref, on, &blk)
|
|
822
803
|
if block_given?
|
|
823
|
-
val =
|
|
804
|
+
val = Support::RunData.new(val, blk)
|
|
824
805
|
elsif !val
|
|
825
806
|
return self
|
|
826
807
|
end
|
|
@@ -832,8 +813,8 @@ module Squared
|
|
|
832
813
|
items = as_a(ref, :to_sym)
|
|
833
814
|
end
|
|
834
815
|
items.each do |name|
|
|
835
|
-
@script[label][name][task] = val
|
|
836
|
-
@events[label][name][task] = on if on.is_a?(Hash)
|
|
816
|
+
(@script[label][name] ||= {})[task] = val
|
|
817
|
+
(@events[label][name] ||= {})[task] = on if on.is_a?(Hash)
|
|
837
818
|
end
|
|
838
819
|
self
|
|
839
820
|
end
|
|
@@ -841,26 +822,24 @@ module Squared
|
|
|
841
822
|
def script_set(data, group: nil, ref: nil)
|
|
842
823
|
data.freeze
|
|
843
824
|
if group
|
|
844
|
-
|
|
825
|
+
as_a(group).each { |val| @script[:group!][val.to_sym] = data }
|
|
845
826
|
elsif ref
|
|
846
|
-
|
|
827
|
+
as_a(ref).each { |val| @script[:ref!][val.to_sym] = data }
|
|
847
828
|
else
|
|
848
829
|
@script[:ref!][:''] = data
|
|
849
830
|
end
|
|
850
831
|
end
|
|
851
832
|
|
|
852
833
|
def data_get(*args, group: nil, ref: nil, target: nil)
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
elsif ref.is_a?(Enumerable)
|
|
834
|
+
target[:group][group.to_sym] if group
|
|
835
|
+
if ref.is_a?(Enumerable)
|
|
856
836
|
ref.each do |key|
|
|
857
|
-
next unless target[:ref]
|
|
837
|
+
next unless (ret = target[:ref][key])
|
|
858
838
|
|
|
859
|
-
ret = target[:ref][key]
|
|
860
839
|
return ret if args.empty? || args.any? { |val| ret.key?(val) }
|
|
861
840
|
end
|
|
862
841
|
nil
|
|
863
|
-
elsif ref
|
|
842
|
+
elsif ref
|
|
864
843
|
target[:ref][ref]
|
|
865
844
|
end
|
|
866
845
|
end
|
|
@@ -868,7 +847,7 @@ module Squared
|
|
|
868
847
|
def root?(path, pass: [])
|
|
869
848
|
return false unless path.directory?
|
|
870
849
|
|
|
871
|
-
path.
|
|
850
|
+
path.each_child do |c|
|
|
872
851
|
name = c.basename.to_s
|
|
873
852
|
next if c.to_s == __FILE__ || (@main == name && c.directory? && c.empty?) || pass.any? { |val| val == name }
|
|
874
853
|
|
|
@@ -878,14 +857,14 @@ module Squared
|
|
|
878
857
|
end
|
|
879
858
|
|
|
880
859
|
def script?(state, target: nil, pat: nil, group: nil, ref: baseref, global: false)
|
|
881
|
-
data = script_find
|
|
860
|
+
data = script_find ref, group
|
|
882
861
|
if global
|
|
883
862
|
target = data[:script] || data[:run] if target.nil?
|
|
884
863
|
pat = data[state] if pat.nil?
|
|
885
864
|
end
|
|
886
865
|
return false if state == :prod && data[:dev] == true && data[:global]
|
|
887
866
|
|
|
888
|
-
target && pat.is_a?(Regexp) ?
|
|
867
|
+
target && pat.is_a?(Regexp) ? as_a(target).any?(pat) : pat == true
|
|
889
868
|
end
|
|
890
869
|
|
|
891
870
|
def scriptobj
|