squared 0.5.6 → 0.5.8
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 +65 -1
- data/README.md +16 -12
- data/lib/squared/common/format.rb +3 -7
- data/lib/squared/common/shell.rb +3 -3
- data/lib/squared/common/system.rb +2 -3
- data/lib/squared/common/utils.rb +5 -2
- 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 +88 -96
- data/lib/squared/workspace/project/docker.rb +16 -17
- data/lib/squared/workspace/project/git.rb +30 -33
- data/lib/squared/workspace/project/node.rb +38 -40
- data/lib/squared/workspace/project/python.rb +25 -33
- data/lib/squared/workspace/project/ruby.rb +106 -107
- data/lib/squared/workspace/project/support/class.rb +189 -57
- data/lib/squared/workspace/repo.rb +0 -3
- data/lib/squared/workspace/series.rb +16 -18
- metadata +1 -1
@@ -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
|
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 verbose y|yydebug
|
11
11
|
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 || '*.rb', base: path),
|
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,11 +463,11 @@ 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
|
@@ -571,14 +576,14 @@ module Squared
|
|
571
576
|
end
|
572
577
|
return
|
573
578
|
end
|
574
|
-
run_rb(banner:
|
579
|
+
run_rb(banner: false, from: :"ruby:#{flag}")
|
575
580
|
end
|
576
581
|
|
577
582
|
def gem!(flag, opts = [], filter: nil)
|
578
583
|
cmd = gem_session
|
579
584
|
case flag
|
580
585
|
when :outdated
|
581
|
-
cmd << gempwd <<
|
586
|
+
cmd << gempwd << flag
|
582
587
|
else
|
583
588
|
cmd << flag
|
584
589
|
end
|
@@ -591,12 +596,7 @@ module Squared
|
|
591
596
|
cmd.merge(preopts)
|
592
597
|
op = OptionPartition.new(opts, list, cmd, project: self, no: OPT_GEM[:no][flag])
|
593
598
|
op.each do |opt|
|
594
|
-
if opt
|
595
|
-
case $1
|
596
|
-
when 'g', 'gem'
|
597
|
-
op << (flag == :exec ? shell_option($1, $2) : quote_option($1, path + $2))
|
598
|
-
end
|
599
|
-
elsif opt.include?('=') && !%i[outdated build push exec].include?(flag)
|
599
|
+
if !opt.match?(/\A[A-Za-z\d][A-Za-z\d_.-]*\z/) && %i[install uninstall update pristine].include?(flag)
|
600
600
|
op.errors << opt
|
601
601
|
else
|
602
602
|
op.found << opt
|
@@ -605,17 +605,18 @@ module Squared
|
|
605
605
|
op.swap
|
606
606
|
case flag
|
607
607
|
when :outdated
|
608
|
-
log.info cmd.to_s
|
609
608
|
op.clear
|
609
|
+
cmd = cmd.done
|
610
|
+
log.info cmd
|
610
611
|
on :first, from
|
611
|
-
print_item format_banner(cmd
|
612
|
+
print_item format_banner(cmd)
|
612
613
|
major = 0
|
613
614
|
minor = 0
|
614
615
|
patch = 0
|
615
616
|
update = []
|
616
617
|
pwd_set(pass: !gempwd.nil?, from: from) do
|
617
618
|
items = [[%w[Gem Current Latest], nil]]
|
618
|
-
IO.popen(cmd
|
619
|
+
IO.popen(cmd).each do |line|
|
619
620
|
if line =~ /^(\S+) \((\S+) < ([^)]+)\)$/
|
620
621
|
cur = semscan $2
|
621
622
|
lat = semscan $3
|
@@ -733,6 +734,7 @@ module Squared
|
|
733
734
|
return
|
734
735
|
when :build
|
735
736
|
if op.empty?
|
737
|
+
raise_error('gemspec not found', hint: project) unless gemfile
|
736
738
|
op.add_path(gemfile)
|
737
739
|
else
|
738
740
|
op.add_path(op.shift)
|
@@ -740,16 +742,16 @@ module Squared
|
|
740
742
|
end
|
741
743
|
when :push
|
742
744
|
if op.empty? || (n = op.index(':'))
|
743
|
-
file =
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
745
|
+
file = basepath(if !n && (spec = gemspec)
|
746
|
+
"#{spec.name}-#{spec.version}.gem"
|
747
|
+
else
|
748
|
+
choice_index('Select a file', Dir.glob('*.gem', base: path), force: true)
|
749
|
+
end)
|
748
750
|
else
|
749
|
-
file =
|
750
|
-
raise_error('gem not found', hint: file) unless file.exist?
|
751
|
+
file = op.shift.yield_self { |val| val.include?('.') ? val : "#{val}.gem" }
|
751
752
|
raise_error("unknown args: #{op.join(', ')}", hint: flag) unless op.empty?
|
752
753
|
end
|
754
|
+
raise_error('gem not found', hint: file) unless op.exist?(file)
|
753
755
|
op.add_path(file)
|
754
756
|
run_rb(from: from, interactive: "Push #{sub_style(gemname, styles: theme[:active])}")
|
755
757
|
return
|
@@ -769,41 +771,40 @@ module Squared
|
|
769
771
|
op.append(quote: false)
|
770
772
|
when :update
|
771
773
|
unless op.arg?('system')
|
772
|
-
|
773
|
-
|
774
|
+
if op.empty?
|
775
|
+
op << gemname
|
776
|
+
else
|
777
|
+
op.append
|
778
|
+
end
|
774
779
|
end
|
775
780
|
op.clear(errors: true)
|
776
|
-
|
781
|
+
when :install, :uninstall, :pristine
|
777
782
|
raise_error('missing gemname', hint: flag) if op.empty?
|
778
|
-
|
779
|
-
|
780
|
-
|
781
|
-
|
782
|
-
|
783
|
-
|
784
|
-
op.reset
|
785
|
-
else
|
786
|
-
op.clear
|
787
|
-
end
|
788
|
-
elsif (n = op.extras.find_index { |val| val.match?(/(\A|[a-z])@\d/) })
|
789
|
-
items = op.extras.to_a
|
790
|
-
name = items.delete_at(n)
|
791
|
-
if (n = name.index('@')) == 0
|
792
|
-
pre = gemname
|
793
|
-
ver = name[1..-1]
|
794
|
-
else
|
795
|
-
pre = name[0, n]
|
796
|
-
ver = name[(n + 1)..-1]
|
797
|
-
end
|
798
|
-
op.adjoin(pre, shell_option('version', ver))
|
799
|
-
.clear(items)
|
800
|
-
.reset
|
801
|
-
elsif flag != :install
|
802
|
-
op.adjoin
|
783
|
+
if op.arg?('all')
|
784
|
+
if flag == :pristine
|
785
|
+
append_repeat 'skip', op.extras
|
786
|
+
op.reset
|
787
|
+
else
|
788
|
+
op.clear
|
803
789
|
end
|
790
|
+
elsif (n = op.index { |val| val.match?(/(\A|[a-z])@\d/) })
|
791
|
+
name = op.delete_at(n)
|
792
|
+
pre, ver = if (n = name.index('@')) == 0
|
793
|
+
[gemname, name[1..-1]]
|
794
|
+
else
|
795
|
+
[name[0, n], name[(n + 1)..-1]]
|
796
|
+
end
|
797
|
+
op.adjoin(pre, shell_option('version', ver))
|
798
|
+
.clear
|
799
|
+
elsif flag == :install
|
800
|
+
op.append_any
|
801
|
+
else
|
802
|
+
op.append
|
804
803
|
end
|
805
|
-
op.
|
806
|
-
op << '--' <<
|
804
|
+
op.clear(errors: true)
|
805
|
+
op << '--' << readline('Enter command [args]', force: true) if flag == :install && op.remove(':')
|
806
|
+
else
|
807
|
+
op.append
|
807
808
|
end
|
808
809
|
run_rb(from: from)
|
809
810
|
end
|
@@ -813,26 +814,24 @@ module Squared
|
|
813
814
|
args = case flag
|
814
815
|
when 'exec', 'cache', 'check'
|
815
816
|
list = OPT_BUNDLE[flag.to_sym] + OPT_BUNDLE[:common]
|
816
|
-
OptionPartition.new(args, list, cmd, project: self, args: flag ==
|
817
|
+
OptionPartition.new(args, list, cmd, project: self, args: flag == 'exec').extras
|
817
818
|
else
|
818
819
|
args.flatten
|
819
820
|
end
|
820
821
|
case flag
|
821
822
|
when 'exec', 'config'
|
822
|
-
if args.empty?
|
823
|
-
|
824
|
-
else
|
825
|
-
args << command_args(args)
|
826
|
-
cmd.merge(args)
|
827
|
-
end
|
828
|
-
else
|
823
|
+
cmd << readline('Enter arguments', force: true) if args.empty?
|
824
|
+
when 'cache', 'check'
|
829
825
|
option_clear args
|
826
|
+
args.clear
|
830
827
|
end
|
828
|
+
cmd.merge(args)
|
831
829
|
run(from: :"bundle:#{flag}")
|
832
830
|
end
|
833
831
|
|
834
832
|
def rake(*args, opts: [])
|
835
|
-
op = OptionPartition.new(opts, OPT_RUBY[:rake], [quote_option('f', rakefile)
|
833
|
+
op = OptionPartition.new(opts, OPT_RUBY[:rake], [(quote_option('f', rakefile) if rakefile)].compact,
|
834
|
+
project: self)
|
836
835
|
args.concat(op.extras)
|
837
836
|
if args.empty?
|
838
837
|
args << nil
|
@@ -862,8 +861,8 @@ module Squared
|
|
862
861
|
def gemspec
|
863
862
|
return @gemspec unless @gemspec.nil?
|
864
863
|
|
865
|
-
@gemspec = if
|
866
|
-
Gem::Specification.load(
|
864
|
+
@gemspec = if gemfile
|
865
|
+
Gem::Specification.load(gemfile.to_s) rescue false
|
867
866
|
else
|
868
867
|
false
|
869
868
|
end
|
@@ -1029,14 +1028,14 @@ module Squared
|
|
1029
1028
|
end
|
1030
1029
|
|
1031
1030
|
def variables
|
1032
|
-
(super + %i[
|
1031
|
+
(super + %i[autodetect]).freeze
|
1033
1032
|
end
|
1034
1033
|
|
1035
1034
|
def rakefile
|
1036
1035
|
return @rakefile unless @rakefile.nil?
|
1037
1036
|
|
1038
1037
|
@rakefile = Rake::Application::DEFAULT_RAKEFILES.find { |val| basepath(val).exist? }.yield_self do |file|
|
1039
|
-
file ?
|
1038
|
+
file ? basepath(file) : false
|
1040
1039
|
end
|
1041
1040
|
end
|
1042
1041
|
|
@@ -1068,7 +1067,7 @@ module Squared
|
|
1068
1067
|
def gemfile
|
1069
1068
|
return @gemfile unless @gemfile.nil?
|
1070
1069
|
|
1071
|
-
@gemfile = [project, name].map! { |val|
|
1070
|
+
@gemfile = [project, name].map! { |val| basepath("#{val}.gemspec") }
|
1072
1071
|
.concat(path.glob('*.gemspec'))
|
1073
1072
|
.find { |file| File.exist?(file) } || false
|
1074
1073
|
end
|