squared 0.0.9 → 0.0.10
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.md +2 -6
- data/README.ruby.md +112 -33
- data/lib/squared/common/base.rb +12 -4
- data/lib/squared/common/format.rb +45 -31
- data/lib/squared/common/shell.rb +16 -7
- data/lib/squared/common/system.rb +5 -5
- data/lib/squared/common/task.rb +1 -1
- data/lib/squared/common/utils.rb +60 -0
- data/lib/squared/common.rb +1 -0
- data/lib/squared/config.rb +18 -15
- data/lib/squared/version.rb +1 -1
- data/lib/squared/workspace/application.rb +104 -70
- data/lib/squared/workspace/project/base.rb +304 -118
- data/lib/squared/workspace/project/git.rb +43 -52
- data/lib/squared/workspace/project/node.rb +125 -126
- data/lib/squared/workspace/project/python.rb +23 -3
- data/lib/squared/workspace/project/ruby.rb +129 -116
- data/lib/squared/workspace/repo.rb +82 -88
- data/lib/squared/workspace/series.rb +15 -13
- metadata +3 -2
@@ -4,11 +4,13 @@ module Squared
|
|
4
4
|
module Workspace
|
5
5
|
module Project
|
6
6
|
class Ruby < Git
|
7
|
+
VAR_SET = %i[version autodetect].freeze
|
7
8
|
GEMFILE = %w[Gemfile Gemfile.lock gem.deps.rb Isolate].freeze
|
9
|
+
RUBY_DIR = [*GEMFILE, *::Rake::Application::DEFAULT_RAKEFILES, 'README.rdoc'].freeze
|
8
10
|
OPT_INSTALL = %w[no-cache force].freeze
|
9
11
|
OPT_UPDATE = %w[redownload local strict conservative group=s].freeze
|
10
12
|
OPT_OUTDATED = %w[local strict pre only-explicit group=s].freeze
|
11
|
-
private_constant :GEMFILE, :OPT_INSTALL, :OPT_UPDATE, :OPT_OUTDATED
|
13
|
+
private_constant :VAR_SET, :GEMFILE, :RUBY_DIR, :OPT_INSTALL, :OPT_UPDATE, :OPT_OUTDATED
|
12
14
|
|
13
15
|
class << self
|
14
16
|
def populate(*); end
|
@@ -19,7 +21,7 @@ module Squared
|
|
19
21
|
|
20
22
|
def is_a?(val)
|
21
23
|
if (val = as_path(val))
|
22
|
-
|
24
|
+
RUBY_DIR.any? { |file| val.join(file).exist? }
|
23
25
|
else
|
24
26
|
super
|
25
27
|
end
|
@@ -40,8 +42,14 @@ module Squared
|
|
40
42
|
|
41
43
|
def initialize(*, version: nil, autodetect: false, **kwargs)
|
42
44
|
super
|
43
|
-
|
44
|
-
|
45
|
+
if @pass.include?(Ruby.ref)
|
46
|
+
initialize_ref(Ruby.ref)
|
47
|
+
initialize_logger(**kwargs)
|
48
|
+
else
|
49
|
+
initialize_build(Ruby.ref, **kwargs)
|
50
|
+
initialize_env(**kwargs)
|
51
|
+
end
|
52
|
+
@version = env('BUILD', version, suffix: 'VERSION')
|
45
53
|
@autodetect = autodetect
|
46
54
|
index = GEMFILE.index { |file| base_path(file).exist? } || 0
|
47
55
|
@gemfile = base_path(GEMFILE[index])
|
@@ -83,7 +91,7 @@ module Squared
|
|
83
91
|
|
84
92
|
desc format_desc(action, nil, 'command*')
|
85
93
|
task action, [:command] do |_, args|
|
86
|
-
rake
|
94
|
+
rake(*args.to_a)
|
87
95
|
end
|
88
96
|
end
|
89
97
|
else
|
@@ -186,7 +194,7 @@ module Squared
|
|
186
194
|
|
187
195
|
def copy(from: 'lib', glob: '**/*', gemdir: @gemdir, override: false)
|
188
196
|
if @copy && !override
|
189
|
-
return super if @copy
|
197
|
+
return super if runnable?(@copy)
|
190
198
|
|
191
199
|
from = @copy[:from] if @copy.key?(:from)
|
192
200
|
glob = @copy[:glob] if @copy.key?(:glob)
|
@@ -202,99 +210,108 @@ module Squared
|
|
202
210
|
b = dest.join(val)
|
203
211
|
c = glob[i] || '**/*'
|
204
212
|
log.warn "cp #{a.join(c)} #{b}"
|
205
|
-
copy_d(a, b, glob: c, verbose: verbose
|
213
|
+
copy_d(a, b, glob: c, verbose: verbose)
|
206
214
|
end
|
207
215
|
end
|
208
216
|
|
209
217
|
def outdated(rev = nil, opts: [])
|
210
218
|
cmd = bundle_session 'outdated', rev && "--#{rev}"
|
211
219
|
append_bundle opts, OPT_OUTDATED
|
212
|
-
cmd = cmd
|
220
|
+
cmd = close_session(cmd)
|
213
221
|
log.info cmd
|
214
|
-
|
222
|
+
banner = format_banner(cmd)
|
223
|
+
if invoked_sync?('outdated', rev)
|
224
|
+
print_item banner
|
225
|
+
banner = nil
|
226
|
+
end
|
215
227
|
start = 0
|
216
228
|
found = 0
|
217
229
|
major = 0
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
styles = %i[green bold]
|
238
|
-
major += 1
|
239
|
-
else
|
240
|
-
styles[0] = cur[2] == lat[2] ? :yellow : :green
|
241
|
-
end
|
242
|
-
when '<', '<='
|
243
|
-
if c <= v
|
230
|
+
pwd_set do
|
231
|
+
IO.popen("#{cmd} --no-color").each do |line|
|
232
|
+
if start > 0
|
233
|
+
unless stdin?
|
234
|
+
data = line.scan(SEM_VER)
|
235
|
+
cur = data.shift
|
236
|
+
lat = data.shift
|
237
|
+
if cur && lat
|
238
|
+
semver(cur)
|
239
|
+
semver(lat)
|
240
|
+
c = cur.join
|
241
|
+
l = lat.join
|
242
|
+
styles = []
|
243
|
+
data.each do |val|
|
244
|
+
break unless (req = /(>=?|=|~>|!=|<=?) (#{Regexp.escape(val.join)})/.match(line))
|
245
|
+
|
246
|
+
v = semver(val).join
|
247
|
+
case req[1]
|
248
|
+
when '>', '>='
|
244
249
|
if semmajor(cur, lat)
|
245
250
|
styles = %i[green bold]
|
246
251
|
major += 1
|
247
252
|
else
|
253
|
+
styles[0] = cur[2] == lat[2] ? :yellow : :green
|
254
|
+
end
|
255
|
+
when '<', '<='
|
256
|
+
if c <= v
|
257
|
+
if semmajor(cur, lat)
|
258
|
+
styles = %i[green bold]
|
259
|
+
major += 1
|
260
|
+
else
|
261
|
+
styles[0] = :yellow
|
262
|
+
end
|
263
|
+
end
|
264
|
+
when '!='
|
265
|
+
if c == l
|
266
|
+
styles.clear
|
267
|
+
else
|
268
|
+
styles[1] = :bold
|
269
|
+
end
|
270
|
+
when '~>'
|
271
|
+
if c < v && cur[0] == val[0] && !semmajor(cur, val)
|
248
272
|
styles[0] = :yellow
|
273
|
+
elsif semmajor(val, lat)
|
274
|
+
styles[1] = :underline
|
275
|
+
else
|
276
|
+
styles[1] = :bold
|
249
277
|
end
|
250
278
|
end
|
251
|
-
when '!='
|
252
|
-
if c == l
|
253
|
-
styles.clear
|
254
|
-
else
|
255
|
-
styles[1] = :bold
|
256
|
-
end
|
257
|
-
when '~>'
|
258
|
-
if c < v && cur[0] == val[0] && !semmajor(cur, val)
|
259
|
-
styles[0] = :yellow
|
260
|
-
elsif semmajor(lat, val)
|
261
|
-
styles[1] = :underline
|
262
|
-
else
|
263
|
-
styles[1] = :bold
|
264
|
-
end
|
265
279
|
end
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
280
|
+
unless styles.empty?
|
281
|
+
case styles[0]
|
282
|
+
when :green
|
283
|
+
line = sub_style(line, pat: /^(\S+)(.+)$/, styles: theme[styles[1] == :bold ? :major : :active])
|
284
|
+
found += 1
|
285
|
+
when :yellow
|
286
|
+
found += 1
|
287
|
+
end
|
288
|
+
styles = styles.compact
|
289
|
+
.map { |s| s == :green || s == :yellow ? color(s) : s }
|
290
|
+
.flatten
|
291
|
+
line = sub_style(line, pat: /^((?:\S+\s+){2})(#{Regexp.escape(l)})(.+)$/, styles: styles,
|
292
|
+
index: 2)
|
274
293
|
end
|
275
|
-
line = sub_style(line, pat: /^((?:\S+\s+){2})(#{Regexp.escape(l)})(.+)$/,
|
276
|
-
styles: styles.compact, index: 2)
|
277
294
|
end
|
278
295
|
end
|
296
|
+
puts "#{start.to_s.rjust(2)}. #{line}"
|
297
|
+
start += 1
|
298
|
+
elsif line =~ /^Gem /
|
299
|
+
print_item banner if banner
|
300
|
+
unless stdin?
|
301
|
+
puts print_footer(" # #{line.chomp}", reverse: true, sub: [
|
302
|
+
{ pat: /^(.+)(Gem)(.+)$/, styles: theme[:header], index: 2 },
|
303
|
+
{ pat: /^(.+)(Latest)(.+)$/, styles: theme[:header], index: 2 }
|
304
|
+
])
|
305
|
+
end
|
306
|
+
start += 1
|
279
307
|
end
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
{ pat: /^(.+)(Gem)(.+)$/, styles: theme[:header], index: 2 },
|
286
|
-
{ pat: /^(.+)(Latest)(.+)$/, styles: theme[:header], index: 2 }
|
287
|
-
])
|
288
|
-
end
|
289
|
-
start += 1
|
308
|
+
end
|
309
|
+
if found > 0
|
310
|
+
puts print_footer(empty_status('Updates are available', 'major', major, always: true))
|
311
|
+
elsif start == 0
|
312
|
+
puts 'No updates were found'
|
290
313
|
end
|
291
314
|
end
|
292
|
-
if found > 0
|
293
|
-
puts print_footer(empty_status('Updates are available', 'major', major, always: true))
|
294
|
-
elsif start == 0
|
295
|
-
puts 'No updates were found'
|
296
|
-
end
|
297
|
-
store_pwd true
|
298
315
|
end
|
299
316
|
|
300
317
|
def update(flag, opts: [])
|
@@ -322,12 +339,8 @@ module Squared
|
|
322
339
|
run_s "bundle #{flag} #{cmd.join(' ')}"
|
323
340
|
end
|
324
341
|
|
325
|
-
def rake(cmd)
|
326
|
-
|
327
|
-
run_s 'rake'
|
328
|
-
else
|
329
|
-
cmd.each { |val| run_s "rake #{val}" }
|
330
|
-
end
|
342
|
+
def rake(*cmd)
|
343
|
+
run_s(cmd.empty? ? 'rake' : cmd.map { |val| "rake #{val}" })
|
331
344
|
end
|
332
345
|
|
333
346
|
def rakefile
|
@@ -335,8 +348,22 @@ module Squared
|
|
335
348
|
base_path(file) if file
|
336
349
|
end
|
337
350
|
|
351
|
+
def variable_set(key, *val, **)
|
352
|
+
case key
|
353
|
+
when :gemfile
|
354
|
+
@gemfile = base_path(val.first)
|
355
|
+
else
|
356
|
+
super
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
360
|
+
def variable_all
|
361
|
+
ret = super + VAR_SET
|
362
|
+
ret.freeze
|
363
|
+
end
|
364
|
+
|
338
365
|
def copy?
|
339
|
-
return true if @copy.is_a?(::
|
366
|
+
return true if super || (@copy.is_a?(::Hash) && copy.fetch(:gemdir, nil))
|
340
367
|
return gemdir? if @gemdir
|
341
368
|
|
342
369
|
if @version && (val = ENV['GEM_HOME'])
|
@@ -346,33 +373,27 @@ module Squared
|
|
346
373
|
return false unless @autodetect
|
347
374
|
|
348
375
|
unsafe = ->(hint) { raise_error('failed to parse', hint: hint) }
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
next unless data
|
361
|
-
|
362
|
-
log.warn "using version #{v} (given #{@version})" if @version && @version != v
|
363
|
-
@version = v
|
364
|
-
break
|
365
|
-
end
|
366
|
-
unsafe.('path') unless data
|
367
|
-
@gemdir = Pathname.new(data[1].strip).join(gempath)
|
368
|
-
rescue StandardError => e
|
369
|
-
log.error e
|
370
|
-
@version = nil
|
371
|
-
@gemdir = nil
|
372
|
-
@autodetect = false
|
373
|
-
else
|
374
|
-
gemdir?
|
376
|
+
out = `gem -C #{shell_quote(path)} list --local -d #{project}`
|
377
|
+
data = /#{Regexp.escape(project)} \(([^)]+)\)/.match(out)
|
378
|
+
unsafe.('version') unless data
|
379
|
+
ver = data[1].split(/\s*,\s*/)
|
380
|
+
ver.unshift(@version).uniq! if @version
|
381
|
+
ver.each do |v|
|
382
|
+
next unless (data = /\(#{Regexp.escape(v)}(?:,[^)]+|\b)\):([^\n]+)/.match(out))
|
383
|
+
|
384
|
+
log.warn "using version #{v} (given #{@version})" if @version && @version != v
|
385
|
+
@version = v
|
386
|
+
break
|
375
387
|
end
|
388
|
+
unsafe.('path') unless data
|
389
|
+
@gemdir = Pathname.new(data[1].strip).join(gempath)
|
390
|
+
rescue StandardError => e
|
391
|
+
log.error e
|
392
|
+
@version = nil
|
393
|
+
@gemdir = nil
|
394
|
+
@autodetect = false
|
395
|
+
else
|
396
|
+
gemdir?
|
376
397
|
end
|
377
398
|
|
378
399
|
def outdated?
|
@@ -400,14 +421,6 @@ module Squared
|
|
400
421
|
end
|
401
422
|
end
|
402
423
|
|
403
|
-
def append_repeat(flag, opts)
|
404
|
-
opts.each { |val| @session << "--#{flag}=#{shell_escape(val, quote: true)}" }
|
405
|
-
end
|
406
|
-
|
407
|
-
def append_value(opts)
|
408
|
-
opts.each { |val| @session << val }
|
409
|
-
end
|
410
|
-
|
411
424
|
def gem_session(*cmd)
|
412
425
|
ret = session('gem', *cmd)
|
413
426
|
if (val = env('GEM_CONFIG_FILE'))
|
@@ -6,8 +6,23 @@ module Squared
|
|
6
6
|
include Common
|
7
7
|
include Format
|
8
8
|
include System
|
9
|
+
include Utils
|
9
10
|
|
10
|
-
|
11
|
+
class << self
|
12
|
+
def read_manifest(path)
|
13
|
+
require 'rexml/document'
|
14
|
+
return unless (file = path.join('.repo/manifest.xml')).exist?
|
15
|
+
|
16
|
+
doc = REXML::Document.new(file.read)
|
17
|
+
doc.elements['manifest/include'].attributes['name']&.sub('.xml', '')
|
18
|
+
end
|
19
|
+
|
20
|
+
def empty?(dir)
|
21
|
+
dir.empty? || (dir.children.size == 1 && dir.join(dir.children.first).to_s == __FILE__)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def repo(url, manifest = 'latest', run: nil, script: nil, dev: nil, prod: nil, ref: @ref, group: @group)
|
11
26
|
@home = if (val = env('REPO_HOME'))
|
12
27
|
home = Pathname.new(val)
|
13
28
|
if main == home.basename.to_s
|
@@ -16,71 +31,79 @@ module Squared
|
|
16
31
|
@root = nil unless home.directory?
|
17
32
|
elsif !@root.exist?
|
18
33
|
@root.mkpath
|
19
|
-
elsif !
|
20
|
-
@root = nil unless
|
34
|
+
elsif !repo_install?
|
35
|
+
@root = nil unless repo_confirm
|
21
36
|
end
|
22
37
|
end
|
23
38
|
raise_error('REPO_HOME', val, hint: 'invalid') unless @root
|
24
|
-
|
25
39
|
home.realdirpath
|
26
40
|
elsif (val = env('REPO_ROOT'))
|
27
41
|
@root = Pathname.new(val).realdirpath
|
28
42
|
if !@root.exist?
|
29
43
|
@root.mkpath
|
30
|
-
elsif !
|
31
|
-
raise_error('REPO_ROOT', val, hint: 'exist') unless
|
44
|
+
elsif !repo_install?(parent: true)
|
45
|
+
raise_error('REPO_ROOT', val, hint: 'exist') unless repo_confirm
|
32
46
|
end
|
33
47
|
@root.join(main).realdirpath
|
34
48
|
else
|
35
|
-
|
49
|
+
repo_install?(@home) ? @home.join(main) : @home
|
36
50
|
end
|
37
51
|
@root = @home.parent
|
38
52
|
@manifest_url = url
|
39
53
|
@manifest = manifest
|
40
|
-
|
41
|
-
if group
|
42
|
-
@script[:group][:_] = group.to_s
|
43
|
-
elsif ref
|
44
|
-
@script[:ref][:_] = ref.to_sym
|
45
|
-
end
|
46
|
-
end
|
54
|
+
data = script_obj
|
47
55
|
if repo?
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
56
|
+
if script
|
57
|
+
if (val = env('REPO_BUILD'))
|
58
|
+
data[:script] = case val
|
59
|
+
when 'verbose'
|
60
|
+
@verbose = 1
|
61
|
+
if script.is_a?(::Array)
|
62
|
+
script[0] = "#{script[0]}:verbose"
|
63
|
+
script
|
64
|
+
else
|
65
|
+
"#{script}:verbose"
|
66
|
+
end
|
67
|
+
when 'silent'
|
68
|
+
@verbose = false
|
69
|
+
@warning = false
|
70
|
+
script
|
71
|
+
else
|
72
|
+
val
|
73
|
+
end
|
74
|
+
data[:env] = true
|
75
|
+
else
|
76
|
+
data[:script] = script
|
77
|
+
end
|
78
|
+
elsif (val = env('REPO_BUILD'))
|
79
|
+
data[:run] = val
|
80
|
+
data[:env] = true
|
67
81
|
else
|
68
|
-
|
82
|
+
data[:run] = run
|
83
|
+
end
|
84
|
+
data[:global] = true
|
85
|
+
data[:dev] = env_match('REPO_DEV', dev, suffix: @envname)
|
86
|
+
data[:prod] = env_match('REPO_PROD', prod, suffix: @envname)
|
87
|
+
if (val = env('REPO_GROUP'))
|
88
|
+
script_set(data, group: val.split(','))
|
89
|
+
found = true
|
90
|
+
end
|
91
|
+
if (val = env('REPO_REF'))
|
92
|
+
script_set(data, ref: val.split(','))
|
93
|
+
found = true
|
69
94
|
end
|
70
|
-
|
71
|
-
|
72
|
-
false
|
73
|
-
when '1'
|
74
|
-
true
|
75
|
-
else
|
76
|
-
@warning && !empty?(@root)
|
77
|
-
end
|
95
|
+
script_set(data, group: group, ref: ref) unless found
|
96
|
+
@warning = env_match('REPO_WARN', @warning && !Repo.empty?(@root), suffix: @envname) != false
|
78
97
|
@extensions << :__repo__
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
98
|
+
elsif script || run
|
99
|
+
if script
|
100
|
+
data[:script] = script
|
101
|
+
else
|
102
|
+
data[:run] = run
|
103
|
+
end
|
104
|
+
data[:dev] = dev
|
105
|
+
data[:prod] = prod
|
106
|
+
script_set(data, group: group, ref: ref)
|
84
107
|
end
|
85
108
|
self
|
86
109
|
end
|
@@ -90,7 +113,7 @@ module Squared
|
|
90
113
|
def __repo__(**kwargs)
|
91
114
|
kwargs.delete(:parallel) if env('REPO_SYNC', ignore: '0')
|
92
115
|
|
93
|
-
branch = env('REPO_MANIFEST') || read_manifest
|
116
|
+
branch = env('REPO_MANIFEST') || Repo.read_manifest(root)
|
94
117
|
target = branch || @manifest
|
95
118
|
stage = nil
|
96
119
|
failfast = true
|
@@ -115,12 +138,9 @@ module Squared
|
|
115
138
|
end
|
116
139
|
end
|
117
140
|
status = lambda do |val, alt = nil|
|
118
|
-
ver = branch || alt
|
119
|
-
|
120
|
-
|
121
|
-
else
|
122
|
-
'inactive'
|
123
|
-
end
|
141
|
+
return 'inactive' unless (ver = branch || alt)
|
142
|
+
|
143
|
+
message(@prefix || '', 'repo', val.sub('{0}', 'opts*=force,rebase,detach,gc,no-update,no-fail'), ver)
|
124
144
|
end
|
125
145
|
|
126
146
|
namespace task_name('repo') do |repo|
|
@@ -130,12 +150,12 @@ module Squared
|
|
130
150
|
stage ||= 'all'
|
131
151
|
repo['sync'].invoke
|
132
152
|
@project.select do |_, proj|
|
133
|
-
next
|
153
|
+
next unless proj.enabled?(Project::Base.ref)
|
134
154
|
|
135
155
|
proj.depend if proj.depend?
|
136
156
|
proj.build?
|
137
157
|
end
|
138
|
-
.each_value { |proj| proj.has?(
|
158
|
+
.each_value { |proj| proj.has?('dev') ? proj.refresh : proj.build }
|
139
159
|
end
|
140
160
|
|
141
161
|
desc status.("init[manifest?=#{target},{0}]", target)
|
@@ -166,51 +186,25 @@ module Squared
|
|
166
186
|
end
|
167
187
|
end
|
168
188
|
|
169
|
-
def
|
170
|
-
require 'rexml/document'
|
171
|
-
return unless (file = root_path('.repo/manifest.xml')).exist?
|
172
|
-
|
173
|
-
doc = REXML::Document.new(file.read)
|
174
|
-
doc.elements['manifest/include'].attributes['name']&.sub('.xml', '')
|
175
|
-
end
|
176
|
-
|
177
|
-
def confirm_install
|
189
|
+
def repo_confirm
|
178
190
|
return false unless root.directory?
|
179
191
|
|
180
192
|
path = sub_style(root, styles: theme[:inline])
|
181
193
|
@override = confirm(
|
182
194
|
"#{log_title(:warn)} \"#{path}\" is not empty. Continue with installation? [y/N] ",
|
183
|
-
|
195
|
+
'N',
|
184
196
|
timeout: env('REPO_TIMEOUT', 15, ignore: '0')
|
185
197
|
)
|
186
198
|
end
|
187
199
|
|
188
|
-
def bool_match(val, pat)
|
189
|
-
case val
|
190
|
-
when nil, ''
|
191
|
-
pat
|
192
|
-
when '0'
|
193
|
-
false
|
194
|
-
when '1'
|
195
|
-
true
|
196
|
-
else
|
197
|
-
Regexp.new(val)
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
200
|
def repo?
|
202
|
-
!@manifest_url.nil? && (
|
203
|
-
end
|
204
|
-
|
205
|
-
def empty?(dir)
|
206
|
-
dir.empty? || (dir.children.size == 1 && dir.join(dir.children.first).to_s == __FILE__)
|
201
|
+
!@manifest_url.nil? && (repo_install? || !!@override)
|
207
202
|
end
|
208
203
|
|
209
|
-
def
|
210
|
-
return true if empty?(dir) || dir.join('.repo').directory?
|
211
|
-
return false unless dir == root && env('REPO_HOME').nil? && !env('REPO_ROOT').nil?
|
204
|
+
def repo_install?(dir = root, parent: false)
|
205
|
+
return true if Repo.empty?(dir) || dir.join('.repo').directory?
|
212
206
|
|
213
|
-
root.children.none? { |
|
207
|
+
parent && root.children.none? { |ent| ent.directory? && ent.basename.to_s[0] != '.' && ent.to_s != home.to_s }
|
214
208
|
end
|
215
209
|
end
|
216
210
|
|
@@ -46,7 +46,7 @@ module Squared
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def __set__(key)
|
49
|
-
|
49
|
+
@data[key.to_sym] ||= []
|
50
50
|
end
|
51
51
|
|
52
52
|
def __populate__(proj)
|
@@ -54,11 +54,13 @@ module Squared
|
|
54
54
|
|
55
55
|
group, parent, id = @session.values
|
56
56
|
ws = proj.workspace
|
57
|
-
|
57
|
+
ref = Project::Base.ref
|
58
|
+
@data.each do |key, items|
|
58
59
|
task = "#{proj.name}:#{key}"
|
59
|
-
unless include?(key) ? proj.has?(key
|
60
|
-
alt = TASK_ALIAS[key]
|
61
|
-
|
60
|
+
unless (base = include?(key)) ? proj.has?(key, ref) : ws.task_extend?(proj, key)
|
61
|
+
next if (base && !proj.ref?(ref)) || (alt = TASK_ALIAS[key]).nil?
|
62
|
+
|
63
|
+
task = "#{proj.name}:#{alt}"
|
62
64
|
end
|
63
65
|
next unless ws.task_defined?(task)
|
64
66
|
|
@@ -77,9 +79,9 @@ module Squared
|
|
77
79
|
|
78
80
|
def __build__(parallel: [], **)
|
79
81
|
group, parent, id = @session.values
|
80
|
-
merge!(parent) if id.uniq.size > 1
|
81
|
-
merge!(group)
|
82
|
-
each do |key, items|
|
82
|
+
@data.merge!(parent) if id.uniq.size > 1
|
83
|
+
@data.merge!(group)
|
84
|
+
@data.each do |key, items|
|
83
85
|
next if items.empty?
|
84
86
|
|
85
87
|
key = @workspace.task_name(name = key.to_s)
|
@@ -103,14 +105,14 @@ module Squared
|
|
103
105
|
end
|
104
106
|
TASK_ALIAS.each_key do |key|
|
105
107
|
suf = ":#{key}"
|
106
|
-
|
108
|
+
@data[key].clear unless @data[key].any? { |val| val.end_with?(suf) }
|
107
109
|
end
|
108
110
|
@multiple += sync
|
109
111
|
@session = nil
|
110
112
|
end
|
111
113
|
|
112
114
|
def some?(key)
|
113
|
-
|
115
|
+
@data.key?(key) && !@data[key].empty?
|
114
116
|
end
|
115
117
|
|
116
118
|
def include?(key)
|
@@ -136,15 +138,15 @@ module Squared
|
|
136
138
|
private
|
137
139
|
|
138
140
|
def method_missing(key, *)
|
139
|
-
raise NoMethodError, key unless key?(key)
|
141
|
+
raise NoMethodError, key unless @data.key?(key)
|
140
142
|
|
141
|
-
|
143
|
+
@data[key]
|
142
144
|
end
|
143
145
|
|
144
146
|
def already_invoked?(list, val)
|
145
147
|
return list.include?(val) && Common::Task.invoked?(val) if val
|
146
148
|
|
147
|
-
::Rake::Task.tasks.any? { |
|
149
|
+
::Rake::Task.tasks.any? { |obj| obj.already_invoked && list.include?(obj.name) }
|
148
150
|
end
|
149
151
|
end
|
150
152
|
end
|