squared 0.5.16 → 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 -64
- data/README.md +75 -34
- data/lib/squared/common/base.rb +1 -22
- data/lib/squared/common/format.rb +34 -26
- data/lib/squared/common/prompt.rb +57 -34
- data/lib/squared/common/shell.rb +70 -49
- data/lib/squared/common/system.rb +69 -36
- data/lib/squared/common/utils.rb +29 -6
- data/lib/squared/config.rb +23 -26
- data/lib/squared/version.rb +1 -1
- data/lib/squared/workspace/application.rb +80 -81
- data/lib/squared/workspace/project/base.rb +517 -354
- data/lib/squared/workspace/project/docker.rb +376 -273
- data/lib/squared/workspace/project/git.rb +329 -314
- data/lib/squared/workspace/project/node.rb +494 -265
- data/lib/squared/workspace/project/python.rb +328 -199
- data/lib/squared/workspace/project/ruby.rb +655 -347
- data/lib/squared/workspace/project/support/class.rb +189 -169
- data/lib/squared/workspace/repo.rb +43 -41
- data/lib/squared/workspace/series.rb +6 -6
- 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 +1 -1
- metadata +2 -2
- 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,48 +24,121 @@ 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
|
-
|
|
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,
|
|
29
46
|
outdated: %w[filter-major filter-minor filter-patch groups local parseable pre only-explicit strict
|
|
30
|
-
update-strict group=q source=
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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=b].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
|
|
@@ -80,15 +155,10 @@ 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
|
})
|
|
@@ -109,7 +179,7 @@ module Squared
|
|
|
109
179
|
elsif gemspec
|
|
110
180
|
basepath(gemspec.include?('.') ? gemspec : "#{gemspec}.gemspec")
|
|
111
181
|
end
|
|
112
|
-
return
|
|
182
|
+
return unless rakefile && @output[0].nil? && @copy.nil? && !version && !@autodetect
|
|
113
183
|
|
|
114
184
|
begin
|
|
115
185
|
File.foreach(rakefile) do |line|
|
|
@@ -146,16 +216,15 @@ module Squared
|
|
|
146
216
|
format_desc action, nil, "task+,opts*|#{indexchar}index+|#,pattern*"
|
|
147
217
|
task action, [:command] do |_, args|
|
|
148
218
|
if args.command == '#'
|
|
149
|
-
format_list(raketasks, "rake[#{indexchar}N]", 'tasks', grep: args.extras, from: rakefile,
|
|
150
|
-
each: ->(val) { val[0] + val[1].to_s })
|
|
219
|
+
format_list(raketasks, "rake[#{indexchar}N]", 'tasks', grep: args.extras, from: rakefile, &:join)
|
|
151
220
|
else
|
|
152
|
-
|
|
153
|
-
if
|
|
154
|
-
rake(opts: opts)
|
|
221
|
+
items, opts = args.to_a.partition { |val| indexitem(val) }
|
|
222
|
+
if items.empty?
|
|
223
|
+
rake(banner: true, opts: opts)
|
|
155
224
|
else
|
|
156
225
|
tasks = raketasks
|
|
157
|
-
while (n, pre = indexitem(
|
|
158
|
-
if (item = tasks[n
|
|
226
|
+
while (n, pre = indexitem(items.shift))
|
|
227
|
+
if (item = tasks[n.pred])
|
|
159
228
|
cmd = pre ? "#{pre} #{item.first}" : item.first
|
|
160
229
|
elsif exception
|
|
161
230
|
indexerror n, tasks
|
|
@@ -164,9 +233,9 @@ module Squared
|
|
|
164
233
|
next
|
|
165
234
|
end
|
|
166
235
|
if opts.empty?
|
|
167
|
-
rake
|
|
236
|
+
rake(cmd, banner: true)
|
|
168
237
|
else
|
|
169
|
-
rake(cmd +
|
|
238
|
+
rake(cmd + "[#{opts.join(',')}]", banner: true)
|
|
170
239
|
opts.clear
|
|
171
240
|
end
|
|
172
241
|
end
|
|
@@ -176,42 +245,39 @@ module Squared
|
|
|
176
245
|
when 'irb'
|
|
177
246
|
format_desc action, nil, 'opts*,args*|:'
|
|
178
247
|
task action do |_, args|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
else
|
|
184
|
-
format_desc(action, nil, 'opts*', before: case action
|
|
185
|
-
when 'cache', 'check' then nil
|
|
186
|
-
else 'command+'
|
|
187
|
-
end)
|
|
188
|
-
task action do |_, args|
|
|
189
|
-
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)
|
|
190
252
|
end
|
|
191
253
|
end
|
|
192
254
|
else
|
|
193
255
|
namespace action do
|
|
194
256
|
flags.each do |flag|
|
|
195
257
|
case action
|
|
196
|
-
when '
|
|
197
|
-
format_desc action, flag, 'opts*'
|
|
258
|
+
when 'outdated'
|
|
259
|
+
format_desc action, flag, 's/elect?,u/pdate?,opts*'
|
|
198
260
|
task flag do |_, args|
|
|
199
261
|
__send__ action, flag, args.to_a
|
|
200
262
|
end
|
|
201
263
|
when 'gem'
|
|
202
264
|
case flag
|
|
203
265
|
when :outdated
|
|
204
|
-
format_desc action, flag, 'major|minor|patch
|
|
266
|
+
format_desc action, flag, 'semver?=major|minor|patch,i/nteractive?,s/elect?,u/pdate?,opts*'
|
|
205
267
|
task flag, [:semver] do |_, args|
|
|
206
|
-
case (
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
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
|
+
})
|
|
215
281
|
end
|
|
216
282
|
when :build, :push, :exec, :update
|
|
217
283
|
format_desc(action, flag, 'opts*', after: case flag
|
|
@@ -220,13 +286,60 @@ module Squared
|
|
|
220
286
|
when :update then 'name*'
|
|
221
287
|
end)
|
|
222
288
|
task flag do |_, args|
|
|
223
|
-
gem
|
|
289
|
+
gem(flag, opts: args.to_a, banner: true)
|
|
224
290
|
end
|
|
225
|
-
|
|
291
|
+
when :install, :uninstall, :pristine
|
|
226
292
|
format_desc(action, flag, 'opts*', after: flag == :pristine ? 'name*|name?@version' : 'name*')
|
|
227
293
|
task flag do |_, args|
|
|
228
|
-
|
|
229
|
-
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)
|
|
230
343
|
end
|
|
231
344
|
end
|
|
232
345
|
when 'ruby'
|
|
@@ -234,35 +347,34 @@ module Squared
|
|
|
234
347
|
when :file
|
|
235
348
|
format_desc action, flag, 'path,opts*,args*'
|
|
236
349
|
task flag, [:rb] do |_, args|
|
|
237
|
-
file = args.rb
|
|
238
350
|
opts = args.extras
|
|
239
|
-
args = if file && !file.include?('*')
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
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)
|
|
255
367
|
end
|
|
256
368
|
when :script
|
|
257
369
|
format_desc action, flag, 'opts*'
|
|
258
370
|
task flag do |_, args|
|
|
259
|
-
command = ENV['RUBY_E'] || readline('Enter script', force: true, multiline: [
|
|
260
|
-
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)
|
|
261
373
|
end
|
|
262
374
|
when :version
|
|
263
375
|
format_desc action, flag
|
|
264
376
|
task flag do
|
|
265
|
-
ruby flag
|
|
377
|
+
ruby(flag: flag)
|
|
266
378
|
end
|
|
267
379
|
end
|
|
268
380
|
end
|
|
@@ -317,11 +429,9 @@ module Squared
|
|
|
317
429
|
b = dest + val
|
|
318
430
|
c = glob[i] || glob.first
|
|
319
431
|
log.info "cp #{a + c} #{b}"
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
on_error e, :copy
|
|
324
|
-
end
|
|
432
|
+
copy_dir(a, b, c, pass: pass, verbose: verbosetype > 0)
|
|
433
|
+
rescue StandardError => e
|
|
434
|
+
on_error e, :copy
|
|
325
435
|
end
|
|
326
436
|
on :last, :copy
|
|
327
437
|
end
|
|
@@ -329,14 +439,21 @@ module Squared
|
|
|
329
439
|
def outdated(flag = nil, opts = [], sync: invoked_sync?('outdated', flag))
|
|
330
440
|
cmd = bundle_output 'outdated'
|
|
331
441
|
if flag
|
|
442
|
+
se = (opts.delete('s') || opts.delete('select')) && !stdin?
|
|
443
|
+
up = opts.delete('u') || opts.delete('update')
|
|
332
444
|
cmd << "--#{flag}"
|
|
333
|
-
|
|
445
|
+
OptionPartition.new(opts, bundleopts(:outdated), cmd, project: self)
|
|
446
|
+
.clear
|
|
334
447
|
end
|
|
335
448
|
log.info cmd.to_s
|
|
336
449
|
on :first, :outdated
|
|
337
450
|
banner = format_banner cmd.to_s
|
|
338
|
-
|
|
451
|
+
items = if sync
|
|
452
|
+
print_item banner
|
|
453
|
+
[] if flag && (se || up)
|
|
454
|
+
end
|
|
339
455
|
pwd_set(from: :outdated) do
|
|
456
|
+
tc = theme[:current]
|
|
340
457
|
start = 0
|
|
341
458
|
found = 0
|
|
342
459
|
major = 0
|
|
@@ -393,26 +510,26 @@ module Squared
|
|
|
393
510
|
end
|
|
394
511
|
end
|
|
395
512
|
end
|
|
513
|
+
name = line[/^\S+/, 0]
|
|
396
514
|
unless styles.empty?
|
|
397
515
|
case styles.first
|
|
398
516
|
when :green
|
|
399
|
-
line = sub_style(line,
|
|
517
|
+
line = sub_style(line, **opt_style(theme[styles.last == :bold ? :major : :active], /^(\S+)(.+)$/))
|
|
400
518
|
found += 1
|
|
401
519
|
when :yellow
|
|
402
520
|
found += 1
|
|
403
521
|
end
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
line = sub_style(line, *colormap(styles), pat: /^((?:\S+\s+){2})(#{Regexp.escape(l)})(.*)$/,
|
|
408
|
-
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))
|
|
409
525
|
end
|
|
410
526
|
end
|
|
411
|
-
|
|
527
|
+
items&.push([line, name])
|
|
528
|
+
out.call('%2d. %s' % [start, line]) unless se
|
|
412
529
|
elsif line.start_with?('Gem')
|
|
413
530
|
unless stdin?
|
|
414
|
-
sub =
|
|
415
|
-
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))
|
|
416
533
|
end
|
|
417
534
|
else
|
|
418
535
|
next
|
|
@@ -424,6 +541,15 @@ module Squared
|
|
|
424
541
|
puts buffer
|
|
425
542
|
end
|
|
426
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
|
|
427
553
|
begin
|
|
428
554
|
if major == 0 && dependfile.read =~ /\b(?:source\s+(["'])((?~\1))\1|remote:\s+(\S+))/
|
|
429
555
|
status = ($2 || $3).chomp('/')
|
|
@@ -432,50 +558,18 @@ module Squared
|
|
|
432
558
|
rescue StandardError => e
|
|
433
559
|
log.debug e
|
|
434
560
|
ensure
|
|
435
|
-
status ||= 'Updates are available'
|
|
561
|
+
status ||= (items ? 'Updates were made' : 'Updates are available')
|
|
436
562
|
end
|
|
437
563
|
puts print_footer(empty_status(status, 'major', major, always: !right), right: right)
|
|
438
|
-
elsif start == 0
|
|
564
|
+
elsif start == 0 && banner
|
|
439
565
|
puts 'No updates were found'
|
|
440
566
|
end
|
|
441
567
|
end
|
|
442
568
|
on :last, :outdated
|
|
443
569
|
end
|
|
444
570
|
|
|
445
|
-
def
|
|
446
|
-
|
|
447
|
-
op = append_bundle opts, OPT_BUNDLE[:install_base] + OPT_BUNDLE[:install] + OPT_BUNDLE[:common]
|
|
448
|
-
if op.arg?('force')
|
|
449
|
-
op.delete('--force')
|
|
450
|
-
if flag != :redownload
|
|
451
|
-
op << '--redownload'
|
|
452
|
-
elsif (lock = basepath('Gemfile.lock')).exist?
|
|
453
|
-
config = basepath '.bundle', 'config'
|
|
454
|
-
lock.delete unless config.exist? && config.read.match?(/\bBUNDLE_FROZEN:\s+"true"/)
|
|
455
|
-
end
|
|
456
|
-
end
|
|
457
|
-
run_rb(from: :install)
|
|
458
|
-
end
|
|
459
|
-
|
|
460
|
-
def update(flag, opts = [])
|
|
461
|
-
bundle_session 'update', "--#{flag}"
|
|
462
|
-
append_bundle(opts, OPT_BUNDLE[:install_base] + OPT_BUNDLE[:update] + OPT_BUNDLE[:common],
|
|
463
|
-
append: flag == :all ? nil : /\A[a-z-]+=/)
|
|
464
|
-
run_rb(from: :update)
|
|
465
|
-
end
|
|
466
|
-
|
|
467
|
-
def ruby(flag, opts = [], file: nil, command: nil, args: nil)
|
|
468
|
-
case flag
|
|
469
|
-
when :file, :script
|
|
470
|
-
op = OptionPartition.new(opts, OPT_RUBY[:ruby], ruby_session, project: self, args: true)
|
|
471
|
-
if file
|
|
472
|
-
op.unshift(shell_quote(basepath(file)))
|
|
473
|
-
elsif command
|
|
474
|
-
op << quote_option('e', command, option: false)
|
|
475
|
-
end
|
|
476
|
-
op.push(args) if args
|
|
477
|
-
op.append(delim: true, escape: false, quote: false) unless op.empty?
|
|
478
|
-
when :version
|
|
571
|
+
def ruby(*args, flag: nil, sync: true, banner: verbose?, with: nil, pass: PASS_RUBY[:ruby], **kwargs)
|
|
572
|
+
if flag == :version
|
|
479
573
|
pwd_set do
|
|
480
574
|
out = []
|
|
481
575
|
order = { 'rbenv' => -1, 'rvm' => -1, 'asdf' => -1, 'chruby' => -1 }
|
|
@@ -514,19 +608,18 @@ module Squared
|
|
|
514
608
|
c < d ? -1 : 1
|
|
515
609
|
end
|
|
516
610
|
end
|
|
517
|
-
.
|
|
611
|
+
.push('')
|
|
518
612
|
.each do |val|
|
|
519
613
|
next unless val.empty? || File.exist?(val.sub('$HOME', Dir.home))
|
|
520
614
|
|
|
521
|
-
trim = ->(s) { s[
|
|
615
|
+
trim = ->(s) { s[/^\D+\d+\.\d+(?:\.\S+)?/, 0].sub(/^([a-z]+)-/i, '\1 ') }
|
|
522
616
|
ver = '.ruby-version'
|
|
523
617
|
out << trim.call(case (cmd = File.basename(val))
|
|
524
618
|
when 'rvm'
|
|
525
619
|
`rvm current`[/^\S+/, 0]
|
|
526
620
|
when 'rbenv'
|
|
527
|
-
`rbenv version-name
|
|
528
|
-
|
|
529
|
-
end
|
|
621
|
+
name = `rbenv version-name`
|
|
622
|
+
name.match?(SEM_VER) ? "ruby #{name}" : name
|
|
530
623
|
when 'chruby.sh'
|
|
531
624
|
chruby = session_output 'source', val
|
|
532
625
|
`#{chruby.with('ruby --version')}`
|
|
@@ -535,7 +628,7 @@ module Squared
|
|
|
535
628
|
cmd = 'asdf'
|
|
536
629
|
ver = '.tool-versions'
|
|
537
630
|
opt = [@asdf.first]
|
|
538
|
-
opt.unshift('--no-header') unless @@asdf
|
|
631
|
+
opt.unshift('--no-header') unless @@asdf.version == 15
|
|
539
632
|
`asdf current #{opt.join(' ')}`[/^\S+\s+\S+/, 0].sub(/\s+/, ' ')
|
|
540
633
|
else
|
|
541
634
|
ver = nil
|
|
@@ -584,138 +677,199 @@ module Squared
|
|
|
584
677
|
end
|
|
585
678
|
return
|
|
586
679
|
end
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
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
|
|
597
693
|
end
|
|
598
|
-
list = OPT_GEM[flag] + OPT_GEM[:common]
|
|
599
|
-
from = :"gem:#{flag}"
|
|
600
694
|
case flag
|
|
601
|
-
when :
|
|
602
|
-
|
|
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)
|
|
603
702
|
end
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
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
|
|
611
717
|
end
|
|
612
|
-
|
|
718
|
+
opts = session_opts(with, args: args, kwargs: kwargs, pass: pass)
|
|
613
719
|
case flag
|
|
614
|
-
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
|
|
615
728
|
op.clear
|
|
616
|
-
cmd =
|
|
729
|
+
cmd = session_done op.target
|
|
617
730
|
log.info cmd
|
|
618
731
|
on :first, from
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
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 }
|
|
624
751
|
pwd_set(pass: !gempwd.nil?, from: from) do
|
|
625
|
-
|
|
752
|
+
rows = [[%w[Gem Current Latest], nil]]
|
|
626
753
|
IO.popen(cmd).each do |line|
|
|
627
754
|
if line =~ /^(\S+) \((\S+) < ([^)]+)\)$/
|
|
628
755
|
cur = semscan $2
|
|
629
756
|
lat = semscan $3
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
757
|
+
rows << [$~.to_a.drop(1), if semmajor?(cur, lat)
|
|
758
|
+
1
|
|
759
|
+
else
|
|
760
|
+
cur[2] == lat[2] ? 3 : 2
|
|
761
|
+
end]
|
|
635
762
|
else
|
|
636
|
-
|
|
763
|
+
out.call(line)
|
|
637
764
|
end
|
|
638
765
|
end
|
|
639
|
-
if
|
|
640
|
-
pad = [
|
|
766
|
+
if rows.size > 1
|
|
767
|
+
pad = [rows.size.to_s.size.succ, 3].max
|
|
641
768
|
d = 0
|
|
642
769
|
e = 0
|
|
643
770
|
f = 0
|
|
644
771
|
j = 0
|
|
645
772
|
queue = nil
|
|
646
|
-
|
|
647
|
-
a, b, c =
|
|
773
|
+
rows.each do |row|
|
|
774
|
+
a, b, c = row.first
|
|
648
775
|
d = a.size if a.size > d
|
|
649
776
|
e = b.size if b.size > e
|
|
650
777
|
f = c.size if c.size > f
|
|
651
778
|
end
|
|
652
|
-
|
|
779
|
+
rows.each_with_index do |row, i|
|
|
653
780
|
next if i == 0 && stdin?
|
|
654
781
|
|
|
655
|
-
a, b, c =
|
|
782
|
+
a, b, c = row.first
|
|
656
783
|
if i == 0
|
|
657
784
|
line = '%-*s %-*s %*s %*s' % [pad, ' #', d, a, e, b, f, c]
|
|
658
785
|
n = line.size
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
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
|
|
663
794
|
else
|
|
664
795
|
g = a.ljust(d)
|
|
665
796
|
pat = [/^([^.]+\.)([^.]+\..+)$/, /^([^.]+\.[^.]+\.)(.+)$/]
|
|
666
797
|
pre = b.start_with?('0.')
|
|
667
798
|
latest = [theme[:latest]]
|
|
668
|
-
case
|
|
799
|
+
case row.last
|
|
669
800
|
when 1
|
|
670
|
-
case
|
|
801
|
+
case semver
|
|
671
802
|
when 'major'
|
|
672
|
-
update
|
|
803
|
+
update&.push(a)
|
|
673
804
|
when 'minor', 'patch'
|
|
674
805
|
next
|
|
675
806
|
end
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
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
|
|
681
814
|
when 2
|
|
682
|
-
case
|
|
815
|
+
case semver
|
|
683
816
|
when 'major', 'minor'
|
|
684
|
-
update
|
|
817
|
+
update&.push(a)
|
|
685
818
|
when 'patch'
|
|
686
819
|
next
|
|
687
820
|
end
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
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
|
|
692
827
|
else
|
|
693
|
-
case
|
|
828
|
+
case semver
|
|
694
829
|
when 'major', 'minor', 'patch'
|
|
695
|
-
update
|
|
830
|
+
update&.push(a)
|
|
696
831
|
end
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
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))
|
|
700
843
|
end
|
|
701
|
-
b = sub_style(b.rjust(e), *colormap(styles), pat: pat, index: 2)
|
|
702
|
-
h = sub_style(c.rjust(f), styles: latest.flatten.compact, pat: pat, index: 2)
|
|
703
844
|
j += 1
|
|
704
845
|
if queue
|
|
705
|
-
|
|
846
|
+
out.call(queue)
|
|
706
847
|
queue = nil
|
|
707
848
|
end
|
|
708
|
-
|
|
709
|
-
|
|
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)
|
|
710
856
|
end
|
|
711
857
|
end
|
|
712
858
|
end
|
|
713
859
|
end
|
|
714
|
-
|
|
860
|
+
unless sync
|
|
861
|
+
print_item banner
|
|
862
|
+
puts buffer
|
|
863
|
+
end
|
|
864
|
+
if major.sum == 0
|
|
715
865
|
puts 'No updates were found'
|
|
716
866
|
else
|
|
717
|
-
|
|
718
|
-
|
|
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'
|
|
719
873
|
option('document', prefix: 'gem', ignore: false) do |val|
|
|
720
874
|
cmd << case val
|
|
721
875
|
when '0', 'false'
|
|
@@ -733,18 +887,40 @@ module Squared
|
|
|
733
887
|
end
|
|
734
888
|
end
|
|
735
889
|
cmd.merge(update)
|
|
736
|
-
run(cmd, banner: false, from: :'gem:update')
|
|
890
|
+
run(cmd, sync: sync, banner: false, from: :'gem:update')
|
|
737
891
|
end
|
|
738
|
-
print_status(major,
|
|
892
|
+
print_status(*major, from: :outdated)
|
|
739
893
|
end
|
|
740
894
|
on :last, from
|
|
741
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
|
|
742
918
|
when :build
|
|
743
919
|
if op.empty?
|
|
744
|
-
raise_error
|
|
920
|
+
raise_error Errno::ENOENT, 'gemspec', hint: project unless gemfile
|
|
745
921
|
op.add_path(gemfile)
|
|
746
922
|
else
|
|
747
|
-
op.
|
|
923
|
+
op.add_first(path: true)
|
|
748
924
|
.clear(pass: false)
|
|
749
925
|
end
|
|
750
926
|
when :push
|
|
@@ -755,38 +931,48 @@ module Squared
|
|
|
755
931
|
choice_index('Select a file', Dir.glob('*.gem', base: path), force: true)
|
|
756
932
|
end)
|
|
757
933
|
else
|
|
758
|
-
file = op.shift.yield_self { |val| val.include?('.') ? val : "#{val}.gem" }
|
|
759
|
-
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?
|
|
760
937
|
end
|
|
761
|
-
raise_error('gem not found', hint: file) unless op.exist?(file)
|
|
762
938
|
op.add_path(file)
|
|
763
|
-
run_rb(from: from, interactive:
|
|
764
|
-
return
|
|
939
|
+
return run_rb(from: from, interactive: ['Push', 'N', gemname]) unless with || !banner
|
|
765
940
|
when :exec
|
|
766
941
|
min = if op.arg?('g', 'gem')
|
|
767
942
|
1
|
|
768
|
-
elsif op.empty?
|
|
943
|
+
elsif !op.empty?
|
|
944
|
+
op.add_first
|
|
945
|
+
0
|
|
946
|
+
elsif args.empty?
|
|
769
947
|
op << basic_option('gem', gemname)
|
|
770
948
|
1
|
|
771
949
|
else
|
|
772
|
-
op << op.shift
|
|
773
950
|
0
|
|
774
951
|
end
|
|
952
|
+
op.concat(args)
|
|
775
953
|
if (args = command_args(op.extras, min: min, force: min == 1 && op.empty?))
|
|
776
954
|
op.push(args)
|
|
777
955
|
end
|
|
778
956
|
op.append(quote: false)
|
|
779
957
|
when :update
|
|
780
|
-
|
|
781
|
-
if
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
op.append
|
|
785
|
-
end
|
|
958
|
+
if op.arg?('system')
|
|
959
|
+
op.add_first(quote: false) { |val| val if val.match?(SEM_VER) }
|
|
960
|
+
else
|
|
961
|
+
op.append
|
|
786
962
|
end
|
|
787
|
-
op.clear(errors: true)
|
|
788
963
|
when :install, :uninstall, :pristine
|
|
789
|
-
|
|
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?
|
|
790
976
|
if op.arg?('all')
|
|
791
977
|
if flag == :pristine
|
|
792
978
|
append_repeat 'skip', op.extras
|
|
@@ -795,84 +981,190 @@ module Squared
|
|
|
795
981
|
op.clear
|
|
796
982
|
end
|
|
797
983
|
elsif (n = op.index { |val| val.match?(/(\A|[a-z])@\d/) })
|
|
798
|
-
name = op.
|
|
984
|
+
name = op.remove_at(n)
|
|
799
985
|
pre, ver = if (n = name.index('@')) == 0
|
|
800
986
|
[gemname, name[1..-1]]
|
|
801
987
|
else
|
|
802
|
-
[name[0, n], name[
|
|
988
|
+
[name[0, n], name[n.succ..-1]]
|
|
803
989
|
end
|
|
804
990
|
op.adjoin(pre, shell_option('version', ver))
|
|
805
991
|
.clear
|
|
806
|
-
|
|
992
|
+
end
|
|
993
|
+
if flag == :install
|
|
807
994
|
op.append_any
|
|
808
995
|
else
|
|
809
996
|
op.append
|
|
810
997
|
end
|
|
811
|
-
op
|
|
812
|
-
|
|
813
|
-
else
|
|
998
|
+
op << '--' << post if post
|
|
999
|
+
when :check, :cleanup, :contents, :fetch, :list, :lock, :rdoc
|
|
814
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
|
|
815
1033
|
end
|
|
816
|
-
|
|
1034
|
+
op.clear(errors: true) if gems
|
|
1035
|
+
print_run(op, banner, **kwargs)
|
|
1036
|
+
run_rb(sync: sync, banner: banner, from: from)
|
|
817
1037
|
end
|
|
818
1038
|
|
|
819
|
-
def bundle(flag, *args)
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
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)
|
|
828
1050
|
case flag
|
|
829
|
-
when
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
option_clear args
|
|
833
|
-
args.clear
|
|
1051
|
+
when :cache, :check, :clean, :doctor, :init, :install, :lock, :pack, :package, :platform
|
|
1052
|
+
pre = true
|
|
1053
|
+
opts.concat(args)
|
|
834
1054
|
end
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
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
|
|
845
1133
|
else
|
|
846
|
-
|
|
1134
|
+
op.clear
|
|
847
1135
|
end
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
1136
|
+
print_run(op, banner, **kwargs)
|
|
1137
|
+
run(sync: sync, banner: banner, from: :"bundle:#{flag}").tap { |ret| success?(ret, banner, output) }
|
|
1138
|
+
end
|
|
1139
|
+
|
|
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)
|
|
851
1148
|
end
|
|
852
1149
|
|
|
853
|
-
def irb(
|
|
1150
|
+
def irb(*args, banner: verbose?, with: nil, pass: PASS_RUBY[:irb], **kwargs)
|
|
1151
|
+
opts = session_opts(with, args: args, kwargs: kwargs, pass: pass)
|
|
854
1152
|
op = OptionPartition.new(opts, OPT_RUBY[:irb], session('irb'), project: self, first: [/\.rb$/])
|
|
855
|
-
r =
|
|
856
|
-
r <<
|
|
857
|
-
r
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
end
|
|
865
|
-
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)
|
|
866
1162
|
end
|
|
867
1163
|
|
|
868
1164
|
def gemspec
|
|
869
|
-
return @gemspec unless @gemspec.nil?
|
|
1165
|
+
return @gemspec || nil unless @gemspec.nil?
|
|
870
1166
|
|
|
871
|
-
@gemspec =
|
|
872
|
-
Gem::Specification.load(gemfile.to_s) rescue false
|
|
873
|
-
else
|
|
874
|
-
false
|
|
875
|
-
end
|
|
1167
|
+
@gemspec = gemfile && Gem::Specification.load(gemfile.to_s) rescue false
|
|
876
1168
|
end
|
|
877
1169
|
|
|
878
1170
|
def gemname
|
|
@@ -891,21 +1183,20 @@ module Squared
|
|
|
891
1183
|
begin
|
|
892
1184
|
case @autodetect
|
|
893
1185
|
when 'rvm'
|
|
894
|
-
|
|
1186
|
+
pwd_set { `rvm info homes` }[/^\s+gem:\s+"(.+)"$/, 1]
|
|
895
1187
|
when 'rbenv'
|
|
896
1188
|
if pwd_set { `rbenv which ruby` } =~ %r{^(.+[\\/]versions[\\/](\d\.\d)\.[^\\/]+)[\\/]bin[\\/]ruby$}
|
|
897
|
-
|
|
1189
|
+
File.join($1, 'lib/ruby/gems', "#{$2}.0")
|
|
898
1190
|
end
|
|
899
1191
|
when 'asdf'
|
|
900
|
-
|
|
901
|
-
|
|
1192
|
+
pwd_set { `asdf where ruby` }.yield_self do |val|
|
|
1193
|
+
val =~ /(\d\.\d)\.[^.]+$/ && File.join(val, 'lib/ruby/gems', "#{$1}.0")
|
|
1194
|
+
end
|
|
902
1195
|
when /bundler?/
|
|
903
|
-
|
|
904
|
-
end
|
|
1196
|
+
pwd_set { `bundle env` }[/^\s+Gem Home\s+(.+)$/, 1]
|
|
1197
|
+
end.tap { |val| @gemdir = Pathname.new(val) if val }
|
|
905
1198
|
rescue StandardError => e
|
|
906
1199
|
log.debug e
|
|
907
|
-
else
|
|
908
|
-
@gemdir = Pathname.new(@gemdir) if @gemdir
|
|
909
1200
|
end
|
|
910
1201
|
return true if gemdir?
|
|
911
1202
|
end
|
|
@@ -913,7 +1204,7 @@ module Squared
|
|
|
913
1204
|
|
|
914
1205
|
set = lambda do |val, path|
|
|
915
1206
|
if (ver = version) && ver != val
|
|
916
|
-
log.warn "using version #{val}
|
|
1207
|
+
log.warn "using version #{val}".subhint("given #{ver}")
|
|
917
1208
|
end
|
|
918
1209
|
self.version = val
|
|
919
1210
|
@gemdir = Pathname.new(path.strip) + gempath
|
|
@@ -922,17 +1213,17 @@ module Squared
|
|
|
922
1213
|
opt = gempwd
|
|
923
1214
|
pwd_set(pass: !opt.nil?) do
|
|
924
1215
|
out = `#{gem_output(opt, 'list --local -d', gemname)}`
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
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
|
|
936
1227
|
end
|
|
937
1228
|
@gemdir = Pathname.new(Gem.dir) + gempath
|
|
938
1229
|
else
|
|
@@ -948,8 +1239,8 @@ module Squared
|
|
|
948
1239
|
target = RUBY_VERSION.start_with?('2.6') ? RubyVM : $LOAD_PATH
|
|
949
1240
|
parse.call(target.resolve_feature_path(gemname)&.last)
|
|
950
1241
|
end
|
|
951
|
-
|
|
952
|
-
raise_error 'gems
|
|
1242
|
+
unless @gemdir || pwd_set { parse.call(`#{bundle_output('show', gemname)}`) }
|
|
1243
|
+
raise_error Errno::ENOENT, 'gems home'
|
|
953
1244
|
end
|
|
954
1245
|
end
|
|
955
1246
|
rescue StandardError => e
|
|
@@ -971,36 +1262,23 @@ module Squared
|
|
|
971
1262
|
run(banner: !@session&.include?('--quiet'), **kwargs)
|
|
972
1263
|
end
|
|
973
1264
|
|
|
974
|
-
def append_bundle(opts, list, target: @session, append: nil)
|
|
975
|
-
op = OptionPartition.new(opts, list, target, project: self)
|
|
976
|
-
if append
|
|
977
|
-
if append.is_a?(Regexp)
|
|
978
|
-
op.each do |opt|
|
|
979
|
-
if opt.match?(append)
|
|
980
|
-
op.errors << opt
|
|
981
|
-
else
|
|
982
|
-
op.found << opt
|
|
983
|
-
end
|
|
984
|
-
end
|
|
985
|
-
op.swap.clear(errors: true)
|
|
986
|
-
end
|
|
987
|
-
op.append(escape: true)
|
|
988
|
-
else
|
|
989
|
-
op.clear
|
|
990
|
-
end
|
|
991
|
-
op
|
|
992
|
-
end
|
|
993
|
-
|
|
994
1265
|
def ruby_session(*cmd, **kwargs)
|
|
995
1266
|
session('ruby', *preopts, *cmd, **kwargs)
|
|
996
1267
|
end
|
|
997
1268
|
|
|
998
1269
|
def gem_session(*cmd, **kwargs)
|
|
999
|
-
session('gem', *cmd,
|
|
1270
|
+
ret = session('gem', *cmd, **kwargs)
|
|
1271
|
+
return ret if cmd.empty?
|
|
1272
|
+
|
|
1273
|
+
ret.merge(preopts)
|
|
1000
1274
|
end
|
|
1001
1275
|
|
|
1002
1276
|
def bundle_session(*cmd, **kwargs)
|
|
1003
|
-
session('bundle', *cmd,
|
|
1277
|
+
ret = session('bundle', *cmd, **kwargs)
|
|
1278
|
+
return ret if cmd.empty?
|
|
1279
|
+
|
|
1280
|
+
append_nocolor
|
|
1281
|
+
ret.merge(preopts)
|
|
1004
1282
|
end
|
|
1005
1283
|
|
|
1006
1284
|
def rake_session(*cmd, **kwargs)
|
|
@@ -1046,7 +1324,7 @@ module Squared
|
|
|
1046
1324
|
end
|
|
1047
1325
|
|
|
1048
1326
|
def preopts
|
|
1049
|
-
|
|
1327
|
+
verbose? && !session_arg?('quiet') ? ['--verbose'] : []
|
|
1050
1328
|
end
|
|
1051
1329
|
|
|
1052
1330
|
def variables
|
|
@@ -1054,11 +1332,10 @@ module Squared
|
|
|
1054
1332
|
end
|
|
1055
1333
|
|
|
1056
1334
|
def rakefile
|
|
1057
|
-
return @rakefile unless @rakefile.nil?
|
|
1335
|
+
return @rakefile || nil unless @rakefile.nil?
|
|
1058
1336
|
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
end
|
|
1337
|
+
file = Rake::Application::DEFAULT_RAKEFILES.find { |val| exist?(val) }
|
|
1338
|
+
@rakefile = file ? basepath(file) : false
|
|
1062
1339
|
end
|
|
1063
1340
|
|
|
1064
1341
|
def rakepwd
|
|
@@ -1080,6 +1357,38 @@ module Squared
|
|
|
1080
1357
|
end
|
|
1081
1358
|
end
|
|
1082
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
|
+
|
|
1083
1392
|
def gempwd
|
|
1084
1393
|
return unless !pwd? && semgte?(Gem::VERSION, '3.4.2')
|
|
1085
1394
|
|
|
@@ -1087,7 +1396,7 @@ module Squared
|
|
|
1087
1396
|
end
|
|
1088
1397
|
|
|
1089
1398
|
def gemfile
|
|
1090
|
-
return @gemfile unless @gemfile.nil?
|
|
1399
|
+
return @gemfile || nil unless @gemfile.nil?
|
|
1091
1400
|
|
|
1092
1401
|
@gemfile = [project, name].map! { |val| basepath("#{val}.gemspec") }
|
|
1093
1402
|
.concat(path.glob('*.gemspec'))
|
|
@@ -1095,11 +1404,12 @@ module Squared
|
|
|
1095
1404
|
end
|
|
1096
1405
|
|
|
1097
1406
|
def gemlib
|
|
1098
|
-
@gemlib ||=
|
|
1407
|
+
@gemlib ||= begin
|
|
1408
|
+
lib = Set.new(['lib'])
|
|
1099
1409
|
if (spec = gemspec)
|
|
1100
1410
|
lib.merge(spec.require_paths || [])
|
|
1101
1411
|
end
|
|
1102
|
-
lib.select { |file|
|
|
1412
|
+
lib.select { |file| exist?(file) }
|
|
1103
1413
|
end
|
|
1104
1414
|
end
|
|
1105
1415
|
|
|
@@ -1108,9 +1418,7 @@ module Squared
|
|
|
1108
1418
|
end
|
|
1109
1419
|
|
|
1110
1420
|
def gemdir?
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
@gemdir.exist? && !@gemdir.empty?
|
|
1421
|
+
!@gemdir.nil? && @gemdir.exist? && !@gemdir.empty?
|
|
1114
1422
|
end
|
|
1115
1423
|
end
|
|
1116
1424
|
|