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
@@ -4,29 +4,38 @@ module Squared
|
|
4
4
|
module Workspace
|
5
5
|
module Project
|
6
6
|
class Node < Git
|
7
|
+
include Common::Prompt
|
8
|
+
|
7
9
|
class << self
|
8
10
|
def populate(*); end
|
9
11
|
|
10
12
|
def tasks
|
11
|
-
|
13
|
+
%i[outdated].freeze
|
14
|
+
end
|
15
|
+
|
16
|
+
def batchargs
|
17
|
+
[ref, { refresh: %i[build copy] }]
|
18
|
+
end
|
19
|
+
|
20
|
+
def aliasargs
|
21
|
+
[ref, { refresh: :build }]
|
12
22
|
end
|
13
23
|
|
14
24
|
def prod?
|
15
25
|
ENV['NODE_ENV'] == 'production'
|
16
26
|
end
|
17
27
|
|
18
|
-
def
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
super
|
23
|
-
end
|
28
|
+
def config?(val)
|
29
|
+
return false unless (val = as_path(val))
|
30
|
+
|
31
|
+
val.join('package.json').exist?
|
24
32
|
end
|
25
33
|
end
|
26
34
|
|
27
35
|
@@tasks[ref] = {
|
28
|
-
install: %i[force frozen dedupe],
|
29
|
-
outdated: %i[major minor patch],
|
36
|
+
install: %i[force frozen dedupe].freeze,
|
37
|
+
outdated: %i[major minor patch].freeze,
|
38
|
+
bump: %i[major minor patch].freeze,
|
30
39
|
run: nil
|
31
40
|
}.freeze
|
32
41
|
|
@@ -58,11 +67,55 @@ module Squared
|
|
58
67
|
if flags.nil?
|
59
68
|
case action
|
60
69
|
when :run
|
61
|
-
desc format_desc(action, nil, 'command
|
70
|
+
desc format_desc(action, nil, 'command+|^index|#,pattern*')
|
62
71
|
task action, [:command] do |_, args|
|
63
|
-
|
64
|
-
|
65
|
-
|
72
|
+
if args.command == '#'
|
73
|
+
list = read_scripts
|
74
|
+
grep = args.extras.map { |val| Regexp.new(val) }
|
75
|
+
lines = []
|
76
|
+
if (pad = list.size) > 0
|
77
|
+
pad = pad.to_s.size
|
78
|
+
list.each_with_index do |val, i|
|
79
|
+
next unless grep.empty? || grep.any? { |pat| pat.match?(val[0]) }
|
80
|
+
|
81
|
+
lines << "#{(i + 1).to_s.rjust(pad)}. #{val[0]}"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
if lines.empty?
|
85
|
+
lines = ['No scripts were found:', '']
|
86
|
+
unless args.extras.empty?
|
87
|
+
i = 0
|
88
|
+
lines += args.extras.to_a.map { |s| "#{i += 1}. #{s}" }
|
89
|
+
lines << ''
|
90
|
+
end
|
91
|
+
lines << package.to_s
|
92
|
+
pat = /^(#{Regexp.escape(lines.last)})(.*)$/
|
93
|
+
else
|
94
|
+
pat = /^(\s*\d+\.)(.+)$/
|
95
|
+
end
|
96
|
+
emphasize(lines, title: task_join(name, 'run[^N]'), border: borderstyle, sub: [
|
97
|
+
headerstyle,
|
98
|
+
{ pat: pat, styles: theme[:active] }
|
99
|
+
])
|
100
|
+
else
|
101
|
+
cmd = args.to_a
|
102
|
+
guard_params(action, 'command', args: cmd)
|
103
|
+
list = nil
|
104
|
+
cmd.each do |val|
|
105
|
+
if (data = /\A\^(\d+)\z/.match(val))
|
106
|
+
list ||= read_scripts
|
107
|
+
n = data[1].to_i
|
108
|
+
if (item = list[n - 1])
|
109
|
+
val = item.first
|
110
|
+
elsif exception
|
111
|
+
raise_error("requested index #{n}", hint: "total #{list.size}")
|
112
|
+
else
|
113
|
+
next log.warn "run script #{n} of #{list.size} (out of range)"
|
114
|
+
end
|
115
|
+
end
|
116
|
+
run compose(val, script: true)
|
117
|
+
end
|
118
|
+
end
|
66
119
|
end
|
67
120
|
end
|
68
121
|
else
|
@@ -75,10 +128,15 @@ module Squared
|
|
75
128
|
depend(flag)
|
76
129
|
end
|
77
130
|
when :outdated
|
78
|
-
desc format_desc(action, flag, %w[prune interactive dry-run], arg: 'opts?')
|
131
|
+
desc format_desc(action, flag, %w[prune interactive dry-run].freeze, arg: 'opts?')
|
79
132
|
task flag, [:opts] do |_, args|
|
80
133
|
outdated(flag, opts: args.to_a)
|
81
134
|
end
|
135
|
+
else
|
136
|
+
desc format_desc(action, flag)
|
137
|
+
task flag do
|
138
|
+
__send__(action, flag)
|
139
|
+
end
|
82
140
|
end
|
83
141
|
end
|
84
142
|
end
|
@@ -87,17 +145,17 @@ module Squared
|
|
87
145
|
end
|
88
146
|
end
|
89
147
|
|
90
|
-
def copy(from: 'build', glob: '**/*',
|
148
|
+
def copy(from: 'build', glob: '**/*', into: 'node_modules', scope: nil, also: nil, override: false)
|
91
149
|
if @copy && !override
|
92
150
|
return super if runnable?(@copy)
|
93
151
|
|
94
152
|
from = @copy[:from] if @copy.key?(:from)
|
95
153
|
glob = @copy[:glob] if @copy.key?(:glob)
|
96
|
-
subdir = @copy[:subdir] if @copy.key?(:subdir)
|
97
154
|
into = @copy[:into] if @copy.key?(:into)
|
155
|
+
scope = @copy[:scope] if @copy.key?(:scope)
|
98
156
|
also = @copy[:also] if @copy.key?(:also)
|
99
157
|
end
|
100
|
-
items = [path
|
158
|
+
items = [path != workspace.home && workspace.home? ? workspace.home : nil]
|
101
159
|
items += as_a(also) if also
|
102
160
|
items.each_with_index do |dir, i|
|
103
161
|
if i == 0
|
@@ -113,7 +171,7 @@ module Squared
|
|
113
171
|
when ::Hash
|
114
172
|
glob = '**/*'
|
115
173
|
dest = nil
|
116
|
-
|
174
|
+
scope = nil
|
117
175
|
dir.each do |key, val|
|
118
176
|
case key.to_sym
|
119
177
|
when :target
|
@@ -122,8 +180,8 @@ module Squared
|
|
122
180
|
from = val
|
123
181
|
when :glob
|
124
182
|
glob = val
|
125
|
-
when :
|
126
|
-
|
183
|
+
when :scope
|
184
|
+
scope = val
|
127
185
|
when :into
|
128
186
|
into = val
|
129
187
|
end
|
@@ -131,18 +189,17 @@ module Squared
|
|
131
189
|
when Project::Base
|
132
190
|
dest = dir.path
|
133
191
|
end
|
134
|
-
next unless into
|
135
192
|
end
|
136
193
|
next unless dest&.directory?
|
137
194
|
|
138
195
|
from = base_path(from)
|
139
|
-
dest = dest.join(
|
140
|
-
log.
|
196
|
+
dest = dest.join(into, scope || project)
|
197
|
+
(glob = as_a(glob)).each { |val| log.info "cp #{from.join(val)} #{dest}" }
|
141
198
|
copy_d(from, dest, glob: glob, verbose: verbose)
|
142
199
|
end
|
143
200
|
end
|
144
201
|
|
145
|
-
def depend(flag = nil)
|
202
|
+
def depend(flag = nil, sync: invoked_sync?('depend', flag))
|
146
203
|
if @depend && !flag
|
147
204
|
super
|
148
205
|
elsif outdated?
|
@@ -165,7 +222,7 @@ module Squared
|
|
165
222
|
'--frozen-lockfile'
|
166
223
|
end
|
167
224
|
cmd << '--production' if flag && prod?
|
168
|
-
cmd << '--ignore-engines' unless
|
225
|
+
cmd << '--ignore-engines' unless option('ignore-engines', equals: '0')
|
169
226
|
end
|
170
227
|
elsif pnpm?
|
171
228
|
cmd = session 'pnpm'
|
@@ -179,11 +236,11 @@ module Squared
|
|
179
236
|
end
|
180
237
|
end
|
181
238
|
cmd << '--prod' if flag && prod?
|
182
|
-
if (val =
|
239
|
+
if (val = option('public-hoist-pattern', ignore: false))
|
183
240
|
split_escape(val).each { |opt| cmd << "--public-hoist-pattern=#{shell_escape(opt, quote: true)}" }
|
184
241
|
end
|
185
242
|
cmd << '--ignore-workspace' if env('NODE_WORKSPACES', equals: '0')
|
186
|
-
append_nocolor
|
243
|
+
append_nocolor option('no-color')
|
187
244
|
else
|
188
245
|
cmd = session 'npm'
|
189
246
|
if flag == :dedupe
|
@@ -197,17 +254,23 @@ module Squared
|
|
197
254
|
end
|
198
255
|
cmd << '--omit=dev' if flag && prod?
|
199
256
|
cmd << '--workspaces=false' if env('NODE_WORKSPACES', equals: '0')
|
200
|
-
cmd << '--package-lock=false' if
|
201
|
-
append_nocolor
|
257
|
+
cmd << '--package-lock=false' if option('package-lock', equals: '0')
|
258
|
+
append_nocolor option('no-color')
|
202
259
|
end
|
203
260
|
append_loglevel
|
204
|
-
run(sync:
|
261
|
+
run(sync: sync)
|
205
262
|
end
|
206
263
|
end
|
207
264
|
|
208
265
|
def outdated(rev = nil, opts: [])
|
209
|
-
dryrun = opts.include?('dry-run')
|
210
|
-
|
266
|
+
dryrun = opts.include?('dry-run')
|
267
|
+
if pnpm? && read_packagemanager(version: '7.15')
|
268
|
+
cmd = 'pnpm outdated'
|
269
|
+
dryrun ||= !option('dry-run', prefix: 'pnpm').nil?
|
270
|
+
else
|
271
|
+
cmd = 'npm outdated'
|
272
|
+
dryrun ||= !option('dry-run', prefix: 'npm').nil?
|
273
|
+
end
|
211
274
|
log.info cmd
|
212
275
|
banner = format_banner("#{cmd}#{dryrun ? ' --dry-run' : ''}", multiple: true)
|
213
276
|
if invoked_sync?('outdated', rev)
|
@@ -226,7 +289,7 @@ module Squared
|
|
226
289
|
unless data.empty?
|
227
290
|
JSON.parse(data).each_pair do |key, val|
|
228
291
|
val = val.find { |obj| obj['dependent'] == json['name'] } if val.is_a?(::Array)
|
229
|
-
next unless val && (file = dep1[key] || dep2[key])
|
292
|
+
next unless val && (file = dep1[key] || dep2[key]) && file != '*'
|
230
293
|
|
231
294
|
latest = val['latest']
|
232
295
|
ch = file[0]
|
@@ -238,11 +301,11 @@ module Squared
|
|
238
301
|
avail << [key, file, latest, true]
|
239
302
|
next
|
240
303
|
end
|
241
|
-
want = rev == :major && latest.match(SEM_VER) && !
|
304
|
+
want = rev == :major && (ver = latest.match(SEM_VER)) && !ver[6] ? latest : val['wanted']
|
242
305
|
next unless (val['current'] != want || file != want) && (want.match?(SEM_VER) || !file.match?(SEM_VER))
|
243
306
|
|
244
|
-
f = semver(file
|
245
|
-
w = semver(want
|
307
|
+
f = semver(semscan(file))
|
308
|
+
w = semver(semscan(want))
|
246
309
|
a = f[0]
|
247
310
|
b = f[2]
|
248
311
|
c = w[0]
|
@@ -294,7 +357,7 @@ module Squared
|
|
294
357
|
col2 = size_col.(found, 1) + 4
|
295
358
|
found.each_with_index do |item, i|
|
296
359
|
a, b, c, d, e = item
|
297
|
-
if inter && (rev != :major || e || semmajor(item[5], item[6])) && !confirm_outdated(a, c, d)
|
360
|
+
if inter && (rev != :major || e || semmajor(item[5], item[6])) && !confirm_outdated(a, c, d, e)
|
298
361
|
cur = -1
|
299
362
|
else
|
300
363
|
cur = modified
|
@@ -354,12 +417,14 @@ module Squared
|
|
354
417
|
end
|
355
418
|
end
|
356
419
|
|
357
|
-
def compose(opts)
|
420
|
+
def compose(opts, flags = nil, script: false)
|
421
|
+
return unless opts && script
|
422
|
+
|
358
423
|
ret = session (if yarn?
|
359
424
|
'yarn'
|
360
425
|
else
|
361
426
|
pnpm? ? 'pnpm' : 'npm'
|
362
|
-
end), 'run'
|
427
|
+
end), 'run', flags
|
363
428
|
append_loglevel
|
364
429
|
case opts
|
365
430
|
when ::Enumerable
|
@@ -372,6 +437,57 @@ module Squared
|
|
372
437
|
ret
|
373
438
|
end
|
374
439
|
|
440
|
+
def bump(flag)
|
441
|
+
return unless (ver = version)
|
442
|
+
|
443
|
+
seg = semscan(ver)
|
444
|
+
case flag
|
445
|
+
when :major
|
446
|
+
if seg[0] != '0' || seg[2].nil?
|
447
|
+
seg[0] = seg[0].succ
|
448
|
+
else
|
449
|
+
seg[2] = seg[2].succ
|
450
|
+
end
|
451
|
+
when :minor
|
452
|
+
if seg[0] == '0'
|
453
|
+
seg[4] &&= seg[4].succ
|
454
|
+
else
|
455
|
+
seg[2] = seg[2].succ
|
456
|
+
end
|
457
|
+
when :patch
|
458
|
+
seg[4] &&= seg[4].succ
|
459
|
+
end
|
460
|
+
unless (out = seg.join) == ver
|
461
|
+
begin
|
462
|
+
doc = package.read
|
463
|
+
if doc.sub!(/"version"\s*:\s*"#{ver}"/, "\"version\": \"#{out}\"")
|
464
|
+
package.write(doc)
|
465
|
+
log.info "bump version #{ver} to #{out} (#{flag})"
|
466
|
+
if verbose
|
467
|
+
major = flag == :major
|
468
|
+
emphasize("version: #{out}", title: name, border: borderstyle, sub: [
|
469
|
+
headerstyle,
|
470
|
+
{ pat: /^(version:)( )(\S+)(.*)$/, styles: color(major ? :green : :yellow), index: 3 },
|
471
|
+
{ pat: /^(version:)(.*)$/, styles: theme[major ? :major : :active] }
|
472
|
+
])
|
473
|
+
elsif stdin?
|
474
|
+
puts out
|
475
|
+
end
|
476
|
+
else
|
477
|
+
raise_error('not found', hint: 'version')
|
478
|
+
end
|
479
|
+
rescue StandardError => e
|
480
|
+
log.debug e
|
481
|
+
raise
|
482
|
+
end
|
483
|
+
end
|
484
|
+
end
|
485
|
+
|
486
|
+
def version
|
487
|
+
read_packagemanager
|
488
|
+
@pm[:version]
|
489
|
+
end
|
490
|
+
|
375
491
|
def install_type(prog = nil)
|
376
492
|
prog ||= yarn? ? :yarn : :pnpm
|
377
493
|
key = :"#{prog}?"
|
@@ -379,6 +495,10 @@ module Squared
|
|
379
495
|
@pm[prog] || 0
|
380
496
|
end
|
381
497
|
|
498
|
+
def depend?
|
499
|
+
@depend != false && (!@depend.nil? || outdated?)
|
500
|
+
end
|
501
|
+
|
382
502
|
def copy?
|
383
503
|
super || @copy.is_a?(::Hash)
|
384
504
|
end
|
@@ -388,8 +508,8 @@ module Squared
|
|
388
508
|
end
|
389
509
|
|
390
510
|
def yarn?
|
391
|
-
(@pm[:yarn] ||= if base_path('yarn.lock').exist?
|
392
|
-
if (rc = base_path('.yarnrc.yml')).exist?
|
511
|
+
(@pm[:yarn] ||= if base_path('yarn.lock', ascend: find_package).exist?
|
512
|
+
if (rc = base_path('.yarnrc.yml', ascend: find_package)).exist?
|
393
513
|
begin
|
394
514
|
require 'yaml'
|
395
515
|
doc = YAML.load_file(rc)
|
@@ -408,10 +528,10 @@ module Squared
|
|
408
528
|
end
|
409
529
|
|
410
530
|
def pnpm?
|
411
|
-
(@pm[:pnpm] ||= if base_path('pnpm-lock.yaml').exist?
|
531
|
+
(@pm[:pnpm] ||= if base_path('pnpm-lock.yaml', ascend: find_package).exist?
|
412
532
|
begin
|
413
533
|
require 'yaml'
|
414
|
-
doc = YAML.load_file(base_path('node_modules/.modules.yaml'))
|
534
|
+
doc = YAML.load_file(base_path('node_modules/.modules.yaml', ascend: find_package))
|
415
535
|
@pm[:_] = doc['packageManager']
|
416
536
|
case doc['nodeLinker']
|
417
537
|
when 'hoisted'
|
@@ -429,6 +549,15 @@ module Squared
|
|
429
549
|
end) > 0
|
430
550
|
end
|
431
551
|
|
552
|
+
def workspaces?
|
553
|
+
if pnpm?
|
554
|
+
base_path('pnpm-workspace.yaml').exist?
|
555
|
+
else
|
556
|
+
read_packagemanager
|
557
|
+
@pm[:workspaces].is_a?(::Array)
|
558
|
+
end
|
559
|
+
end
|
560
|
+
|
432
561
|
def dev?
|
433
562
|
!Node.prod? && super
|
434
563
|
end
|
@@ -439,6 +568,36 @@ module Squared
|
|
439
568
|
|
440
569
|
private
|
441
570
|
|
571
|
+
def read_packagemanager(version: nil)
|
572
|
+
if @pm[:_].nil?
|
573
|
+
doc = JSON.parse(package.read)
|
574
|
+
@pm[:_] = (val = doc['packageManager']) ? val[0..(val.index('+') || 0) - 1] : false
|
575
|
+
@pm[:scripts] = doc['scripts']
|
576
|
+
@pm[:version] = doc['version']
|
577
|
+
@pm[:workspaces] = doc['workspaces']
|
578
|
+
end
|
579
|
+
rescue StandardError => e
|
580
|
+
log.debug e if package.exist?
|
581
|
+
@pm[:_] = false
|
582
|
+
nil
|
583
|
+
else
|
584
|
+
return if !@pm[:_] || (version && @pm[:_][@pm[:_].index('@') + 1..-1] < version)
|
585
|
+
|
586
|
+
@pm[:_]
|
587
|
+
end
|
588
|
+
|
589
|
+
def read_install
|
590
|
+
return unless (ret = env('NODE_INSTALL'))
|
591
|
+
|
592
|
+
@pm[:_] ||= ret if ret.include?('@')
|
593
|
+
ret
|
594
|
+
end
|
595
|
+
|
596
|
+
def read_scripts
|
597
|
+
read_packagemanager
|
598
|
+
@pm[:scripts].is_a?(Hash) ? @pm[:scripts].to_a : []
|
599
|
+
end
|
600
|
+
|
442
601
|
def append_loglevel
|
443
602
|
level = env('NODE_LOGLEVEL')
|
444
603
|
silent = !verbose || level == 'silent'
|
@@ -471,43 +630,31 @@ module Squared
|
|
471
630
|
end
|
472
631
|
end
|
473
632
|
|
474
|
-
def confirm_outdated(pkg, ver, rev)
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
a = sub_style(rev, styles: theme[:header])
|
633
|
+
def confirm_outdated(pkg, ver, rev, lock)
|
634
|
+
a = sub_style(case rev
|
635
|
+
when 1
|
636
|
+
'MAJOR'
|
637
|
+
when 3
|
638
|
+
'MINOR'
|
639
|
+
else
|
640
|
+
'PATCH'
|
641
|
+
end, styles: theme[:header])
|
484
642
|
b = sub_style("#{pkg} #{ver}", styles: theme[:inline])
|
485
|
-
c, d = rev ==
|
486
|
-
|
643
|
+
c, d = rev == 1 || lock ? ['y/N', 'N'] : ['Y/n', 'Y']
|
644
|
+
e = lock ? " #{sub_style('(locked)', styles: color(:red))}" : ''
|
645
|
+
confirm("Upgrade to #{a}? #{b}#{e} [#{c}] ", d, timeout: 60)
|
487
646
|
end
|
488
647
|
|
489
|
-
def
|
490
|
-
if
|
491
|
-
doc = JSON.parse(package.read)
|
492
|
-
@pm[:_] = (val = doc['packageManager']) ? val[0..(val.index('+') || 0) - 1] : false
|
493
|
-
end
|
494
|
-
rescue StandardError => e
|
495
|
-
log.warn e if package.exist?
|
496
|
-
@pm[:_] = false
|
497
|
-
nil
|
498
|
-
else
|
499
|
-
return unless @pm[:_]
|
500
|
-
|
501
|
-
ver ? @pm[:_][@pm[:_].index('@') + 1..-1] >= ver : @pm[:_]
|
648
|
+
def find_package
|
649
|
+
'package.json' if parent&.has?('outdated', Node.ref)
|
502
650
|
end
|
503
651
|
|
504
|
-
def
|
505
|
-
|
506
|
-
|
507
|
-
@pm[:_] ||= ret if ret.include?('@')
|
508
|
-
ret
|
652
|
+
def headerstyle
|
653
|
+
{ pat: /^(\S+)(\s+)$/, styles: theme[:header] }
|
509
654
|
end
|
510
655
|
end
|
656
|
+
|
657
|
+
Application.implement Node
|
511
658
|
end
|
512
659
|
end
|
513
660
|
end
|
@@ -12,21 +12,21 @@ module Squared
|
|
12
12
|
|
13
13
|
class << self
|
14
14
|
def populate(*); end
|
15
|
+
def batchargs(*); end
|
16
|
+
def aliasargs(*); end
|
15
17
|
|
16
18
|
def tasks
|
17
|
-
|
19
|
+
%i[outdated].freeze
|
18
20
|
end
|
19
21
|
|
20
22
|
def venv?
|
21
23
|
Dir.exist?(ENV.fetch('VIRTUAL_ENV', ''))
|
22
24
|
end
|
23
25
|
|
24
|
-
def
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
super
|
29
|
-
end
|
26
|
+
def config?(val)
|
27
|
+
return false unless (val = as_path(val))
|
28
|
+
|
29
|
+
REQUIREMENTS.any? { |file| val.join(file).exist? }
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -46,7 +46,7 @@ module Squared
|
|
46
46
|
end
|
47
47
|
|
48
48
|
@@tasks[ref] = {
|
49
|
-
install: %i[user target upgrade force]
|
49
|
+
install: %i[user target upgrade force].freeze
|
50
50
|
}.freeze
|
51
51
|
|
52
52
|
def ref
|
@@ -74,7 +74,8 @@ module Squared
|
|
74
74
|
else
|
75
75
|
OPT_USER
|
76
76
|
end
|
77
|
-
|
77
|
+
list += OPT_GENERAL
|
78
|
+
desc format_desc(action, flag, list, req: req)
|
78
79
|
if flag == :target
|
79
80
|
task flag, [:dir, :opts] do |_, args|
|
80
81
|
guard_params(action, flag, args: args, key: :dir)
|
@@ -92,11 +93,10 @@ module Squared
|
|
92
93
|
end
|
93
94
|
end
|
94
95
|
|
95
|
-
def depend(flag = nil, dir: nil, opts: [])
|
96
|
+
def depend(flag = nil, dir: nil, opts: [], sync: invoked_sync?('depend', flag))
|
96
97
|
if @depend && !flag
|
97
98
|
super
|
98
99
|
elsif outdated?
|
99
|
-
sync = invoked_sync?('depend', flag)
|
100
100
|
case (type = install_type)
|
101
101
|
when 1, 2
|
102
102
|
cmd = pip_session 'install'
|
@@ -148,6 +148,10 @@ module Squared
|
|
148
148
|
end
|
149
149
|
end
|
150
150
|
|
151
|
+
def depend?
|
152
|
+
@depend != false && (!@depend.nil? || outdated?)
|
153
|
+
end
|
154
|
+
|
151
155
|
def outdated?
|
152
156
|
install_type > 0
|
153
157
|
end
|
@@ -169,21 +173,23 @@ module Squared
|
|
169
173
|
(v ? "-#{v[0]}" : "--#{opt}")
|
170
174
|
end
|
171
175
|
end
|
172
|
-
@session << '--user' if
|
173
|
-
@session << '--no-input' if
|
174
|
-
if (val =
|
176
|
+
@session << '--user' if option('user')
|
177
|
+
@session << '--no-input' if option('no-input')
|
178
|
+
if (val = option('proxy', ignore: false))
|
175
179
|
@session << "--proxy=#{shell_escape(val, quote: true)}"
|
176
180
|
end
|
177
|
-
if (val =
|
181
|
+
if (val = option('log', ignore: false))
|
178
182
|
@session << "--log=#{shell_escape(base_path(val).to_s, quote: true)}"
|
179
183
|
end
|
180
|
-
append_nocolor
|
184
|
+
append_nocolor option('no-color')
|
181
185
|
end
|
182
186
|
|
183
187
|
def append_eager(opts)
|
184
188
|
@session << '--upgrade-strategy=eager' if opts.include?('eager')
|
185
189
|
end
|
186
190
|
end
|
191
|
+
|
192
|
+
Application.implement Python
|
187
193
|
end
|
188
194
|
end
|
189
195
|
end
|