squared 0.4.20 → 0.4.22
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 +50 -0
- data/README.md +17 -13
- data/lib/squared/common/format.rb +3 -7
- data/lib/squared/config.rb +3 -3
- data/lib/squared/version.rb +1 -1
- data/lib/squared/workspace/application.rb +3 -1
- data/lib/squared/workspace/project/base.rb +78 -82
- data/lib/squared/workspace/project/docker.rb +18 -17
- data/lib/squared/workspace/project/git.rb +14 -16
- data/lib/squared/workspace/project/node.rb +57 -41
- data/lib/squared/workspace/project/python.rb +20 -28
- data/lib/squared/workspace/project/ruby.rb +110 -110
- data/lib/squared/workspace/project/support/class.rb +175 -43
- data/lib/squared/workspace/series.rb +16 -18
- metadata +2 -2
@@ -7,14 +7,13 @@ module Squared
|
|
7
7
|
GEMFILE = %w[Gemfile Gemfile.lock gem.deps.rb gems.rb Isolate].freeze
|
8
8
|
DIR_RUBY = (GEMFILE + Rake::Application::DEFAULT_RAKEFILES + ['README.rdoc']).freeze
|
9
9
|
OPT_RUBY = {
|
10
|
-
ruby: %w[0=im? a c e=q E=bm F=qm i=bm? I=pm l n p r=bm s S w W=bm? x=pm? d|debug jit rjit
|
11
|
-
backtrace-limit=i crash-report=q disable=q dump=q enable=q encoding=b external-encoding=b
|
10
|
+
ruby: %w[0=im? a c C=pm e=q E=bm F=qm i=bm? I=pm l n p r=bm s S w W=bm? x=pm? d|debug jit rjit verbose
|
11
|
+
y|yydebug backtrace-limit=i crash-report=q disable=q dump=q enable=q encoding=b external-encoding=b
|
12
12
|
internal-encoding=b parser=b].freeze,
|
13
|
-
rake: %w[A|all B|build-all comments n|dry-run
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
W|where=q?].freeze,
|
13
|
+
rake: %w[A|all B|build-all comments n|dry-run m|multitask P|prereqs q|quiet X|no-deprecation-warnings
|
14
|
+
N|no-search G|no-system nosearch nosystem rules s|silent g|system v|verbose backtrace=b?
|
15
|
+
D|describe=q? e|execute=q E|execute-continue=q p|execute-print=q job-stats=b? j|jobs=i? I|libdir=p
|
16
|
+
R|rakelib=p rakelibdir=p r|require=b suppress-backtrace=q T|tasks=q? t|trace=b? W|where=q?].freeze,
|
18
17
|
irb: %w[d f U w E=b I=p r=b W=im? autocomplete colorize echo echo-on-assignment extra-doc-dir inf-ruby-mode
|
19
18
|
inspect multiline no-pager noautocomplete nocolorize noecho noecho-on-assignment noinspect
|
20
19
|
nomultiline noprompt noscript nosingleline noverbose regexp-completor sample-book-mode script
|
@@ -22,38 +21,41 @@ module Squared
|
|
22
21
|
back-trace-limit=i context-mode=i prompt=b prompt-mode=b].freeze
|
23
22
|
}.freeze
|
24
23
|
OPT_BUNDLE = {
|
25
|
-
common: %w[no-color V|verbose retry=i].freeze,
|
24
|
+
common: %w[no-color V|verbose r|retry=i].freeze,
|
26
25
|
install: %w[frozen no-cache no-prune system binstubs=p? path=p standalone=q? target-rbconfig=p trust-policy=b
|
27
26
|
with=q without=q].freeze,
|
28
|
-
install_base: %w[force full-index quiet redownload
|
29
|
-
update: %w[conservative local pre ruby strict bundler=b? g|group=q source=b].freeze,
|
27
|
+
install_base: %w[force full-index quiet redownload gemfile=p j|jobs=i].freeze,
|
28
|
+
update: %w[all conservative local major minor patch pre ruby strict bundler=b? g|group=q source=b].freeze,
|
30
29
|
outdated: %w[filter-major filter-minor filter-patch groups local parseable pre only-explicit strict
|
31
|
-
update-strict
|
30
|
+
update-strict group=q source=b].freeze,
|
32
31
|
exec: %w[gemfile=p].freeze,
|
33
|
-
cache: %w[all-platforms frozen no-install no-prune quiet cache-path=p gemfile=p path=p].freeze,
|
34
|
-
check: %w[dry-run gemfile=p].freeze
|
32
|
+
cache: %w[all all-platforms frozen no-all no-install no-prune quiet cache-path=p gemfile=p path=p].freeze,
|
33
|
+
check: %w[dry-run gemfile=p path=p].freeze
|
35
34
|
}.freeze
|
36
35
|
OPT_GEM = {
|
37
36
|
common: %w[backtrace debug q|quiet no-verbose norc silent V|verbose config-file=p].freeze,
|
38
|
-
install: %w[version=
|
39
|
-
install_base: %w[f b|both clear-sources conservative default development development-all
|
40
|
-
ignore-dependencies l|local N|no-document r|remote
|
41
|
-
bulk-threshold=i document=b? g|file=p? p|http-proxy=q i|install-dir=p platform=q
|
42
|
-
target-rbconfig=p? P|trust-policy=b without=b].freeze,
|
37
|
+
install: %w[version=q].freeze,
|
38
|
+
install_base: %w[E f w b|both clear-sources conservative default development development-all explain
|
39
|
+
ignore-dependencies l|local N|no-document r|remote vendor n|bindir=p build-root=p
|
40
|
+
B|bulk-threshold=i document=b? g|file=p? p|http-proxy=q? i|install-dir=p platform=q
|
41
|
+
s|source=q target-rbconfig=p? P|trust-policy=b without=b].freeze,
|
43
42
|
update: %w[system=b?].freeze,
|
44
|
-
uninstall: %w[a D I x vendor n|bindir=p i|install-dir=p platform=b v|version=
|
45
|
-
outdated: %w[b|both clear-sources l|local
|
43
|
+
uninstall: %w[a D I x vendor n|bindir=p i|install-dir=p platform=b v|version=q].freeze,
|
44
|
+
outdated: %w[b|both clear-sources l|local r|remote B|bulk-threshold=i p|http-proxy=q? platform=q
|
46
45
|
source=q].freeze,
|
47
|
-
push: %w[
|
48
|
-
build: %w[force strict o|output=p platform=q].freeze,
|
49
|
-
exec: %w[conservative
|
50
|
-
pristine: %w[all only-executables only-missing-extensions only-plugins n|bindir=p i|install-dir=p skip=b
|
51
|
-
v|version=
|
46
|
+
push: %w[attestation=p host=q p|http-proxy=q? k|key=b otp=b].freeze,
|
47
|
+
build: %w[C=p force strict o|output=p platform=q].freeze,
|
48
|
+
exec: %w[conservative g|gem=b v|version=q].freeze,
|
49
|
+
pristine: %w[E all only-executables only-missing-extensions only-plugins n|bindir=p i|install-dir=p skip=b
|
50
|
+
v|version=q].freeze,
|
52
51
|
no: {
|
53
52
|
install: %w[env-shebang force format-executable http-proxy lock minimal-deps post-install-message prerelease
|
54
53
|
suggestions user-install wrappers].freeze,
|
55
54
|
uninstall: %w[abort-on-dependent all check-development executables force format-executable
|
56
55
|
ignore-dependencies user-install].freeze,
|
56
|
+
outdated: %w[http-proxy].freeze,
|
57
|
+
push: %w[http-proxy].freeze,
|
58
|
+
exec: %w[prerelease].freeze,
|
57
59
|
pristine: %w[env-shebang extensions].freeze
|
58
60
|
}.freeze
|
59
61
|
}.freeze
|
@@ -67,7 +69,7 @@ module Squared
|
|
67
69
|
end
|
68
70
|
|
69
71
|
def bannerargs
|
70
|
-
[
|
72
|
+
%i[dependfile gemname].freeze
|
71
73
|
end
|
72
74
|
|
73
75
|
def config?(val)
|
@@ -105,9 +107,7 @@ module Squared
|
|
105
107
|
@gemfile = if gemspec == false
|
106
108
|
false
|
107
109
|
elsif gemspec
|
108
|
-
|
109
|
-
elsif (gemspec = path + "#{name}.gemspec").exist? || (gemspec = path + "#{project}.gemspec").exist?
|
110
|
-
gemspec
|
110
|
+
basepath(gemspec.include?('.') ? gemspec : "#{gemspec}.gemspec")
|
111
111
|
end
|
112
112
|
return if !@output[0].nil? || !@copy.nil? || version || @autodetect || !rakefile
|
113
113
|
|
@@ -235,21 +235,26 @@ module Squared
|
|
235
235
|
format_desc action, flag, 'path,opts*,args*'
|
236
236
|
task flag, [:rb] do |_, args|
|
237
237
|
file = args.rb
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
238
|
+
opts = args.extras
|
239
|
+
args = if file && !file.include?('*')
|
240
|
+
ENV['RUBY_ARGS']
|
241
|
+
else
|
242
|
+
a, b, c = choice_index('Select a file', Dir.glob(file || path.join('*.rb')),
|
243
|
+
values: (file ? [] : ['Options']).push('Arguments'),
|
244
|
+
force: true, series: true)
|
245
|
+
if file
|
246
|
+
file = a
|
247
|
+
b
|
248
|
+
else
|
249
|
+
file = a
|
250
|
+
opts.concat(OptionPartition.strip(b))
|
251
|
+
c
|
252
|
+
end
|
253
|
+
end
|
254
|
+
ruby(flag, opts, file: file, args: args)
|
250
255
|
end
|
251
256
|
when :script
|
252
|
-
format_desc action, flag, 'opts
|
257
|
+
format_desc action, flag, 'opts*'
|
253
258
|
task flag do |_, args|
|
254
259
|
command = ENV['RUBY_E'] || readline('Enter script', force: true, multiline: ['##', ';'])
|
255
260
|
ruby(flag, args.to_a, command: command)
|
@@ -302,7 +307,7 @@ module Squared
|
|
302
307
|
print_item unless @output[0] || task_invoked?(/^copy(?::#{Ruby.ref}|$)/)
|
303
308
|
glob = Array(glob || '**/*')
|
304
309
|
Array(from).each_with_index do |val, i|
|
305
|
-
a =
|
310
|
+
a = basepath val
|
306
311
|
b = dest + val
|
307
312
|
c = glob[i] || glob.first
|
308
313
|
log.info "cp #{a + c} #{b}"
|
@@ -439,7 +444,7 @@ module Squared
|
|
439
444
|
if flag != :redownload
|
440
445
|
op << '--redownload'
|
441
446
|
elsif (lock = basepath('Gemfile.lock')).exist?
|
442
|
-
config = basepath
|
447
|
+
config = basepath '.bundle', 'config'
|
443
448
|
lock.delete unless config.exist? && config.read.match?(/\bBUNDLE_FROZEN:\s+"true"/)
|
444
449
|
end
|
445
450
|
end
|
@@ -458,23 +463,23 @@ module Squared
|
|
458
463
|
when :file, :script
|
459
464
|
op = OptionPartition.new(opts, OPT_RUBY[:ruby], ruby_session, project: self, args: true)
|
460
465
|
if file
|
461
|
-
op.unshift(shell_quote(
|
466
|
+
op.unshift(shell_quote(basepath(file)))
|
462
467
|
elsif command
|
463
468
|
op << quote_option('e', command, option: false)
|
464
469
|
end
|
465
|
-
op.push(args) if
|
470
|
+
op.push(args) if args
|
466
471
|
op.append(delim: true, escape: false, quote: false) unless op.empty?
|
467
472
|
when :version
|
468
473
|
pwd_set do
|
469
474
|
out = []
|
470
475
|
[
|
476
|
+
"#{ENV.fetch('RBENV_ROOT', '$HOME/.rbenv')}/bin/rbenv",
|
471
477
|
'$HOME/.rvm/bin/rvm',
|
478
|
+
"#{ENV.fetch('ASDF_DATA_DIR', '$HOME/.asdf')}/plugins/ruby/bin/install",
|
479
|
+
'/usr/bin/rbenv',
|
472
480
|
'/usr/local/rvm/bin/rvm',
|
473
481
|
'/usr/share/rvm/bin/rvm',
|
474
|
-
"#{ENV.fetch('RBENV_ROOT', '$HOME/.rbenv')}/bin/rbenv",
|
475
|
-
'/usr/bin/rbenv',
|
476
482
|
'/usr/local/share/chruby/chruby.sh',
|
477
|
-
"#{ENV.fetch('ASDF_DATA_DIR', '$HOME/.asdf')}/plugins/ruby/bin/install",
|
478
483
|
''
|
479
484
|
].each do |val|
|
480
485
|
next unless val.empty? || File.exist?(val.sub('$HOME', Dir.home))
|
@@ -539,14 +544,14 @@ module Squared
|
|
539
544
|
end
|
540
545
|
return
|
541
546
|
end
|
542
|
-
run_rb(banner:
|
547
|
+
run_rb(banner: false, from: :"ruby:#{flag}")
|
543
548
|
end
|
544
549
|
|
545
550
|
def gem!(flag, opts = [], filter: nil)
|
546
551
|
cmd = gem_session
|
547
552
|
case flag
|
548
553
|
when :outdated
|
549
|
-
cmd << gempwd <<
|
554
|
+
cmd << gempwd << flag
|
550
555
|
else
|
551
556
|
cmd << flag
|
552
557
|
end
|
@@ -559,12 +564,7 @@ module Squared
|
|
559
564
|
cmd.merge(preopts)
|
560
565
|
op = OptionPartition.new(opts, list, cmd, project: self, no: OPT_GEM[:no][flag])
|
561
566
|
op.each do |opt|
|
562
|
-
if opt
|
563
|
-
case $1
|
564
|
-
when 'g', 'gem'
|
565
|
-
op << (flag == :exec ? shell_option($1, $2) : quote_option($1, path + $2))
|
566
|
-
end
|
567
|
-
elsif opt.include?('=') && !%i[outdated build push exec].include?(flag)
|
567
|
+
if !opt.match?(/\A[A-Za-z\d][A-Za-z\d_.-]*\z/) && %i[install uninstall update pristine].include?(flag)
|
568
568
|
op.errors << opt
|
569
569
|
else
|
570
570
|
op.found << opt
|
@@ -573,17 +573,18 @@ module Squared
|
|
573
573
|
op.swap
|
574
574
|
case flag
|
575
575
|
when :outdated
|
576
|
-
log.info cmd.to_s
|
577
576
|
op.clear
|
577
|
+
cmd = cmd.done
|
578
|
+
log.info cmd
|
578
579
|
on :first, from
|
579
|
-
print_item format_banner(cmd
|
580
|
+
print_item format_banner(cmd)
|
580
581
|
major = 0
|
581
582
|
minor = 0
|
582
583
|
patch = 0
|
583
584
|
update = []
|
584
585
|
pwd_set(pass: !gempwd.nil?, from: from) do
|
585
586
|
items = [[%w[Gem Current Latest], nil]]
|
586
|
-
IO.popen(cmd
|
587
|
+
IO.popen(cmd).each do |line|
|
587
588
|
if line =~ /^(\S+) \((\S+) < ([^)]+)\)$/
|
588
589
|
cur = semscan $2
|
589
590
|
lat = semscan $3
|
@@ -710,17 +711,17 @@ module Squared
|
|
710
711
|
end
|
711
712
|
when :push
|
712
713
|
if op.empty?
|
713
|
-
file =
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
714
|
+
file = basepath(if (spec = gemspec)
|
715
|
+
"#{spec.name}-#{spec.version}.gem"
|
716
|
+
else
|
717
|
+
gems = Dir.glob(basepath('*.gem')).map { |val| File.basename(val) }
|
718
|
+
choice_index('Select a file', gems, force: true)
|
719
|
+
end)
|
719
720
|
else
|
720
|
-
file =
|
721
|
-
raise_error('gem not found', hint: file) unless file.exist?
|
721
|
+
file = op.shift
|
722
722
|
raise_error("unknown args: #{op.join(', ')}", hint: flag) unless op.empty?
|
723
723
|
end
|
724
|
+
raise_error('gem not found', hint: file) unless op.exist?(file)
|
724
725
|
op.add_path(file)
|
725
726
|
run_rb(from: from, interactive: "Push #{sub_style(gemname, styles: theme[:active])}")
|
726
727
|
return
|
@@ -740,39 +741,40 @@ module Squared
|
|
740
741
|
op.append(quote: false)
|
741
742
|
when :update
|
742
743
|
unless op.arg?('system')
|
743
|
-
|
744
|
-
|
744
|
+
if op.empty?
|
745
|
+
op << gemname
|
746
|
+
else
|
747
|
+
op.append
|
748
|
+
end
|
745
749
|
end
|
746
750
|
op.clear(errors: true)
|
747
|
-
|
751
|
+
when :install, :uninstall, :pristine
|
748
752
|
raise_error('missing gemname', hint: flag) if op.empty?
|
749
|
-
|
750
|
-
|
751
|
-
|
752
|
-
|
753
|
-
|
754
|
-
|
755
|
-
op.reset
|
756
|
-
else
|
757
|
-
op.clear
|
758
|
-
end
|
759
|
-
elsif (n = op.index { |val| val.match?(/(\A|[a-z])@\d/) })
|
760
|
-
name = op.delete_at(n)
|
761
|
-
if (n = name.index('@')) == 0
|
762
|
-
pre = gemname
|
763
|
-
ver = name[1..-1]
|
764
|
-
else
|
765
|
-
pre = name[0, n]
|
766
|
-
ver = name[(n + 1)..-1]
|
767
|
-
end
|
768
|
-
op.adjoin(pre, shell_option('version', ver))
|
769
|
-
.clear
|
770
|
-
elsif flag != :install
|
771
|
-
op.adjoin
|
753
|
+
if op.arg?('all')
|
754
|
+
if flag == :pristine
|
755
|
+
append_repeat 'skip', op.extras
|
756
|
+
op.reset
|
757
|
+
else
|
758
|
+
op.clear
|
772
759
|
end
|
760
|
+
elsif (n = op.index { |val| val.match?(/(\A|[a-z])@\d/) })
|
761
|
+
name = op.delete_at(n)
|
762
|
+
pre, ver = if (n = name.index('@')) == 0
|
763
|
+
[gemname, name[1..-1]]
|
764
|
+
else
|
765
|
+
[name[0, n], name[(n + 1)..-1]]
|
766
|
+
end
|
767
|
+
op.adjoin(pre, shell_option('version', ver))
|
768
|
+
.clear
|
769
|
+
elsif flag == :install
|
770
|
+
op.append_any
|
771
|
+
else
|
772
|
+
op.append
|
773
773
|
end
|
774
|
-
op.
|
775
|
-
op << '--' <<
|
774
|
+
op.clear(errors: true)
|
775
|
+
op << '--' << readline('Enter command [args]', force: true) if flag == :install && op.remove(':')
|
776
|
+
else
|
777
|
+
op.append
|
776
778
|
end
|
777
779
|
run_rb(from: from)
|
778
780
|
end
|
@@ -782,26 +784,24 @@ module Squared
|
|
782
784
|
args = case flag
|
783
785
|
when 'exec', 'cache', 'check'
|
784
786
|
list = OPT_BUNDLE[flag.to_sym] + OPT_BUNDLE[:common]
|
785
|
-
OptionPartition.new(args, list, cmd, project: self, args: flag ==
|
787
|
+
OptionPartition.new(args, list, cmd, project: self, args: flag == 'exec').extras
|
786
788
|
else
|
787
789
|
args.flatten
|
788
790
|
end
|
789
791
|
case flag
|
790
792
|
when 'exec', 'config'
|
791
|
-
if args.empty?
|
792
|
-
|
793
|
-
else
|
794
|
-
args << command_args(args)
|
795
|
-
cmd.merge(args)
|
796
|
-
end
|
797
|
-
else
|
793
|
+
cmd << readline('Enter arguments', force: true) if args.empty?
|
794
|
+
when 'cache', 'check'
|
798
795
|
option_clear args
|
796
|
+
args.clear
|
799
797
|
end
|
798
|
+
cmd.merge(args)
|
800
799
|
run(from: :"bundle:#{flag}")
|
801
800
|
end
|
802
801
|
|
803
802
|
def rake(*args, opts: [])
|
804
|
-
op = OptionPartition.new(opts, OPT_RUBY[:rake], [quote_option('f', rakefile)
|
803
|
+
op = OptionPartition.new(opts, OPT_RUBY[:rake], [(quote_option('f', rakefile) if rakefile)].compact,
|
804
|
+
project: self)
|
805
805
|
args.concat(op.extras)
|
806
806
|
if args.empty?
|
807
807
|
args << nil
|
@@ -847,7 +847,7 @@ module Squared
|
|
847
847
|
end
|
848
848
|
|
849
849
|
def copy?
|
850
|
-
return true if
|
850
|
+
return true if @copy.is_a?(Hash) ? copy[:into] : super
|
851
851
|
return gemdir? if @gemdir
|
852
852
|
|
853
853
|
if version
|
@@ -998,14 +998,14 @@ module Squared
|
|
998
998
|
end
|
999
999
|
|
1000
1000
|
def variables
|
1001
|
-
(super + %i[
|
1001
|
+
(super + %i[autodetect]).freeze
|
1002
1002
|
end
|
1003
1003
|
|
1004
1004
|
def rakefile
|
1005
1005
|
return @rakefile unless @rakefile.nil?
|
1006
1006
|
|
1007
1007
|
file = Rake::Application::DEFAULT_RAKEFILES.find { |val| basepath(val).exist? }
|
1008
|
-
@rakefile = file ?
|
1008
|
+
@rakefile = file ? basepath(file) : false
|
1009
1009
|
end
|
1010
1010
|
|
1011
1011
|
def rakepwd
|
@@ -1036,8 +1036,8 @@ module Squared
|
|
1036
1036
|
def gemfile
|
1037
1037
|
return @gemfile unless @gemfile.nil?
|
1038
1038
|
|
1039
|
-
@gemfile = [project, name].map! { |val|
|
1040
|
-
.concat(Dir.glob(
|
1039
|
+
@gemfile = [project, name].map! { |val| basepath("#{val}.gemspec") }
|
1040
|
+
.concat(Dir.glob(basepath('*.gemspec')))
|
1041
1041
|
.find { |file| File.exist?(file) } || false
|
1042
1042
|
end
|
1043
1043
|
|