squared 0.5.19 → 0.6.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 +87 -129
- data/README.md +101 -69
- data/lib/squared/common/base.rb +1 -22
- data/lib/squared/common/format.rb +40 -34
- data/lib/squared/common/prompt.rb +57 -34
- data/lib/squared/common/shell.rb +71 -55
- data/lib/squared/common/system.rb +69 -36
- data/lib/squared/common/utils.rb +29 -6
- data/lib/squared/config.rb +27 -34
- data/lib/squared/version.rb +1 -1
- data/lib/squared/workspace/application.rb +82 -83
- data/lib/squared/workspace/project/base.rb +535 -377
- data/lib/squared/workspace/project/docker.rb +388 -285
- data/lib/squared/workspace/project/git.rb +349 -338
- data/lib/squared/workspace/project/node.rb +499 -272
- data/lib/squared/workspace/project/python.rb +355 -218
- data/lib/squared/workspace/project/ruby.rb +672 -370
- data/lib/squared/workspace/project/support/class.rb +208 -205
- data/lib/squared/workspace/repo.rb +43 -41
- data/lib/squared/workspace/series.rb +10 -14
- data/lib/squared/workspace/support/base.rb +3 -24
- data/lib/squared/workspace/support/variables.rb +48 -0
- data/lib/squared/workspace/support.rb +1 -1
- data/lib/squared/workspace.rb +4 -6
- metadata +3 -3
- data/lib/squared/workspace/support/data.rb +0 -11
|
@@ -5,6 +5,7 @@ module Squared
|
|
|
5
5
|
module Project
|
|
6
6
|
class Ruby < Git
|
|
7
7
|
GEMFILE = %w[Gemfile Gemfile.lock gem.deps.rb gems.rb Isolate].freeze
|
|
8
|
+
GEMNAME = /\A[A-Za-z\d][A-Za-z\d_.-]*\z/.freeze
|
|
8
9
|
DIR_RUBY = (GEMFILE + Rake::Application::DEFAULT_RAKEFILES + ['README.rdoc']).freeze
|
|
9
10
|
OPT_RUBY = {
|
|
10
11
|
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
|
|
@@ -12,8 +13,9 @@ module Squared
|
|
|
12
13
|
internal-encoding=b parser=b].freeze,
|
|
13
14
|
rake: %w[A|all B|build-all comments n|dry-run m|multitask P|prereqs q|quiet X|no-deprecation-warnings
|
|
14
15
|
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?
|
|
16
|
-
R|rakelib=p rakelibdir=p r|require=b suppress-backtrace=q T|tasks=q? t|trace=b?
|
|
16
|
+
D|describe=q? e|execute=q E|execute-continue=q p|execute-print=q f|rakefile=p job-stats=b? j|jobs=i?
|
|
17
|
+
I|libdir=p R|rakelib=p rakelibdir=p r|require=b suppress-backtrace=q T|tasks=q? t|trace=b?
|
|
18
|
+
W|where=q?].freeze,
|
|
17
19
|
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
|
|
18
20
|
inspect multiline no-pager noautocomplete nocolorize noecho noecho-on-assignment noinspect
|
|
19
21
|
nomultiline noprompt noscript nosingleline noverbose regexp-completor sample-book-mode script
|
|
@@ -22,54 +24,127 @@ module Squared
|
|
|
22
24
|
}.freeze
|
|
23
25
|
OPT_BUNDLE = {
|
|
24
26
|
common: %w[no-color V|verbose r|retry=i].freeze,
|
|
27
|
+
common_all: %w[all all-platforms path=p].freeze,
|
|
28
|
+
common_git: %w[branch=q git=q path=p ref=q].freeze,
|
|
29
|
+
add: %w[optimistic quiet skip-install strict github=q glob=q g|group=q require=q s|source=q
|
|
30
|
+
v|version=q].freeze,
|
|
31
|
+
binstubs: %w[force standalone shebang=q].freeze,
|
|
32
|
+
cache: %w[frozen no-all no-install no-prune quiet cache-path=p gemfile=p].freeze,
|
|
33
|
+
check: %w[dry-run gemfile=p path=p].freeze,
|
|
34
|
+
clean: %w[dry-run force].freeze,
|
|
35
|
+
config: %w[global local].freeze,
|
|
36
|
+
doctor: %w[quiet gemfile=p].freeze,
|
|
37
|
+
exec: %w[gemfile=p].freeze,
|
|
38
|
+
gem: %w[b|bin git no-exe rubocop ci=b e|edit=p? ext=b github-username=q linter=b t|test=b?].freeze,
|
|
39
|
+
init: %w[gemfile=p gemspec=p].freeze,
|
|
25
40
|
install: %w[frozen no-cache no-prune system binstubs=p? path=p standalone=q? target-rbconfig=p trust-policy=b
|
|
26
41
|
with=q without=q].freeze,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
42
|
+
install_a: %w[force full-index quiet redownload gemfile=p j|jobs=i].freeze,
|
|
43
|
+
lock: %w[add-checksums conservative full-index local major minor normalize-platforms patch pre print strict
|
|
44
|
+
add-platform=q bundler=b? gemfile=p lockfile=p remove-platform=p update=q?].freeze,
|
|
45
|
+
open: %w[path=p].freeze,
|
|
46
|
+
outdated: %w[filter-major filter-minor filter-patch groups local parseable pre only-explicit strict
|
|
47
|
+
update-strict group=q source=q].freeze,
|
|
48
|
+
platform: %w[ruby].freeze,
|
|
49
|
+
plugin: %w[source=q version=q].freeze,
|
|
50
|
+
remove: %w[install].freeze,
|
|
51
|
+
show: %w[outdated paths].freeze,
|
|
52
|
+
update: %w[all conservative local major minor patch pre ruby strict bundler=b? g|group=q source=q].freeze,
|
|
53
|
+
no: {
|
|
54
|
+
gem: %w[changelog ci coc linter mit test].freeze
|
|
55
|
+
}.freeze
|
|
34
56
|
}.freeze
|
|
35
57
|
OPT_GEM = {
|
|
36
58
|
common: %w[backtrace debug q|quiet no-verbose norc silent V|verbose config-file=p].freeze,
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
s|source=q target-rbconfig=p? P|trust-policy=b without=q].freeze,
|
|
42
|
-
update: %w[system=b?].freeze,
|
|
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
|
|
45
|
-
source=q].freeze,
|
|
46
|
-
push: %w[attestation=p host=q p|http-proxy=q? k|key=b otp=b].freeze,
|
|
59
|
+
common_url: %w[B|bulk-threshold=i p|http-proxy=q? s|source=q].freeze,
|
|
60
|
+
common_domain: %w[b|both clear-sources l|local r|remote].freeze,
|
|
61
|
+
common_otp: %w[host=q k|key=b otp=b].freeze,
|
|
62
|
+
common_all: %w[a|all e|exact v|version=q].freeze,
|
|
47
63
|
build: %w[C=p force strict o|output=p platform=q].freeze,
|
|
64
|
+
cert: %w[a|add=p b|build=q C|certificate=p d|days=i l|list=q A|key-algorithm=b K|private-key=p r|remove=q
|
|
65
|
+
R|re-sign s|sign=p].freeze,
|
|
66
|
+
check: %w[a v|version=q].freeze,
|
|
67
|
+
cleanup: %w[n d|dry-run].freeze,
|
|
68
|
+
contents: %w[l all s|spec-dir=p v|version=q].freeze,
|
|
69
|
+
dependency: %w[R pipe platform=q v|version=q].freeze,
|
|
48
70
|
exec: %w[conservative g|gem=b v|version=q].freeze,
|
|
71
|
+
fetch: %w[clear-sources platform=q v|version=q].freeze,
|
|
72
|
+
generate_index: %w[update d|directory=p].freeze,
|
|
73
|
+
info: %w[i I].freeze,
|
|
74
|
+
install: %w[v|version=q].freeze,
|
|
75
|
+
install_a: %w[E f w conservative default development development-all explain ignore-dependencies N|no-document
|
|
76
|
+
vendor n|bindir=p build-root=p document=b? g|file=p? i|install-dir=p platform=q
|
|
77
|
+
target-rbconfig=p? P|trust-policy=b without=b].freeze,
|
|
78
|
+
list: %w[d i I].freeze,
|
|
79
|
+
lock: %w[s].freeze,
|
|
80
|
+
open: %w[e|editor=p v|version=q].freeze,
|
|
81
|
+
outdated: %w[C=p platform=q].freeze,
|
|
82
|
+
owner: %w[a|add=q r|remove=q p|http-proxy=q?].freeze,
|
|
49
83
|
pristine: %w[E all only-executables only-missing-extensions only-plugins n|bindir=p i|install-dir=p skip=b
|
|
50
84
|
v|version=q].freeze,
|
|
85
|
+
push: %w[attestation=p p|http-proxy=q?].freeze,
|
|
86
|
+
rdoc: %w[all v|version=q].freeze,
|
|
87
|
+
rebuild: %w[C=p diff force strict gemspec=p original=p source=q].freeze,
|
|
88
|
+
search: %w[d i I].freeze,
|
|
89
|
+
signin: %w[otp=b host=q].freeze,
|
|
90
|
+
sources: %w[f c|clear-all l|list u|update a|add=q p|http-proxy=q? r|remove=q].freeze,
|
|
91
|
+
specification: %w[all marshal ruby yaml platform=q v|version=q].freeze,
|
|
92
|
+
uninstall: %w[a D I x vendor n|bindir=p i|install-dir=p platform=q v|version=q].freeze,
|
|
93
|
+
unpack: %w[spec target=p P|trust-policy=b v|version=q],
|
|
94
|
+
update: %w[system=b?].freeze,
|
|
95
|
+
which: %w[a g].freeze,
|
|
96
|
+
yank: %w[platform=q v|version=q].freeze,
|
|
51
97
|
no: {
|
|
98
|
+
check: %w[alien doctor dry-run gems].freeze,
|
|
99
|
+
cleanup: %w[check-development user-install].freeze,
|
|
100
|
+
contents: %w[lib-only prefix show-install-dir].freeze,
|
|
101
|
+
dependency: %w[http-proxy reverse-dependencies].freeze,
|
|
102
|
+
exec: %w[prerelease].freeze,
|
|
103
|
+
fetch: %w[http-proxy prerelease suggestions].freeze,
|
|
104
|
+
generate_index: %w[compact modern].freeze,
|
|
105
|
+
info: %w[http-proxy installed prerelease versions].freeze,
|
|
52
106
|
install: %w[env-shebang force format-executable http-proxy lock minimal-deps post-install-message prerelease
|
|
53
107
|
suggestions user-install wrappers].freeze,
|
|
54
|
-
|
|
55
|
-
|
|
108
|
+
list: %w[details http-proxy installed prerelease versions].freeze,
|
|
109
|
+
lock: %w[strict].freeze,
|
|
56
110
|
outdated: %w[http-proxy].freeze,
|
|
111
|
+
owner: %w[http-proxy].freeze,
|
|
112
|
+
pristine: %w[env-shebang extensions].freeze,
|
|
57
113
|
push: %w[http-proxy].freeze,
|
|
58
|
-
|
|
59
|
-
|
|
114
|
+
rdoc: %w[overwrite rdoc ri].freeze,
|
|
115
|
+
search: %w[details http-proxy installed prerelease versions].freeze,
|
|
116
|
+
sources: %w[force http-proxy].freeze,
|
|
117
|
+
specification: %w[prerelease].freeze,
|
|
118
|
+
uninstall: %w[abort-on-dependent all check-development executables force format-executable
|
|
119
|
+
ignore-dependencies user-install].freeze,
|
|
120
|
+
which: %w[all gems-first].freeze
|
|
60
121
|
}.freeze
|
|
61
122
|
}.freeze
|
|
62
|
-
|
|
123
|
+
PASS_RUBY = {
|
|
124
|
+
ruby: %w[I disable enable dump r s].freeze,
|
|
125
|
+
rake: %w[I libdir r require].freeze,
|
|
126
|
+
irb: %w[I r].freeze,
|
|
127
|
+
gem: {
|
|
128
|
+
contents: %w[s spec-dir].freeze,
|
|
129
|
+
dependency: %w[s source].freeze,
|
|
130
|
+
install: %w[document s source without].freeze,
|
|
131
|
+
pristine: %w[skip].freeze
|
|
132
|
+
}.freeze,
|
|
133
|
+
bundle: {
|
|
134
|
+
install: %w[standalone with without].freeze,
|
|
135
|
+
lock: %w[add-platform remove-platform update].freeze,
|
|
136
|
+
update: %w[g group source].freeze
|
|
137
|
+
}.freeze
|
|
138
|
+
}.freeze
|
|
139
|
+
private_constant :GEMFILE, :GEMNAME, :DIR_RUBY, :OPT_RUBY, :OPT_BUNDLE, :OPT_GEM, :PASS_RUBY
|
|
63
140
|
|
|
64
141
|
class << self
|
|
65
|
-
def populate(*); end
|
|
66
|
-
|
|
67
142
|
def tasks
|
|
68
143
|
[:outdated].freeze
|
|
69
144
|
end
|
|
70
145
|
|
|
71
146
|
def bannerargs
|
|
72
|
-
%i[dependfile gemname
|
|
147
|
+
%i[dependfile gemname].freeze
|
|
73
148
|
end
|
|
74
149
|
|
|
75
150
|
def config?(val)
|
|
@@ -80,21 +155,14 @@ module Squared
|
|
|
80
155
|
end
|
|
81
156
|
|
|
82
157
|
subtasks({
|
|
83
|
-
'install' => %i[redownload local prefer-local].freeze,
|
|
84
|
-
'update' => %i[patch minor major all].freeze,
|
|
85
158
|
'outdated' => %i[patch minor major].freeze,
|
|
86
|
-
'gem' => %i[install uninstall update pristine outdated build push exec].freeze,
|
|
87
159
|
'ruby' => %i[file script version].freeze,
|
|
88
|
-
'
|
|
89
|
-
'
|
|
90
|
-
'config' => nil,
|
|
91
|
-
'check' => nil,
|
|
160
|
+
'gem' => %i[install uninstall outdated update pristine build push exec command].freeze,
|
|
161
|
+
'bundle' => %i[install update cache exec config reinstall command].freeze,
|
|
92
162
|
'rake' => nil,
|
|
93
163
|
'irb' => nil
|
|
94
164
|
})
|
|
95
165
|
|
|
96
|
-
attr_reader :gemdir
|
|
97
|
-
|
|
98
166
|
def initialize(*, autodetect: false, gemspec: nil, asdf: 'ruby', **kwargs)
|
|
99
167
|
super
|
|
100
168
|
if @pass.include?(Ruby.ref)
|
|
@@ -111,7 +179,7 @@ module Squared
|
|
|
111
179
|
elsif gemspec
|
|
112
180
|
basepath(gemspec.include?('.') ? gemspec : "#{gemspec}.gemspec")
|
|
113
181
|
end
|
|
114
|
-
return
|
|
182
|
+
return unless rakefile && @output[0].nil? && @copy.nil? && !version && !@autodetect
|
|
115
183
|
|
|
116
184
|
begin
|
|
117
185
|
File.foreach(rakefile) do |line|
|
|
@@ -128,14 +196,6 @@ module Squared
|
|
|
128
196
|
end
|
|
129
197
|
end
|
|
130
198
|
|
|
131
|
-
def gemdir=(val)
|
|
132
|
-
@gemdir = if val.is_a?(Pathname)
|
|
133
|
-
val
|
|
134
|
-
else
|
|
135
|
-
Pathname.new(val).realdirpath rescue nil
|
|
136
|
-
end
|
|
137
|
-
end
|
|
138
|
-
|
|
139
199
|
def ref
|
|
140
200
|
Ruby.ref
|
|
141
201
|
end
|
|
@@ -156,16 +216,15 @@ module Squared
|
|
|
156
216
|
format_desc action, nil, "task+,opts*|#{indexchar}index+|#,pattern*"
|
|
157
217
|
task action, [:command] do |_, args|
|
|
158
218
|
if args.command == '#'
|
|
159
|
-
format_list(raketasks, "rake[#{indexchar}N]", 'tasks', grep: args.extras, from: rakefile,
|
|
160
|
-
each: ->(val) { val[0] + val[1].to_s })
|
|
219
|
+
format_list(raketasks, "rake[#{indexchar}N]", 'tasks', grep: args.extras, from: rakefile, &:join)
|
|
161
220
|
else
|
|
162
|
-
|
|
163
|
-
if
|
|
164
|
-
rake(opts: opts)
|
|
221
|
+
items, opts = args.to_a.partition { |val| indexitem(val) }
|
|
222
|
+
if items.empty?
|
|
223
|
+
rake(banner: true, opts: opts)
|
|
165
224
|
else
|
|
166
225
|
tasks = raketasks
|
|
167
|
-
while (n, pre = indexitem(
|
|
168
|
-
if (item = tasks[n
|
|
226
|
+
while (n, pre = indexitem(items.shift))
|
|
227
|
+
if (item = tasks[n.pred])
|
|
169
228
|
cmd = pre ? "#{pre} #{item.first}" : item.first
|
|
170
229
|
elsif exception
|
|
171
230
|
indexerror n, tasks
|
|
@@ -174,9 +233,9 @@ module Squared
|
|
|
174
233
|
next
|
|
175
234
|
end
|
|
176
235
|
if opts.empty?
|
|
177
|
-
rake
|
|
236
|
+
rake(cmd, banner: true)
|
|
178
237
|
else
|
|
179
|
-
rake(cmd +
|
|
238
|
+
rake(cmd + "[#{opts.join(',')}]", banner: true)
|
|
180
239
|
opts.clear
|
|
181
240
|
end
|
|
182
241
|
end
|
|
@@ -186,42 +245,39 @@ module Squared
|
|
|
186
245
|
when 'irb'
|
|
187
246
|
format_desc action, nil, 'opts*,args*|:'
|
|
188
247
|
task action do |_, args|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
else
|
|
194
|
-
format_desc(action, nil, 'opts*', before: case action
|
|
195
|
-
when 'cache', 'check' then nil
|
|
196
|
-
else 'command+'
|
|
197
|
-
end)
|
|
198
|
-
task action do |_, args|
|
|
199
|
-
bundle(action, *args.to_a)
|
|
248
|
+
opts = args.to_a
|
|
249
|
+
args = Array(opts.delete(':') && readline('Enter file [arguments]', force: false))
|
|
250
|
+
name = gemname if gemlib.any? { |file| exist?(file, "#{gemname}.rb") }
|
|
251
|
+
irb(*args, opts: opts, name: name, verbose: false)
|
|
200
252
|
end
|
|
201
253
|
end
|
|
202
254
|
else
|
|
203
255
|
namespace action do
|
|
204
256
|
flags.each do |flag|
|
|
205
257
|
case action
|
|
206
|
-
when '
|
|
207
|
-
format_desc action, flag, 'opts*'
|
|
258
|
+
when 'outdated'
|
|
259
|
+
format_desc action, flag, 's/elect?,u/pdate?,opts*'
|
|
208
260
|
task flag do |_, args|
|
|
209
261
|
__send__ action, flag, args.to_a
|
|
210
262
|
end
|
|
211
263
|
when 'gem'
|
|
212
264
|
case flag
|
|
213
265
|
when :outdated
|
|
214
|
-
format_desc action, flag, 'major|minor|patch
|
|
266
|
+
format_desc action, flag, 'semver?=major|minor|patch,i/nteractive?,s/elect?,u/pdate?,opts*'
|
|
215
267
|
task flag, [:semver] do |_, args|
|
|
216
|
-
case (
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
268
|
+
opts = case (semver = args.semver)
|
|
269
|
+
when 'major', 'minor', 'patch'
|
|
270
|
+
args.extras
|
|
271
|
+
else
|
|
272
|
+
semver = nil
|
|
273
|
+
args.to_a
|
|
274
|
+
end
|
|
275
|
+
gem(flag, opts: opts, banner: true, filter: {
|
|
276
|
+
semver: semver,
|
|
277
|
+
update: opts.delete('u') || opts.delete('update'),
|
|
278
|
+
interactive: opts.delete('i') || opts.delete('interactive'),
|
|
279
|
+
select: opts.delete('s') || opts.delete('select')
|
|
280
|
+
})
|
|
225
281
|
end
|
|
226
282
|
when :build, :push, :exec, :update
|
|
227
283
|
format_desc(action, flag, 'opts*', after: case flag
|
|
@@ -230,13 +286,60 @@ module Squared
|
|
|
230
286
|
when :update then 'name*'
|
|
231
287
|
end)
|
|
232
288
|
task flag do |_, args|
|
|
233
|
-
gem
|
|
289
|
+
gem(flag, opts: args.to_a, banner: true)
|
|
234
290
|
end
|
|
235
|
-
|
|
291
|
+
when :install, :uninstall, :pristine
|
|
236
292
|
format_desc(action, flag, 'opts*', after: flag == :pristine ? 'name*|name?@version' : 'name*')
|
|
237
293
|
task flag do |_, args|
|
|
238
|
-
|
|
239
|
-
gem
|
|
294
|
+
opts = param_guard(action, flag, args: args.to_a)
|
|
295
|
+
gem(flag, opts: opts, banner: true)
|
|
296
|
+
end
|
|
297
|
+
when :command
|
|
298
|
+
format_desc action, flag, 'command,opts*,args*'
|
|
299
|
+
task flag, [:command] do |_, args|
|
|
300
|
+
command = param_guard(action, flag, key: :command, args: args)
|
|
301
|
+
gem(command.to_sym, opts: args.extras, banner: true)
|
|
302
|
+
end
|
|
303
|
+
end
|
|
304
|
+
when 'bundle'
|
|
305
|
+
case flag
|
|
306
|
+
when :install, :update, :cache, :exec
|
|
307
|
+
format_desc(action, flag, 'opts*', after: case flag
|
|
308
|
+
when :update then 'gems*'
|
|
309
|
+
when :exec then 'command,args*|:'
|
|
310
|
+
end)
|
|
311
|
+
task flag do |_, args|
|
|
312
|
+
bundle(flag, opts: args.to_a, banner: true)
|
|
313
|
+
end
|
|
314
|
+
when :config
|
|
315
|
+
format_desc action, flag, 'list|set|get|unset?,args*'
|
|
316
|
+
task flag do |_, args|
|
|
317
|
+
bundle(flag, *args.to_a, banner: true)
|
|
318
|
+
end
|
|
319
|
+
when :reinstall
|
|
320
|
+
format_desc action, flag, 'f/orce?,opts*'
|
|
321
|
+
task flag do |_, args|
|
|
322
|
+
opts = args.to_a
|
|
323
|
+
opts << 'redownload' if opts.delete('f') || opts.delete('force')
|
|
324
|
+
if (lock = basepath('Gemfile.lock')).exist?
|
|
325
|
+
config = basepath '.bundle', 'config'
|
|
326
|
+
if config.exist? && config.read.match?(/\bBUNDLE_FROZEN:\s+"true"/)
|
|
327
|
+
if opts.include?('redownload')
|
|
328
|
+
run(bundle_output('config unset frozen'), banner: false)
|
|
329
|
+
else
|
|
330
|
+
print_error('Gemfile.lock is frozen', subject: name, hint: flag)
|
|
331
|
+
lock = nil
|
|
332
|
+
end
|
|
333
|
+
end
|
|
334
|
+
lock&.delete
|
|
335
|
+
end
|
|
336
|
+
bundle(:install, opts: opts, banner: true)
|
|
337
|
+
end
|
|
338
|
+
when :command
|
|
339
|
+
format_desc action, flag, 'command,opts*,args*'
|
|
340
|
+
task flag, [:command] do |_, args|
|
|
341
|
+
command = param_guard(action, flag, key: :command, args: args)
|
|
342
|
+
bundle(command.to_sym, opts: args.extras, banner: true)
|
|
240
343
|
end
|
|
241
344
|
end
|
|
242
345
|
when 'ruby'
|
|
@@ -244,35 +347,34 @@ module Squared
|
|
|
244
347
|
when :file
|
|
245
348
|
format_desc action, flag, 'path,opts*,args*'
|
|
246
349
|
task flag, [:rb] do |_, args|
|
|
247
|
-
file = args.rb
|
|
248
350
|
opts = args.extras
|
|
249
|
-
args = if file && !file.include?('*')
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
ruby(flag, opts, file: file
|
|
351
|
+
args = Array(if (file = args.rb) && !file.include?('*')
|
|
352
|
+
ENV['RUBY_ARGS']
|
|
353
|
+
else
|
|
354
|
+
a, b, c = choice_index('Select a file', Dir.glob(file || '*.rb', base: path),
|
|
355
|
+
values: (file ? [] : ['Options']).push('Arguments'),
|
|
356
|
+
force: true, series: true)
|
|
357
|
+
if file
|
|
358
|
+
file = a
|
|
359
|
+
b
|
|
360
|
+
else
|
|
361
|
+
file = a
|
|
362
|
+
opts.concat(OptionPartition.strip(b))
|
|
363
|
+
c
|
|
364
|
+
end
|
|
365
|
+
end)
|
|
366
|
+
ruby(*args, flag: flag, opts: opts, file: file)
|
|
265
367
|
end
|
|
266
368
|
when :script
|
|
267
369
|
format_desc action, flag, 'opts*'
|
|
268
370
|
task flag do |_, args|
|
|
269
|
-
command = ENV['RUBY_E'] || readline('Enter script', force: true, multiline: [
|
|
270
|
-
ruby(flag, args.to_a, command: command)
|
|
371
|
+
command = ENV['RUBY_E'] || readline('Enter script', force: true, multiline: %w[## ;])
|
|
372
|
+
ruby(flag: flag, opts: args.to_a, command: command)
|
|
271
373
|
end
|
|
272
374
|
when :version
|
|
273
375
|
format_desc action, flag
|
|
274
376
|
task flag do
|
|
275
|
-
ruby flag
|
|
377
|
+
ruby(flag: flag)
|
|
276
378
|
end
|
|
277
379
|
end
|
|
278
380
|
end
|
|
@@ -303,9 +405,7 @@ module Squared
|
|
|
303
405
|
end
|
|
304
406
|
end
|
|
305
407
|
|
|
306
|
-
def copy(from: gemlib, into: gemdir, override: false, **kwargs)
|
|
307
|
-
return if @copy == false
|
|
308
|
-
|
|
408
|
+
def copy(from: gemlib, into: @gemdir, override: false, **kwargs)
|
|
309
409
|
glob = kwargs[:include]
|
|
310
410
|
pass = kwargs[:exclude]
|
|
311
411
|
if @copy && !override
|
|
@@ -315,6 +415,8 @@ module Squared
|
|
|
315
415
|
glob = @copy[:include] if @copy.key?(:include)
|
|
316
416
|
pass = @copy[:exclude] if @copy.key?(:exclude)
|
|
317
417
|
into = @copy[:into] if @copy.key?(:into)
|
|
418
|
+
elsif @copy == false
|
|
419
|
+
return
|
|
318
420
|
end
|
|
319
421
|
return unless into
|
|
320
422
|
|
|
@@ -327,11 +429,9 @@ module Squared
|
|
|
327
429
|
b = dest + val
|
|
328
430
|
c = glob[i] || glob.first
|
|
329
431
|
log.info "cp #{a + c} #{b}"
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
on_error e, :copy
|
|
334
|
-
end
|
|
432
|
+
copy_dir(a, b, c, pass: pass, verbose: verbosetype > 0)
|
|
433
|
+
rescue StandardError => e
|
|
434
|
+
on_error e, :copy
|
|
335
435
|
end
|
|
336
436
|
on :last, :copy
|
|
337
437
|
end
|
|
@@ -339,14 +439,21 @@ module Squared
|
|
|
339
439
|
def outdated(flag = nil, opts = [], sync: invoked_sync?('outdated', flag))
|
|
340
440
|
cmd = bundle_output 'outdated'
|
|
341
441
|
if flag
|
|
442
|
+
se = (opts.delete('s') || opts.delete('select')) && !stdin?
|
|
443
|
+
up = opts.delete('u') || opts.delete('update')
|
|
342
444
|
cmd << "--#{flag}"
|
|
343
|
-
|
|
445
|
+
OptionPartition.new(opts, bundleopts(:outdated), cmd, project: self)
|
|
446
|
+
.clear
|
|
344
447
|
end
|
|
345
448
|
log.info cmd.to_s
|
|
346
449
|
on :first, :outdated
|
|
347
450
|
banner = format_banner cmd.to_s
|
|
348
|
-
|
|
451
|
+
items = if sync
|
|
452
|
+
print_item banner
|
|
453
|
+
[] if flag && (se || up)
|
|
454
|
+
end
|
|
349
455
|
pwd_set(from: :outdated) do
|
|
456
|
+
tc = theme[:current]
|
|
350
457
|
start = 0
|
|
351
458
|
found = 0
|
|
352
459
|
major = 0
|
|
@@ -403,26 +510,26 @@ module Squared
|
|
|
403
510
|
end
|
|
404
511
|
end
|
|
405
512
|
end
|
|
513
|
+
name = line[/^\S+/, 0]
|
|
406
514
|
unless styles.empty?
|
|
407
515
|
case styles.first
|
|
408
516
|
when :green
|
|
409
|
-
line = sub_style(line,
|
|
517
|
+
line = sub_style(line, **opt_style(theme[styles.last == :bold ? :major : :active], /^(\S+)(.+)$/))
|
|
410
518
|
found += 1
|
|
411
519
|
when :yellow
|
|
412
520
|
found += 1
|
|
413
521
|
end
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
line = sub_style(line, *colormap(styles), pat: /^((?:\S+\s+){2})(#{Regexp.escape(l)})(.*)$/,
|
|
418
|
-
index: 2)
|
|
522
|
+
l = Regexp.escape(l)
|
|
523
|
+
line = sub_style(line, **opt_style(tc, /^(.+)(#{Regexp.escape(c)})(.+)$/, 2)) if tc
|
|
524
|
+
line = sub_style(line, **opt_style(colormap(styles), /^((?:\S+\s+){2})(#{l})(.*)$/, 2))
|
|
419
525
|
end
|
|
420
526
|
end
|
|
421
|
-
|
|
527
|
+
items&.push([line, name])
|
|
528
|
+
out.call('%2d. %s' % [start, line]) unless se
|
|
422
529
|
elsif line.start_with?('Gem')
|
|
423
530
|
unless stdin?
|
|
424
|
-
sub =
|
|
425
|
-
out.call(print_footer(" # #{line.chomp}", reverse: true, sub:
|
|
531
|
+
sub = [opt_style(theme[:header], /^(.+)(?<!\dm)(Gem|Latest)(.+)$/, 2)] * 2
|
|
532
|
+
out.call(print_footer(" # #{line.chomp}", reverse: true, sub: sub))
|
|
426
533
|
end
|
|
427
534
|
else
|
|
428
535
|
next
|
|
@@ -434,6 +541,15 @@ module Squared
|
|
|
434
541
|
puts buffer
|
|
435
542
|
end
|
|
436
543
|
if found > 0
|
|
544
|
+
if items
|
|
545
|
+
gems = if se
|
|
546
|
+
choice('Select a package', items.map(&:first),
|
|
547
|
+
multiple: true, force: false, index: true, border: true).map! { |n| items[n.pred].last }
|
|
548
|
+
else
|
|
549
|
+
items.map(&:last)
|
|
550
|
+
end
|
|
551
|
+
bundle(:update, *gems, opts: [flag.to_s])
|
|
552
|
+
end
|
|
437
553
|
begin
|
|
438
554
|
if major == 0 && dependfile.read =~ /\b(?:source\s+(["'])((?~\1))\1|remote:\s+(\S+))/
|
|
439
555
|
status = ($2 || $3).chomp('/')
|
|
@@ -442,52 +558,18 @@ module Squared
|
|
|
442
558
|
rescue StandardError => e
|
|
443
559
|
log.debug e
|
|
444
560
|
ensure
|
|
445
|
-
status ||= 'Updates are available'
|
|
561
|
+
status ||= (items ? 'Updates were made' : 'Updates are available')
|
|
446
562
|
end
|
|
447
563
|
puts print_footer(empty_status(status, 'major', major, always: !right), right: right)
|
|
448
|
-
elsif start == 0
|
|
564
|
+
elsif start == 0 && banner
|
|
449
565
|
puts 'No updates were found'
|
|
450
566
|
end
|
|
451
567
|
end
|
|
452
568
|
on :last, :outdated
|
|
453
569
|
end
|
|
454
570
|
|
|
455
|
-
def
|
|
456
|
-
|
|
457
|
-
op = append_bundle opts, OPT_BUNDLE[:install_base] + OPT_BUNDLE[:install] + OPT_BUNDLE[:common]
|
|
458
|
-
if op.arg?('force')
|
|
459
|
-
op.delete('--force')
|
|
460
|
-
if flag != :redownload
|
|
461
|
-
op << '--redownload'
|
|
462
|
-
elsif (lock = basepath('Gemfile.lock')).exist?
|
|
463
|
-
config = basepath '.bundle', 'config'
|
|
464
|
-
lock.delete unless config.exist? && config.read.match?(/\bBUNDLE_FROZEN:\s+"true"/)
|
|
465
|
-
end
|
|
466
|
-
end
|
|
467
|
-
run_rb(from: :install)
|
|
468
|
-
end
|
|
469
|
-
|
|
470
|
-
def update(flag, opts = [])
|
|
471
|
-
bundle_session 'update', "--#{flag}"
|
|
472
|
-
append_bundle(opts, OPT_BUNDLE[:install_base] + OPT_BUNDLE[:update] + OPT_BUNDLE[:common],
|
|
473
|
-
append: flag == :all ? nil : /\A[a-z-]+=/)
|
|
474
|
-
run_rb(from: :update)
|
|
475
|
-
end
|
|
476
|
-
|
|
477
|
-
def ruby(flag, opts = [], file: nil, command: nil, args: nil)
|
|
478
|
-
case flag
|
|
479
|
-
when :file, :script
|
|
480
|
-
op = OptionPartition.new(opts, OPT_RUBY[:ruby], ruby_session, project: self, args: true)
|
|
481
|
-
if command
|
|
482
|
-
op << quote_option('e', command, option: false)
|
|
483
|
-
elsif file
|
|
484
|
-
op.unshift(basepath(file))
|
|
485
|
-
end
|
|
486
|
-
unless op.arg?('e')
|
|
487
|
-
op.push(args) if args
|
|
488
|
-
op.append(delim: true, escape: false, quote: false) unless op.empty?
|
|
489
|
-
end
|
|
490
|
-
when :version
|
|
571
|
+
def ruby(*args, flag: nil, sync: true, banner: verbose?, with: nil, pass: PASS_RUBY[:ruby], **kwargs)
|
|
572
|
+
if flag == :version
|
|
491
573
|
pwd_set do
|
|
492
574
|
out = []
|
|
493
575
|
order = { 'rbenv' => -1, 'rvm' => -1, 'asdf' => -1, 'chruby' => -1 }
|
|
@@ -530,15 +612,14 @@ module Squared
|
|
|
530
612
|
.each do |val|
|
|
531
613
|
next unless val.empty? || File.exist?(val.sub('$HOME', Dir.home))
|
|
532
614
|
|
|
533
|
-
trim = ->(s) { s[
|
|
615
|
+
trim = ->(s) { s[/^\D+\d+\.\d+(?:\.\S+)?/, 0].sub(/^([a-z]+)-/i, '\1 ') }
|
|
534
616
|
ver = '.ruby-version'
|
|
535
617
|
out << trim.call(case (cmd = File.basename(val))
|
|
536
618
|
when 'rvm'
|
|
537
619
|
`rvm current`[/^\S+/, 0]
|
|
538
620
|
when 'rbenv'
|
|
539
|
-
`rbenv version-name
|
|
540
|
-
|
|
541
|
-
end
|
|
621
|
+
name = `rbenv version-name`
|
|
622
|
+
name.match?(SEM_VER) ? "ruby #{name}" : name
|
|
542
623
|
when 'chruby.sh'
|
|
543
624
|
chruby = session_output 'source', val
|
|
544
625
|
`#{chruby.with('ruby --version')}`
|
|
@@ -547,7 +628,7 @@ module Squared
|
|
|
547
628
|
cmd = 'asdf'
|
|
548
629
|
ver = '.tool-versions'
|
|
549
630
|
opt = [@asdf.first]
|
|
550
|
-
opt.unshift('--no-header') unless @@asdf
|
|
631
|
+
opt.unshift('--no-header') unless @@asdf.version == 15
|
|
551
632
|
`asdf current #{opt.join(' ')}`[/^\S+\s+\S+/, 0].sub(/\s+/, ' ')
|
|
552
633
|
else
|
|
553
634
|
ver = nil
|
|
@@ -596,138 +677,199 @@ module Squared
|
|
|
596
677
|
end
|
|
597
678
|
return
|
|
598
679
|
end
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
680
|
+
op = OptionPartition.new(session_opts(with, args: args, kwargs: kwargs, pass: pass), OPT_RUBY[:ruby],
|
|
681
|
+
ruby_session, project: self, args: true)
|
|
682
|
+
if (val = kwargs[:file])
|
|
683
|
+
op.unshift(shell_quote(basepath(val)))
|
|
684
|
+
elsif (val = kwargs[:command])
|
|
685
|
+
op << quote_option('e', val)
|
|
686
|
+
end
|
|
687
|
+
append = lambda do |file|
|
|
688
|
+
op.concat(args)
|
|
689
|
+
unless op.empty?
|
|
690
|
+
op.exist?(add: true) if file
|
|
691
|
+
op.append(delim: true, escape: false, quote: false)
|
|
692
|
+
end
|
|
609
693
|
end
|
|
610
|
-
list = OPT_GEM[flag] + OPT_GEM[:common]
|
|
611
|
-
from = :"gem:#{flag}"
|
|
612
694
|
case flag
|
|
613
|
-
when :
|
|
614
|
-
|
|
695
|
+
when :file
|
|
696
|
+
append.call(false)
|
|
697
|
+
when :script
|
|
698
|
+
op.clear
|
|
699
|
+
else
|
|
700
|
+
append.call(true)
|
|
701
|
+
print_run(op, banner, **kwargs)
|
|
615
702
|
end
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
703
|
+
run_rb(sync: sync, banner: banner, from: flag.is_a?(Symbol) ? :"ruby:#{flag}" : :ruby)
|
|
704
|
+
end
|
|
705
|
+
|
|
706
|
+
def gem(flag, *args, sync: true, banner: verbose?, with: nil, pass: nil, **kwargs)
|
|
707
|
+
flag = flag.to_sym
|
|
708
|
+
if pass.nil?
|
|
709
|
+
pass = case flag
|
|
710
|
+
when :install, :update
|
|
711
|
+
PASS_RUBY[:gem][:install]
|
|
712
|
+
when :dependency, :fetch, :info, :list, :outdated, :search, :specification
|
|
713
|
+
PASS_RUBY[:gem][:dependency]
|
|
714
|
+
else
|
|
715
|
+
PASS_RUBY[:gem].fetch(flag, [])
|
|
716
|
+
end
|
|
623
717
|
end
|
|
624
|
-
|
|
718
|
+
opts = session_opts(with, args: args, kwargs: kwargs, pass: pass)
|
|
625
719
|
case flag
|
|
626
|
-
when :outdated
|
|
720
|
+
when :build, :cert, :generate_index, :mirror, :outdated, :push, :server, :signin, :signout, :sources, :stale
|
|
721
|
+
opts.concat(args)
|
|
722
|
+
end
|
|
723
|
+
op = OptionPartition.new(opts, gemopts(flag), gem_session(flag, *preopts), project: self,
|
|
724
|
+
no: OPT_GEM[:no][flag])
|
|
725
|
+
from = :"gem:#{flag}"
|
|
726
|
+
if flag == :outdated
|
|
727
|
+
op.adjoin(gempwd, start: 0) if gempwd
|
|
627
728
|
op.clear
|
|
628
|
-
cmd =
|
|
729
|
+
cmd = session_done op.target
|
|
629
730
|
log.info cmd
|
|
630
731
|
on :first, from
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
732
|
+
banner = format_banner(cmd)
|
|
733
|
+
print_item banner if sync
|
|
734
|
+
major = [0, 0, 0]
|
|
735
|
+
buffer = []
|
|
736
|
+
filter = kwargs.fetch(:filter, {})
|
|
737
|
+
semver = filter[:semver]
|
|
738
|
+
update = if sync && filter[:select]
|
|
739
|
+
semver ||= 'major'
|
|
740
|
+
items = []
|
|
741
|
+
nil
|
|
742
|
+
elsif sync && filter[:interactive]
|
|
743
|
+
semver ||= 'major'
|
|
744
|
+
ia = true
|
|
745
|
+
[]
|
|
746
|
+
elsif filter[:update]
|
|
747
|
+
semver ||= 'minor'
|
|
748
|
+
[]
|
|
749
|
+
end
|
|
750
|
+
out = ->(val) { sync ? puts(val) : buffer << val }
|
|
636
751
|
pwd_set(pass: !gempwd.nil?, from: from) do
|
|
637
|
-
|
|
752
|
+
rows = [[%w[Gem Current Latest], nil]]
|
|
638
753
|
IO.popen(cmd).each do |line|
|
|
639
754
|
if line =~ /^(\S+) \((\S+) < ([^)]+)\)$/
|
|
640
755
|
cur = semscan $2
|
|
641
756
|
lat = semscan $3
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
757
|
+
rows << [$~.to_a.drop(1), if semmajor?(cur, lat)
|
|
758
|
+
1
|
|
759
|
+
else
|
|
760
|
+
cur[2] == lat[2] ? 3 : 2
|
|
761
|
+
end]
|
|
647
762
|
else
|
|
648
|
-
|
|
763
|
+
out.call(line)
|
|
649
764
|
end
|
|
650
765
|
end
|
|
651
|
-
if
|
|
652
|
-
pad = [
|
|
766
|
+
if rows.size > 1
|
|
767
|
+
pad = [rows.size.to_s.size.succ, 3].max
|
|
653
768
|
d = 0
|
|
654
769
|
e = 0
|
|
655
770
|
f = 0
|
|
656
771
|
j = 0
|
|
657
772
|
queue = nil
|
|
658
|
-
|
|
659
|
-
a, b, c =
|
|
773
|
+
rows.each do |row|
|
|
774
|
+
a, b, c = row.first
|
|
660
775
|
d = a.size if a.size > d
|
|
661
776
|
e = b.size if b.size > e
|
|
662
777
|
f = c.size if c.size > f
|
|
663
778
|
end
|
|
664
|
-
|
|
779
|
+
rows.each_with_index do |row, i|
|
|
665
780
|
next if i == 0 && stdin?
|
|
666
781
|
|
|
667
|
-
a, b, c =
|
|
782
|
+
a, b, c = row.first
|
|
668
783
|
if i == 0
|
|
669
784
|
line = '%-*s %-*s %*s %*s' % [pad, ' #', d, a, e, b, f, c]
|
|
670
785
|
n = line.size
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
786
|
+
queue = if stdin?
|
|
787
|
+
[line, ARG[:BORDER][1] * n]
|
|
788
|
+
else
|
|
789
|
+
2.times do
|
|
790
|
+
line = sub_style(line, **opt_style(theme[:header], /^(.+)(?<!\dm)(#{a}|#{c})(.*)$/, 2))
|
|
791
|
+
end
|
|
792
|
+
[line, sub_style(ARG[:BORDER][1] * n, styles: borderstyle)]
|
|
793
|
+
end
|
|
675
794
|
else
|
|
676
795
|
g = a.ljust(d)
|
|
677
796
|
pat = [/^([^.]+\.)([^.]+\..+)$/, /^([^.]+\.[^.]+\.)(.+)$/]
|
|
678
797
|
pre = b.start_with?('0.')
|
|
679
798
|
latest = [theme[:latest]]
|
|
680
|
-
case
|
|
799
|
+
case row.last
|
|
681
800
|
when 1
|
|
682
|
-
case
|
|
801
|
+
case semver
|
|
683
802
|
when 'major'
|
|
684
|
-
update
|
|
803
|
+
update&.push(a)
|
|
685
804
|
when 'minor', 'patch'
|
|
686
805
|
next
|
|
687
806
|
end
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
807
|
+
unless stdin?
|
|
808
|
+
g = sub_style(g, styles: theme[:major])
|
|
809
|
+
styles = %i[green bold]
|
|
810
|
+
pat = (pat.first if pre)
|
|
811
|
+
latest << :bold
|
|
812
|
+
end
|
|
813
|
+
major[0] += 1
|
|
693
814
|
when 2
|
|
694
|
-
case
|
|
815
|
+
case semver
|
|
695
816
|
when 'major', 'minor'
|
|
696
|
-
update
|
|
817
|
+
update&.push(a)
|
|
697
818
|
when 'patch'
|
|
698
819
|
next
|
|
699
820
|
end
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
821
|
+
unless stdin?
|
|
822
|
+
g = sub_style(g, styles: theme[:active])
|
|
823
|
+
styles = %i[green]
|
|
824
|
+
pat = pre ? pat.last : pat.first
|
|
825
|
+
end
|
|
826
|
+
major[1] += 1
|
|
704
827
|
else
|
|
705
|
-
case
|
|
828
|
+
case semver
|
|
706
829
|
when 'major', 'minor', 'patch'
|
|
707
|
-
update
|
|
830
|
+
update&.push(a)
|
|
708
831
|
end
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
832
|
+
unless stdin?
|
|
833
|
+
styles = %i[yellow]
|
|
834
|
+
pat = pat.last
|
|
835
|
+
end
|
|
836
|
+
major[2] += 1
|
|
837
|
+
end
|
|
838
|
+
b = b.rjust(e)
|
|
839
|
+
h = c.rjust(f)
|
|
840
|
+
unless stdin?
|
|
841
|
+
b = sub_style(b, **opt_style(colormap(styles), pat, 2))
|
|
842
|
+
h = sub_style(h, **opt_style(latest.flatten.compact, pat, 2))
|
|
712
843
|
end
|
|
713
|
-
b = sub_style(b.rjust(e), *colormap(styles), pat: pat, index: 2)
|
|
714
|
-
h = sub_style(c.rjust(f), styles: latest.flatten.compact, pat: pat, index: 2)
|
|
715
844
|
j += 1
|
|
716
845
|
if queue
|
|
717
|
-
|
|
846
|
+
out.call(queue)
|
|
718
847
|
queue = nil
|
|
719
848
|
end
|
|
720
|
-
|
|
721
|
-
|
|
849
|
+
s = '%s %s %s' % [g, b, h]
|
|
850
|
+
if items
|
|
851
|
+
items << [s, a]
|
|
852
|
+
else
|
|
853
|
+
out.call('%*s %s' % [pad, "#{j}.", s])
|
|
854
|
+
end
|
|
855
|
+
update.delete(a) if ia && !confirm_outdated(a, c, row.last, timeout: 0)
|
|
722
856
|
end
|
|
723
857
|
end
|
|
724
858
|
end
|
|
725
859
|
end
|
|
726
|
-
|
|
860
|
+
unless sync
|
|
861
|
+
print_item banner
|
|
862
|
+
puts buffer
|
|
863
|
+
end
|
|
864
|
+
if major.sum == 0
|
|
727
865
|
puts 'No updates were found'
|
|
728
866
|
else
|
|
729
|
-
|
|
730
|
-
|
|
867
|
+
if items
|
|
868
|
+
update = choice('Select a package', items.map(&:first),
|
|
869
|
+
multiple: true, force: false, index: true, border: true).map! { |n| items[n.pred].last }
|
|
870
|
+
end
|
|
871
|
+
if update && !update.empty?
|
|
872
|
+
cmd = gem_output 'update -f'
|
|
731
873
|
option('document', prefix: 'gem', ignore: false) do |val|
|
|
732
874
|
cmd << case val
|
|
733
875
|
when '0', 'false'
|
|
@@ -745,18 +887,40 @@ module Squared
|
|
|
745
887
|
end
|
|
746
888
|
end
|
|
747
889
|
cmd.merge(update)
|
|
748
|
-
run(cmd, banner: false, from: :'gem:update')
|
|
890
|
+
run(cmd, sync: sync, banner: false, from: :'gem:update')
|
|
749
891
|
end
|
|
750
|
-
print_status(major,
|
|
892
|
+
print_status(*major, from: :outdated)
|
|
751
893
|
end
|
|
752
894
|
on :last, from
|
|
753
895
|
return
|
|
896
|
+
end
|
|
897
|
+
case flag
|
|
898
|
+
when :check, :cleanup, :contents, :fetch, :info, :lock, :open, :owner, :pristine, :rdoc, :rebuild, :uninstall,
|
|
899
|
+
:unpack, :update, :yank
|
|
900
|
+
gems = true
|
|
901
|
+
op.concat(args)
|
|
902
|
+
when :dependency, :environment, :list, :search, :specification, :which
|
|
903
|
+
op.concat(args)
|
|
904
|
+
end
|
|
905
|
+
op.each do |opt|
|
|
906
|
+
if gems && !opt.start_with?('-') && !opt.match?(GEMNAME)
|
|
907
|
+
op.errors << opt
|
|
908
|
+
else
|
|
909
|
+
op.found << opt
|
|
910
|
+
end
|
|
911
|
+
end
|
|
912
|
+
op.swap do |a, b|
|
|
913
|
+
return -1 if a.start_with?('-')
|
|
914
|
+
|
|
915
|
+
b.start_with?('-') ? 1 : 0
|
|
916
|
+
end
|
|
917
|
+
case flag
|
|
754
918
|
when :build
|
|
755
919
|
if op.empty?
|
|
756
|
-
raise_error
|
|
920
|
+
raise_error Errno::ENOENT, 'gemspec', hint: project unless gemfile
|
|
757
921
|
op.add_path(gemfile)
|
|
758
922
|
else
|
|
759
|
-
op.
|
|
923
|
+
op.add_first(path: true)
|
|
760
924
|
.clear(pass: false)
|
|
761
925
|
end
|
|
762
926
|
when :push
|
|
@@ -764,41 +928,51 @@ module Squared
|
|
|
764
928
|
file = basepath(if !n && (spec = gemspec)
|
|
765
929
|
"#{spec.name}-#{spec.version}.gem"
|
|
766
930
|
else
|
|
767
|
-
choice_index
|
|
931
|
+
choice_index('Select a file', Dir.glob('*.gem', base: path), force: true)
|
|
768
932
|
end)
|
|
769
933
|
else
|
|
770
|
-
file = op.shift.yield_self { |val| val.include?('.') ? val : "#{val}.gem" }
|
|
771
|
-
raise_error
|
|
934
|
+
file = basepath(op.shift.yield_self { |val| val.include?('.') ? val : "#{val}.gem" })
|
|
935
|
+
raise_error Errno::ENOENT, file, hint: flag unless file.exist?
|
|
936
|
+
raise_error ArgumentError, "unrecognized args: #{op.join(', ')}", hint: flag unless op.empty?
|
|
772
937
|
end
|
|
773
|
-
raise_error('gem not found', hint: file) unless op.exist?(file)
|
|
774
938
|
op.add_path(file)
|
|
775
|
-
run_rb(from: from, interactive:
|
|
776
|
-
return
|
|
939
|
+
return run_rb(from: from, interactive: ['Push', 'N', gemname]) unless with || !banner
|
|
777
940
|
when :exec
|
|
778
941
|
min = if op.arg?('g', 'gem')
|
|
779
942
|
1
|
|
780
|
-
elsif op.empty?
|
|
943
|
+
elsif !op.empty?
|
|
944
|
+
op.add_first
|
|
945
|
+
0
|
|
946
|
+
elsif args.empty?
|
|
781
947
|
op << basic_option('gem', gemname)
|
|
782
948
|
1
|
|
783
949
|
else
|
|
784
|
-
op << op.shift
|
|
785
950
|
0
|
|
786
951
|
end
|
|
952
|
+
op.concat(args)
|
|
787
953
|
if (args = command_args(op.extras, min: min, force: min == 1 && op.empty?))
|
|
788
954
|
op.push(args)
|
|
789
955
|
end
|
|
790
956
|
op.append(quote: false)
|
|
791
957
|
when :update
|
|
792
|
-
|
|
793
|
-
if
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
op.append
|
|
797
|
-
end
|
|
958
|
+
if op.arg?('system')
|
|
959
|
+
op.add_first(quote: false) { |val| val if val.match?(SEM_VER) }
|
|
960
|
+
else
|
|
961
|
+
op.append
|
|
798
962
|
end
|
|
799
|
-
op.clear(errors: true)
|
|
800
963
|
when :install, :uninstall, :pristine
|
|
801
|
-
|
|
964
|
+
if flag == :install
|
|
965
|
+
post = if op.remove(':')
|
|
966
|
+
op.concat(args)
|
|
967
|
+
readline('Enter command [args]', force: true)
|
|
968
|
+
elsif op.empty?
|
|
969
|
+
op.concat(args)
|
|
970
|
+
nil
|
|
971
|
+
elsif !args.empty?
|
|
972
|
+
args.join(' ')
|
|
973
|
+
end
|
|
974
|
+
end
|
|
975
|
+
raise_error ArgumentError, 'missing gem name', hint: flag if op.empty?
|
|
802
976
|
if op.arg?('all')
|
|
803
977
|
if flag == :pristine
|
|
804
978
|
append_repeat 'skip', op.extras
|
|
@@ -807,79 +981,190 @@ module Squared
|
|
|
807
981
|
op.clear
|
|
808
982
|
end
|
|
809
983
|
elsif (n = op.index { |val| val.match?(/(\A|[a-z])@\d/) })
|
|
810
|
-
name = op.
|
|
984
|
+
name = op.remove_at(n)
|
|
811
985
|
pre, ver = if (n = name.index('@')) == 0
|
|
812
986
|
[gemname, name[1..-1]]
|
|
813
987
|
else
|
|
814
|
-
[name[0, n], name[
|
|
988
|
+
[name[0, n], name[n.succ..-1]]
|
|
815
989
|
end
|
|
816
|
-
op.adjoin(pre,
|
|
990
|
+
op.adjoin(pre, shell_option('version', ver))
|
|
817
991
|
.clear
|
|
818
|
-
|
|
992
|
+
end
|
|
993
|
+
if flag == :install
|
|
819
994
|
op.append_any
|
|
820
995
|
else
|
|
821
996
|
op.append
|
|
822
997
|
end
|
|
823
|
-
op
|
|
824
|
-
|
|
825
|
-
else
|
|
998
|
+
op << '--' << post if post
|
|
999
|
+
when :check, :cleanup, :contents, :fetch, :list, :lock, :rdoc
|
|
826
1000
|
op.append
|
|
1001
|
+
when :dependency, :info, :search
|
|
1002
|
+
op.add_first(quote: true, expect: case flag
|
|
1003
|
+
when :dependency, :search then 'no pattern for gem name'
|
|
1004
|
+
else 'missing gem name'
|
|
1005
|
+
end)
|
|
1006
|
+
.clear
|
|
1007
|
+
when :environment
|
|
1008
|
+
unless op.empty?
|
|
1009
|
+
case (action = op.shift)
|
|
1010
|
+
when 'home', 'path', 'user_gemhome', 'version', 'remotesources', 'platform', 'credentials'
|
|
1011
|
+
op << action
|
|
1012
|
+
op.clear
|
|
1013
|
+
else
|
|
1014
|
+
raise_error ArgumentError, "unrecognized arg: #{action}", hint: flag
|
|
1015
|
+
end
|
|
1016
|
+
end
|
|
1017
|
+
when :open, :owner, :unpack, :yank
|
|
1018
|
+
op.add_first(gemname)
|
|
1019
|
+
.clear
|
|
1020
|
+
when :rebuild
|
|
1021
|
+
op.add_first(expect: 'missing gem name')
|
|
1022
|
+
.add_first(expect: 'missing gem version')
|
|
1023
|
+
.clear
|
|
1024
|
+
when :specification
|
|
1025
|
+
op.add_first(expect: 'missing gem name')
|
|
1026
|
+
.add_first
|
|
1027
|
+
.clear
|
|
1028
|
+
when :which
|
|
1029
|
+
op.splice(path: true) { |val| op.exist?(val) }
|
|
1030
|
+
.clear
|
|
1031
|
+
else
|
|
1032
|
+
op.clear
|
|
827
1033
|
end
|
|
828
|
-
|
|
1034
|
+
op.clear(errors: true) if gems
|
|
1035
|
+
print_run(op, banner, **kwargs)
|
|
1036
|
+
run_rb(sync: sync, banner: banner, from: from)
|
|
829
1037
|
end
|
|
830
1038
|
|
|
831
|
-
def bundle(flag, *args)
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
1039
|
+
def bundle(flag, *args, sync: true, banner: verbose?, with: nil, pass: nil, **kwargs)
|
|
1040
|
+
flag = flag.to_sym
|
|
1041
|
+
if pass.nil?
|
|
1042
|
+
pass = case flag
|
|
1043
|
+
when :add, :outdated, :update
|
|
1044
|
+
PASS_RUBY[:bundle][:update]
|
|
1045
|
+
else
|
|
1046
|
+
PASS_RUBY[:bundle].fetch(flag, [])
|
|
1047
|
+
end
|
|
1048
|
+
end
|
|
1049
|
+
opts = session_opts(with, args: args, kwargs: kwargs, pass: pass)
|
|
840
1050
|
case flag
|
|
841
|
-
when
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
option_clear args
|
|
845
|
-
args.clear
|
|
1051
|
+
when :cache, :check, :clean, :doctor, :init, :install, :lock, :pack, :package, :platform
|
|
1052
|
+
pre = true
|
|
1053
|
+
opts.concat(args)
|
|
846
1054
|
end
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
1055
|
+
op = OptionPartition.new(opts, bundleopts(flag), bundle_session(flag),
|
|
1056
|
+
project: self, no: OPT_BUNDLE[:no][flag], args: flag == :exec)
|
|
1057
|
+
op.concat(args) unless pre
|
|
1058
|
+
output = false
|
|
1059
|
+
invalid = ->(a) { raise_error ArgumentError, "unrecognized args: #{a.join(', ')}", hint: flag }
|
|
1060
|
+
case flag
|
|
1061
|
+
when :config
|
|
1062
|
+
if op.empty?
|
|
1063
|
+
op << (val = readline('Enter arguments', force: false))
|
|
1064
|
+
output = val.match?(/(?:un)?set/)
|
|
1065
|
+
else
|
|
1066
|
+
a = op.dup
|
|
1067
|
+
b = op.shift
|
|
1068
|
+
c = op.shift
|
|
1069
|
+
d = op.shift
|
|
1070
|
+
e = op.arg?('global', 'local')
|
|
1071
|
+
op << b
|
|
1072
|
+
getname = -> { op << (c || readline('Enter name', force: true)) }
|
|
1073
|
+
case b
|
|
1074
|
+
when 'list'
|
|
1075
|
+
nil
|
|
1076
|
+
when 'get'
|
|
1077
|
+
getname.call
|
|
1078
|
+
when 'set'
|
|
1079
|
+
if e
|
|
1080
|
+
op << c
|
|
1081
|
+
c = d
|
|
1082
|
+
d = op.shift
|
|
1083
|
+
end
|
|
1084
|
+
getname.call
|
|
1085
|
+
op << (d || readline('Enter value', force: true))
|
|
1086
|
+
output = true
|
|
1087
|
+
when 'unset'
|
|
1088
|
+
if e
|
|
1089
|
+
op << c
|
|
1090
|
+
c = d
|
|
1091
|
+
end
|
|
1092
|
+
getname.call
|
|
1093
|
+
output = true
|
|
1094
|
+
else
|
|
1095
|
+
if b
|
|
1096
|
+
op << b
|
|
1097
|
+
if c
|
|
1098
|
+
op.add_quote(c)
|
|
1099
|
+
output = true
|
|
1100
|
+
end
|
|
1101
|
+
else
|
|
1102
|
+
invalid.call(a)
|
|
1103
|
+
end
|
|
1104
|
+
end
|
|
1105
|
+
op.clear
|
|
1106
|
+
end
|
|
1107
|
+
when :plugin
|
|
1108
|
+
a = op.dup
|
|
1109
|
+
case (b = op.shift)
|
|
1110
|
+
when 'install', 'uninstall', 'help'
|
|
1111
|
+
op.append
|
|
1112
|
+
when 'list'
|
|
1113
|
+
op.clear
|
|
1114
|
+
else
|
|
1115
|
+
invalid.call(a)
|
|
1116
|
+
end
|
|
1117
|
+
op.adjoin(b, with: 'plugin')
|
|
1118
|
+
when :exec
|
|
1119
|
+
if op.empty? || (op.delete(':') && op.append(quote: false))
|
|
1120
|
+
op << readline('Enter arguments', force: true)
|
|
1121
|
+
else
|
|
1122
|
+
op.append(quote: false)
|
|
1123
|
+
end
|
|
1124
|
+
when :binstubs, :outdated, :remove, :update
|
|
1125
|
+
op.append(filter: GEMNAME)
|
|
1126
|
+
.clear(errors: true)
|
|
1127
|
+
when :add, :open, :show
|
|
1128
|
+
op.add_first(expect: 'missing gem name')
|
|
1129
|
+
.clear
|
|
1130
|
+
when :console, :gem
|
|
1131
|
+
op.add_first
|
|
1132
|
+
.clear
|
|
857
1133
|
else
|
|
858
|
-
|
|
1134
|
+
op.clear
|
|
859
1135
|
end
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
run_s(args, banner: false, from: :rake)
|
|
1136
|
+
print_run(op, banner, **kwargs)
|
|
1137
|
+
run(sync: sync, banner: banner, from: :"bundle:#{flag}").tap { |ret| success?(ret, banner, output) }
|
|
863
1138
|
end
|
|
864
1139
|
|
|
865
|
-
def
|
|
1140
|
+
def rake(*args, sync: true, banner: verbose?, with: nil, pass: PASS_RUBY[:rake], **kwargs)
|
|
1141
|
+
opts = session_opts(with, args: args, kwargs: kwargs, pass: pass)
|
|
1142
|
+
op = OptionPartition.new(opts, OPT_RUBY[:rake], rake_session, project: self)
|
|
1143
|
+
op.adjoin(quote_option('f', rakefile)) if rakefile && !op.arg?('f', 'rakefile')
|
|
1144
|
+
op.concat(args)
|
|
1145
|
+
op.append(escape: true)
|
|
1146
|
+
print_run(op, banner, **kwargs)
|
|
1147
|
+
run(op, ({ 'BANNER' => '0' } unless banner), sync: sync, banner: false, from: :rake)
|
|
1148
|
+
end
|
|
1149
|
+
|
|
1150
|
+
def irb(*args, banner: verbose?, with: nil, pass: PASS_RUBY[:irb], **kwargs)
|
|
1151
|
+
opts = session_opts(with, args: args, kwargs: kwargs, pass: pass)
|
|
866
1152
|
op = OptionPartition.new(opts, OPT_RUBY[:irb], session('irb'), project: self, first: [/\.rb$/])
|
|
867
|
-
r =
|
|
868
|
-
r <<
|
|
869
|
-
r
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
end
|
|
877
|
-
run(banner: false)
|
|
1153
|
+
r = []
|
|
1154
|
+
r << 'bundler/setup' unless op.arg?('r')
|
|
1155
|
+
r << kwargs[:name] if kwargs[:name]
|
|
1156
|
+
r.each { |val| op.add_option('r', val, merge: true) }
|
|
1157
|
+
Array(kwargs.fetch(:path, gemlib)).each { |val| op << quote_option('I', val, merge: true) }
|
|
1158
|
+
op.concat(args)
|
|
1159
|
+
op.append(delim: true)
|
|
1160
|
+
print_run(op, banner, **kwargs)
|
|
1161
|
+
run(banner: false, from: :irb)
|
|
878
1162
|
end
|
|
879
1163
|
|
|
880
1164
|
def gemspec
|
|
881
|
-
@gemspec
|
|
882
|
-
|
|
1165
|
+
return @gemspec || nil unless @gemspec.nil?
|
|
1166
|
+
|
|
1167
|
+
@gemspec = gemfile && Gem::Specification.load(gemfile.to_s) rescue false
|
|
883
1168
|
end
|
|
884
1169
|
|
|
885
1170
|
def gemname
|
|
@@ -892,23 +1177,24 @@ module Squared
|
|
|
892
1177
|
|
|
893
1178
|
def copy?
|
|
894
1179
|
return true if @copy.is_a?(Hash) ? copy[:into] : super
|
|
895
|
-
return gemdir? if gemdir
|
|
1180
|
+
return gemdir? if @gemdir
|
|
896
1181
|
|
|
897
1182
|
if version
|
|
898
1183
|
begin
|
|
899
1184
|
case @autodetect
|
|
900
1185
|
when 'rvm'
|
|
901
|
-
|
|
1186
|
+
pwd_set { `rvm info homes` }[/^\s+gem:\s+"(.+)"$/, 1]
|
|
902
1187
|
when 'rbenv'
|
|
903
1188
|
if pwd_set { `rbenv which ruby` } =~ %r{^(.+[\\/]versions[\\/](\d\.\d)\.[^\\/]+)[\\/]bin[\\/]ruby$}
|
|
904
|
-
|
|
1189
|
+
File.join($1, 'lib/ruby/gems', "#{$2}.0")
|
|
905
1190
|
end
|
|
906
1191
|
when 'asdf'
|
|
907
|
-
|
|
908
|
-
|
|
1192
|
+
pwd_set { `asdf where ruby` }.yield_self do |val|
|
|
1193
|
+
val =~ /(\d\.\d)\.[^.]+$/ && File.join(val, 'lib/ruby/gems', "#{$1}.0")
|
|
1194
|
+
end
|
|
909
1195
|
when /bundler?/
|
|
910
|
-
|
|
911
|
-
end
|
|
1196
|
+
pwd_set { `bundle env` }[/^\s+Gem Home\s+(.+)$/, 1]
|
|
1197
|
+
end.tap { |val| @gemdir = Pathname.new(val) if val }
|
|
912
1198
|
rescue StandardError => e
|
|
913
1199
|
log.debug e
|
|
914
1200
|
end
|
|
@@ -918,34 +1204,34 @@ module Squared
|
|
|
918
1204
|
|
|
919
1205
|
set = lambda do |val, path|
|
|
920
1206
|
if (ver = version) && ver != val
|
|
921
|
-
log.warn "using version #{val}
|
|
1207
|
+
log.warn "using version #{val}".subhint("given #{ver}")
|
|
922
1208
|
end
|
|
923
1209
|
self.version = val
|
|
924
|
-
|
|
1210
|
+
@gemdir = Pathname.new(path.strip) + gempath
|
|
925
1211
|
end
|
|
926
1212
|
if version
|
|
927
1213
|
opt = gempwd
|
|
928
1214
|
pwd_set(pass: !opt.nil?) do
|
|
929
1215
|
out = `#{gem_output(opt, 'list --local -d', gemname)}`
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
1216
|
+
next unless out =~ /#{Regexp.escape(gemname)} \(([^)]+)\)/
|
|
1217
|
+
|
|
1218
|
+
split_escape($1)
|
|
1219
|
+
.unshift(version)
|
|
1220
|
+
.uniq
|
|
1221
|
+
.each do |val|
|
|
1222
|
+
next unless out =~ /\(#{Regexp.escape(val)}[^)]*\):([^\n]+)/
|
|
1223
|
+
|
|
1224
|
+
set.call(val, $1)
|
|
1225
|
+
return gemdir? if @gemdir
|
|
1226
|
+
end
|
|
941
1227
|
end
|
|
942
|
-
|
|
1228
|
+
@gemdir = Pathname.new(Gem.dir) + gempath
|
|
943
1229
|
else
|
|
944
1230
|
parse = lambda do |path|
|
|
945
1231
|
next unless path
|
|
946
1232
|
|
|
947
1233
|
lib = Regexp.new(['', 'gems', "#{gemname}-([^#{File::SEPARATOR}]+)", ''].join(File::SEPARATOR))
|
|
948
|
-
if (ver = path[lib, 1]) && (val = path[/\A(.+)#{
|
|
1234
|
+
if (ver = path[lib, 1]) && (val = path[/\A(.+)#{gempath(ver[1])}/, 1])
|
|
949
1235
|
set.call(ver, val)
|
|
950
1236
|
end
|
|
951
1237
|
end
|
|
@@ -953,8 +1239,8 @@ module Squared
|
|
|
953
1239
|
target = RUBY_VERSION.start_with?('2.6') ? RubyVM : $LOAD_PATH
|
|
954
1240
|
parse.call(target.resolve_feature_path(gemname)&.last)
|
|
955
1241
|
end
|
|
956
|
-
|
|
957
|
-
raise_error 'gems
|
|
1242
|
+
unless @gemdir || pwd_set { parse.call(`#{bundle_output('show', gemname)}`) }
|
|
1243
|
+
raise_error Errno::ENOENT, 'gems home'
|
|
958
1244
|
end
|
|
959
1245
|
end
|
|
960
1246
|
rescue StandardError => e
|
|
@@ -967,7 +1253,7 @@ module Squared
|
|
|
967
1253
|
end
|
|
968
1254
|
|
|
969
1255
|
def outdated?
|
|
970
|
-
dependtype > 0
|
|
1256
|
+
dependtype > 0
|
|
971
1257
|
end
|
|
972
1258
|
|
|
973
1259
|
private
|
|
@@ -976,36 +1262,23 @@ module Squared
|
|
|
976
1262
|
run(banner: !@session&.include?('--quiet'), **kwargs)
|
|
977
1263
|
end
|
|
978
1264
|
|
|
979
|
-
def append_bundle(opts, list, target: @session, append: nil)
|
|
980
|
-
op = OptionPartition.new(opts, list, target, project: self)
|
|
981
|
-
if append
|
|
982
|
-
if append.is_a?(Regexp)
|
|
983
|
-
op.each do |opt|
|
|
984
|
-
if opt.match?(append)
|
|
985
|
-
op.errors << opt
|
|
986
|
-
else
|
|
987
|
-
op.found << opt
|
|
988
|
-
end
|
|
989
|
-
end
|
|
990
|
-
op.swap.clear(errors: true)
|
|
991
|
-
end
|
|
992
|
-
op.append(escape: true)
|
|
993
|
-
else
|
|
994
|
-
op.clear
|
|
995
|
-
end
|
|
996
|
-
op
|
|
997
|
-
end
|
|
998
|
-
|
|
999
1265
|
def ruby_session(*cmd, **kwargs)
|
|
1000
1266
|
session('ruby', *preopts, *cmd, **kwargs)
|
|
1001
1267
|
end
|
|
1002
1268
|
|
|
1003
1269
|
def gem_session(*cmd, **kwargs)
|
|
1004
|
-
session('gem', *cmd,
|
|
1270
|
+
ret = session('gem', *cmd, **kwargs)
|
|
1271
|
+
return ret if cmd.empty?
|
|
1272
|
+
|
|
1273
|
+
ret.merge(preopts)
|
|
1005
1274
|
end
|
|
1006
1275
|
|
|
1007
1276
|
def bundle_session(*cmd, **kwargs)
|
|
1008
|
-
session('bundle', *cmd,
|
|
1277
|
+
ret = session('bundle', *cmd, **kwargs)
|
|
1278
|
+
return ret if cmd.empty?
|
|
1279
|
+
|
|
1280
|
+
append_nocolor
|
|
1281
|
+
ret.merge(preopts)
|
|
1009
1282
|
end
|
|
1010
1283
|
|
|
1011
1284
|
def rake_session(*cmd, **kwargs)
|
|
@@ -1051,7 +1324,7 @@ module Squared
|
|
|
1051
1324
|
end
|
|
1052
1325
|
|
|
1053
1326
|
def preopts
|
|
1054
|
-
|
|
1327
|
+
verbose? && !session_arg?('quiet') ? ['--verbose'] : []
|
|
1055
1328
|
end
|
|
1056
1329
|
|
|
1057
1330
|
def variables
|
|
@@ -1059,11 +1332,10 @@ module Squared
|
|
|
1059
1332
|
end
|
|
1060
1333
|
|
|
1061
1334
|
def rakefile
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
@rakefile || nil
|
|
1335
|
+
return @rakefile || nil unless @rakefile.nil?
|
|
1336
|
+
|
|
1337
|
+
file = Rake::Application::DEFAULT_RAKEFILES.find { |val| exist?(val) }
|
|
1338
|
+
@rakefile = file ? basepath(file) : false
|
|
1067
1339
|
end
|
|
1068
1340
|
|
|
1069
1341
|
def rakepwd
|
|
@@ -1085,6 +1357,38 @@ module Squared
|
|
|
1085
1357
|
end
|
|
1086
1358
|
end
|
|
1087
1359
|
|
|
1360
|
+
def bundleopts(*args)
|
|
1361
|
+
case args.first
|
|
1362
|
+
when :install, :update
|
|
1363
|
+
args << :install_a
|
|
1364
|
+
when :add, :plugin
|
|
1365
|
+
args << :common_git
|
|
1366
|
+
when :binstubs, :cache
|
|
1367
|
+
args << :common_all
|
|
1368
|
+
end
|
|
1369
|
+
OPT_BUNDLE[:common] + args.flat_map { |name| OPT_BUNDLE.fetch(name, []) }
|
|
1370
|
+
end
|
|
1371
|
+
|
|
1372
|
+
def gemopts(*args)
|
|
1373
|
+
case args.first
|
|
1374
|
+
when :install, :update
|
|
1375
|
+
args << :common_url << :common_domain << :install_a
|
|
1376
|
+
when :dependency, :info, :outdated, :search, :specification
|
|
1377
|
+
args << :common_url << :common_domain
|
|
1378
|
+
when :fetch, :list
|
|
1379
|
+
args << :common_url
|
|
1380
|
+
when :owner, :push, :yank
|
|
1381
|
+
args << :common_otp
|
|
1382
|
+
when :package, :pack
|
|
1383
|
+
args << :cache
|
|
1384
|
+
end
|
|
1385
|
+
case args.first
|
|
1386
|
+
when :info, :list, :search
|
|
1387
|
+
args << :common_all
|
|
1388
|
+
end
|
|
1389
|
+
OPT_GEM[:common] + args.flat_map { |name| OPT_GEM.fetch(name, []) }
|
|
1390
|
+
end
|
|
1391
|
+
|
|
1088
1392
|
def gempwd
|
|
1089
1393
|
return unless !pwd? && semgte?(Gem::VERSION, '3.4.2')
|
|
1090
1394
|
|
|
@@ -1092,20 +1396,20 @@ module Squared
|
|
|
1092
1396
|
end
|
|
1093
1397
|
|
|
1094
1398
|
def gemfile
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
@gemfile || nil
|
|
1399
|
+
return @gemfile || nil unless @gemfile.nil?
|
|
1400
|
+
|
|
1401
|
+
@gemfile = [project, name].map! { |val| basepath("#{val}.gemspec") }
|
|
1402
|
+
.concat(path.glob('*.gemspec'))
|
|
1403
|
+
.find(&:exist?) || false
|
|
1101
1404
|
end
|
|
1102
1405
|
|
|
1103
1406
|
def gemlib
|
|
1104
|
-
@gemlib ||=
|
|
1407
|
+
@gemlib ||= begin
|
|
1408
|
+
lib = Set.new(['lib'])
|
|
1105
1409
|
if (spec = gemspec)
|
|
1106
1410
|
lib.merge(spec.require_paths || [])
|
|
1107
1411
|
end
|
|
1108
|
-
lib.select { |file|
|
|
1412
|
+
lib.select { |file| exist?(file) }
|
|
1109
1413
|
end
|
|
1110
1414
|
end
|
|
1111
1415
|
|
|
@@ -1114,9 +1418,7 @@ module Squared
|
|
|
1114
1418
|
end
|
|
1115
1419
|
|
|
1116
1420
|
def gemdir?
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
gemdir.exist? && !gemdir.empty?
|
|
1421
|
+
!@gemdir.nil? && @gemdir.exist? && !@gemdir.empty?
|
|
1120
1422
|
end
|
|
1121
1423
|
end
|
|
1122
1424
|
|