autoproj 2.0.0.rc15 → 2.0.0.rc16
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/autoproj_bootstrap +63 -15
- data/bin/autoproj_install +63 -15
- data/lib/autoproj/cli/main.rb +0 -18
- data/lib/autoproj/cli/osdeps.rb +4 -0
- data/lib/autoproj/configuration.rb +19 -4
- data/lib/autoproj/find_workspace.rb +3 -1
- data/lib/autoproj/ops/install.rb +63 -15
- data/lib/autoproj/package_managers/bundler_manager.rb +85 -21
- data/lib/autoproj/version.rb +1 -1
- data/lib/autoproj/workspace.rb +2 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2e8448a1e71d7b3bf6c58254c59380c93e01dae2
|
4
|
+
data.tar.gz: 16bc5d6983bea3fc3a7a40b50ef572cfdb0b25db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2008f60c6e37b71ac9ac35219f7754e7b1396bcbf324b4b890f8c06dd242a7665fff0c257478bfff6c2d8d7aeaf7e0817cb631b0194779b6c1b8f830dabc59b1
|
7
|
+
data.tar.gz: 9b09e7e1a8a9631f452951077ffd249ab2fecf5c701b0b9d014dd26b1a98a4bde52411366944e2bb32bee9faae42294a72b8a47875a4efdde616ab487582660c
|
data/bin/autoproj_bootstrap
CHANGED
@@ -34,6 +34,8 @@ module Autoproj
|
|
34
34
|
# A set of options that should be passed to autoproj when calling it
|
35
35
|
# in a subprocess
|
36
36
|
attr_reader :autoproj_options
|
37
|
+
# The Ruby interpreter we use for this install
|
38
|
+
attr_reader :ruby_executable
|
37
39
|
|
38
40
|
def initialize(root_dir)
|
39
41
|
@root_dir = root_dir
|
@@ -54,15 +56,16 @@ module Autoproj
|
|
54
56
|
|
55
57
|
load_config
|
56
58
|
if config['ruby_executable'] != Gem.ruby
|
57
|
-
raise "this autoproj installation was already bootstrapped using #{config['ruby_executable']}, but you are currently running under #{Gem.ruby}. Changing the ruby interpreter in a given workspace is not supported"
|
59
|
+
raise "this autoproj installation was already bootstrapped using #{config['ruby_executable']}, but you are currently running under #{Gem.ruby}. Changing the ruby interpreter in a given workspace is not supported, you need to do a clean bootstrap"
|
58
60
|
end
|
59
|
-
|
61
|
+
@ruby_executable = config['ruby_executable']
|
60
62
|
@local = false
|
61
63
|
end
|
62
64
|
|
63
65
|
def env_for_child
|
64
|
-
|
65
|
-
h[k] =
|
66
|
+
env.inject(Hash.new) do |h, (k, v)|
|
67
|
+
h[k] = if v && !v.empty? then v.join(File::PATH_SEPARATOR)
|
68
|
+
end
|
66
69
|
h
|
67
70
|
end
|
68
71
|
end
|
@@ -101,6 +104,8 @@ module Autoproj
|
|
101
104
|
def autoproj_gemfile_path; File.join(autoproj_install_dir, 'Gemfile') end
|
102
105
|
def autoproj_config_path; File.join(dot_autoproj, 'config.yml') end
|
103
106
|
|
107
|
+
def shim_path; File.join(dot_autoproj, 'bin') end
|
108
|
+
|
104
109
|
# Whether we can access the network while installing
|
105
110
|
def local?; !!@local end
|
106
111
|
# (see #local?)
|
@@ -161,7 +166,7 @@ module Autoproj
|
|
161
166
|
|
162
167
|
candidates = ['gem']
|
163
168
|
if ruby_bin =~ /^ruby(.+)$/
|
164
|
-
candidates
|
169
|
+
candidates.unshift "gem#{$1}"
|
165
170
|
end
|
166
171
|
|
167
172
|
candidates.each do |gem_name|
|
@@ -185,10 +190,20 @@ module Autoproj
|
|
185
190
|
|
186
191
|
# Parse the provided command line options and returns the non-options
|
187
192
|
def parse_options(args = ARGV)
|
193
|
+
default_gem_path = File.join(Dir.home, '.autoproj', 'gems')
|
194
|
+
self.private_bundler = default_gem_path
|
195
|
+
self.private_gems = default_gem_path
|
196
|
+
self.private_autoproj = default_gem_path
|
197
|
+
|
188
198
|
options = OptionParser.new do |opt|
|
189
199
|
opt.on '--local', 'do not access the network (may fail)' do
|
190
200
|
@local = true
|
191
201
|
end
|
202
|
+
opt.on '--public', "install gems in the default RubyGems locations. Consider using this if you don't have a v1 install anymore" do
|
203
|
+
self.private_bundler = false
|
204
|
+
self.private_autoproj = false
|
205
|
+
self.private_gems = false
|
206
|
+
end
|
192
207
|
opt.on '--private-bundler[=PATH]', 'install bundler locally in the workspace' do |path|
|
193
208
|
self.private_bundler = path || true
|
194
209
|
end
|
@@ -198,7 +213,7 @@ module Autoproj
|
|
198
213
|
opt.on '--private-gems[=PATH]', 'install gems locally in the prefix directory' do |path|
|
199
214
|
self.private_gems = path || true
|
200
215
|
end
|
201
|
-
opt.on '--private[=PATH]',
|
216
|
+
opt.on '--private[=PATH]', "whether bundler, autoproj and the workspace gems should be installed locally in the workspace. This is the default, with a path of #{default_gem_path}" do |path|
|
202
217
|
self.private_bundler = path || true
|
203
218
|
self.private_autoproj = path || true
|
204
219
|
self.private_gems = path || true
|
@@ -235,15 +250,16 @@ module Autoproj
|
|
235
250
|
|
236
251
|
result = system(
|
237
252
|
env_for_child.merge('GEM_PATH' => "", 'GEM_HOME' => bundler_gem_home),
|
238
|
-
gem_program, 'install', '--no-document', '--no-format-executable',
|
253
|
+
Gem.ruby, gem_program, 'install', '--no-document', '--no-format-executable',
|
239
254
|
*local,
|
240
255
|
"--bindir=#{File.join(bundler_gem_home, 'bin')}", 'bundler')
|
241
256
|
|
242
|
-
if
|
257
|
+
if result
|
258
|
+
File.join(bundler_gem_home, 'bin', 'bundler')
|
259
|
+
else
|
243
260
|
STDERR.puts "FATAL: failed to install bundler in #{dot_autoproj}"
|
244
|
-
|
261
|
+
nil
|
245
262
|
end
|
246
|
-
File.join(bundler_gem_home, 'bin', 'bundler')
|
247
263
|
end
|
248
264
|
|
249
265
|
def find_bundler
|
@@ -259,11 +275,11 @@ module Autoproj
|
|
259
275
|
if !bundler
|
260
276
|
if ENV['PATH'] != clean_path
|
261
277
|
STDERR.puts " it appears that you already have some autoproj-generated env.sh loaded"
|
262
|
-
STDERR.puts " - if you are
|
263
|
-
STDERR.puts " - if you are running
|
278
|
+
STDERR.puts " - if you are upgrading a v1 install, please contact the autoproj author at https://github.com/rock-core/autoproj/issues/new"
|
279
|
+
STDERR.puts " - if you are running a fresh install, try again in a console where the env.sh is not loaded"
|
264
280
|
exit 1
|
265
281
|
else
|
266
|
-
STDERR.puts "
|
282
|
+
STDERR.puts " you might want to try and install it manually first by running 'gem install bundler'"
|
267
283
|
STDERR.puts " or call this command again with --private-bundler to have it installed in the workspace"
|
268
284
|
exit 1
|
269
285
|
end
|
@@ -292,7 +308,7 @@ module Autoproj
|
|
292
308
|
if private_autoproj?
|
293
309
|
clean_env['GEM_PATH'] = bundler_gem_home
|
294
310
|
clean_env['GEM_HOME'] = nil
|
295
|
-
opts << "--
|
311
|
+
opts << "--path=#{autoproj_gem_home}"
|
296
312
|
end
|
297
313
|
binstubs_path = File.join(autoproj_install_dir, 'bin')
|
298
314
|
result = system(clean_env.merge('GEM_HOME' => autoproj_gem_home),
|
@@ -311,7 +327,7 @@ module Autoproj
|
|
311
327
|
end
|
312
328
|
|
313
329
|
def self.clean_binstubs(binstubs_path)
|
314
|
-
%w{bundler bundle}.each do |bundler_bin|
|
330
|
+
%w{bundler bundle rake thor}.each do |bundler_bin|
|
315
331
|
path = File.join(binstubs_path, bundler_bin)
|
316
332
|
if File.file?(path)
|
317
333
|
FileUtils.rm path
|
@@ -409,6 +425,20 @@ module Autoproj
|
|
409
425
|
end
|
410
426
|
end
|
411
427
|
|
428
|
+
def save_ruby_and_bundler_shims(bundler_path)
|
429
|
+
FileUtils.mkdir_p shim_path
|
430
|
+
File.open(File.join(shim_path, 'bundler'), 'w') do |io|
|
431
|
+
io.puts "#! /bin/sh"
|
432
|
+
io.puts "exec #{ruby_executable} #{bundler_path} \"$@\""
|
433
|
+
end
|
434
|
+
FileUtils.chmod 0755, File.join(shim_path, 'bundler')
|
435
|
+
File.open(File.join(shim_path, 'ruby'), 'w') do |io|
|
436
|
+
io.puts "#! /bin/sh"
|
437
|
+
io.puts "exec #{ruby_executable} \"$@\""
|
438
|
+
end
|
439
|
+
FileUtils.chmod 0755, File.join(shim_path, 'ruby')
|
440
|
+
end
|
441
|
+
|
412
442
|
def install
|
413
443
|
if private_bundler?
|
414
444
|
puts "Installing bundler in #{bundler_gem_home}"
|
@@ -420,6 +450,8 @@ module Autoproj
|
|
420
450
|
else
|
421
451
|
exit 1
|
422
452
|
end
|
453
|
+
save_ruby_and_bundler_shims(bundler)
|
454
|
+
env['PATH'].unshift shim_path
|
423
455
|
save_gemfile
|
424
456
|
puts "Installing autoproj in #{dot_autoproj}"
|
425
457
|
install_autoproj(bundler)
|
@@ -470,10 +502,21 @@ module Autoproj
|
|
470
502
|
Gem.ruby, autoproj_path, *args, *autoproj_options
|
471
503
|
end
|
472
504
|
|
505
|
+
def v1_workspace?
|
506
|
+
File.file?(File.join(root_dir, 'autoproj', 'config.yml')) &&
|
507
|
+
!File.directory?(File.join(root_dir, '.autoproj'))
|
508
|
+
end
|
509
|
+
|
473
510
|
def stage1
|
511
|
+
if v1_workspace? && File.file?(v1_envsh = File.join(root_dir, 'env.sh'))
|
512
|
+
FileUtils.cp v1_envsh, 'env.sh-autoproj-v1'
|
513
|
+
end
|
474
514
|
FileUtils.mkdir_p dot_autoproj
|
475
515
|
save_config
|
476
516
|
install
|
517
|
+
rescue Exception
|
518
|
+
FileUtils.rm_rf dot_autoproj
|
519
|
+
raise
|
477
520
|
end
|
478
521
|
|
479
522
|
def call_stage2
|
@@ -492,6 +535,11 @@ module Autoproj
|
|
492
535
|
if !system(Gem.ruby, autoproj_path, 'envsh', *autoproj_options)
|
493
536
|
exit 1
|
494
537
|
end
|
538
|
+
# This is really needed on an existing install to install the
|
539
|
+
# gems that were present in the v1 layout
|
540
|
+
if !system(Gem.ruby, autoproj_path, 'osdeps')
|
541
|
+
exit 1
|
542
|
+
end
|
495
543
|
end
|
496
544
|
end
|
497
545
|
end
|
data/bin/autoproj_install
CHANGED
@@ -34,6 +34,8 @@ module Autoproj
|
|
34
34
|
# A set of options that should be passed to autoproj when calling it
|
35
35
|
# in a subprocess
|
36
36
|
attr_reader :autoproj_options
|
37
|
+
# The Ruby interpreter we use for this install
|
38
|
+
attr_reader :ruby_executable
|
37
39
|
|
38
40
|
def initialize(root_dir)
|
39
41
|
@root_dir = root_dir
|
@@ -54,15 +56,16 @@ module Autoproj
|
|
54
56
|
|
55
57
|
load_config
|
56
58
|
if config['ruby_executable'] != Gem.ruby
|
57
|
-
raise "this autoproj installation was already bootstrapped using #{config['ruby_executable']}, but you are currently running under #{Gem.ruby}. Changing the ruby interpreter in a given workspace is not supported"
|
59
|
+
raise "this autoproj installation was already bootstrapped using #{config['ruby_executable']}, but you are currently running under #{Gem.ruby}. Changing the ruby interpreter in a given workspace is not supported, you need to do a clean bootstrap"
|
58
60
|
end
|
59
|
-
|
61
|
+
@ruby_executable = config['ruby_executable']
|
60
62
|
@local = false
|
61
63
|
end
|
62
64
|
|
63
65
|
def env_for_child
|
64
|
-
|
65
|
-
h[k] =
|
66
|
+
env.inject(Hash.new) do |h, (k, v)|
|
67
|
+
h[k] = if v && !v.empty? then v.join(File::PATH_SEPARATOR)
|
68
|
+
end
|
66
69
|
h
|
67
70
|
end
|
68
71
|
end
|
@@ -101,6 +104,8 @@ module Autoproj
|
|
101
104
|
def autoproj_gemfile_path; File.join(autoproj_install_dir, 'Gemfile') end
|
102
105
|
def autoproj_config_path; File.join(dot_autoproj, 'config.yml') end
|
103
106
|
|
107
|
+
def shim_path; File.join(dot_autoproj, 'bin') end
|
108
|
+
|
104
109
|
# Whether we can access the network while installing
|
105
110
|
def local?; !!@local end
|
106
111
|
# (see #local?)
|
@@ -161,7 +166,7 @@ module Autoproj
|
|
161
166
|
|
162
167
|
candidates = ['gem']
|
163
168
|
if ruby_bin =~ /^ruby(.+)$/
|
164
|
-
candidates
|
169
|
+
candidates.unshift "gem#{$1}"
|
165
170
|
end
|
166
171
|
|
167
172
|
candidates.each do |gem_name|
|
@@ -185,10 +190,20 @@ module Autoproj
|
|
185
190
|
|
186
191
|
# Parse the provided command line options and returns the non-options
|
187
192
|
def parse_options(args = ARGV)
|
193
|
+
default_gem_path = File.join(Dir.home, '.autoproj', 'gems')
|
194
|
+
self.private_bundler = default_gem_path
|
195
|
+
self.private_gems = default_gem_path
|
196
|
+
self.private_autoproj = default_gem_path
|
197
|
+
|
188
198
|
options = OptionParser.new do |opt|
|
189
199
|
opt.on '--local', 'do not access the network (may fail)' do
|
190
200
|
@local = true
|
191
201
|
end
|
202
|
+
opt.on '--public', "install gems in the default RubyGems locations. Consider using this if you don't have a v1 install anymore" do
|
203
|
+
self.private_bundler = false
|
204
|
+
self.private_autoproj = false
|
205
|
+
self.private_gems = false
|
206
|
+
end
|
192
207
|
opt.on '--private-bundler[=PATH]', 'install bundler locally in the workspace' do |path|
|
193
208
|
self.private_bundler = path || true
|
194
209
|
end
|
@@ -198,7 +213,7 @@ module Autoproj
|
|
198
213
|
opt.on '--private-gems[=PATH]', 'install gems locally in the prefix directory' do |path|
|
199
214
|
self.private_gems = path || true
|
200
215
|
end
|
201
|
-
opt.on '--private[=PATH]',
|
216
|
+
opt.on '--private[=PATH]', "whether bundler, autoproj and the workspace gems should be installed locally in the workspace. This is the default, with a path of #{default_gem_path}" do |path|
|
202
217
|
self.private_bundler = path || true
|
203
218
|
self.private_autoproj = path || true
|
204
219
|
self.private_gems = path || true
|
@@ -235,15 +250,16 @@ module Autoproj
|
|
235
250
|
|
236
251
|
result = system(
|
237
252
|
env_for_child.merge('GEM_PATH' => "", 'GEM_HOME' => bundler_gem_home),
|
238
|
-
gem_program, 'install', '--no-document', '--no-format-executable',
|
253
|
+
Gem.ruby, gem_program, 'install', '--no-document', '--no-format-executable',
|
239
254
|
*local,
|
240
255
|
"--bindir=#{File.join(bundler_gem_home, 'bin')}", 'bundler')
|
241
256
|
|
242
|
-
if
|
257
|
+
if result
|
258
|
+
File.join(bundler_gem_home, 'bin', 'bundler')
|
259
|
+
else
|
243
260
|
STDERR.puts "FATAL: failed to install bundler in #{dot_autoproj}"
|
244
|
-
|
261
|
+
nil
|
245
262
|
end
|
246
|
-
File.join(bundler_gem_home, 'bin', 'bundler')
|
247
263
|
end
|
248
264
|
|
249
265
|
def find_bundler
|
@@ -259,11 +275,11 @@ module Autoproj
|
|
259
275
|
if !bundler
|
260
276
|
if ENV['PATH'] != clean_path
|
261
277
|
STDERR.puts " it appears that you already have some autoproj-generated env.sh loaded"
|
262
|
-
STDERR.puts " - if you are
|
263
|
-
STDERR.puts " - if you are running
|
278
|
+
STDERR.puts " - if you are upgrading a v1 install, please contact the autoproj author at https://github.com/rock-core/autoproj/issues/new"
|
279
|
+
STDERR.puts " - if you are running a fresh install, try again in a console where the env.sh is not loaded"
|
264
280
|
exit 1
|
265
281
|
else
|
266
|
-
STDERR.puts "
|
282
|
+
STDERR.puts " you might want to try and install it manually first by running 'gem install bundler'"
|
267
283
|
STDERR.puts " or call this command again with --private-bundler to have it installed in the workspace"
|
268
284
|
exit 1
|
269
285
|
end
|
@@ -292,7 +308,7 @@ module Autoproj
|
|
292
308
|
if private_autoproj?
|
293
309
|
clean_env['GEM_PATH'] = bundler_gem_home
|
294
310
|
clean_env['GEM_HOME'] = nil
|
295
|
-
opts << "--
|
311
|
+
opts << "--path=#{autoproj_gem_home}"
|
296
312
|
end
|
297
313
|
binstubs_path = File.join(autoproj_install_dir, 'bin')
|
298
314
|
result = system(clean_env.merge('GEM_HOME' => autoproj_gem_home),
|
@@ -311,7 +327,7 @@ module Autoproj
|
|
311
327
|
end
|
312
328
|
|
313
329
|
def self.clean_binstubs(binstubs_path)
|
314
|
-
%w{bundler bundle}.each do |bundler_bin|
|
330
|
+
%w{bundler bundle rake thor}.each do |bundler_bin|
|
315
331
|
path = File.join(binstubs_path, bundler_bin)
|
316
332
|
if File.file?(path)
|
317
333
|
FileUtils.rm path
|
@@ -409,6 +425,20 @@ module Autoproj
|
|
409
425
|
end
|
410
426
|
end
|
411
427
|
|
428
|
+
def save_ruby_and_bundler_shims(bundler_path)
|
429
|
+
FileUtils.mkdir_p shim_path
|
430
|
+
File.open(File.join(shim_path, 'bundler'), 'w') do |io|
|
431
|
+
io.puts "#! /bin/sh"
|
432
|
+
io.puts "exec #{ruby_executable} #{bundler_path} \"$@\""
|
433
|
+
end
|
434
|
+
FileUtils.chmod 0755, File.join(shim_path, 'bundler')
|
435
|
+
File.open(File.join(shim_path, 'ruby'), 'w') do |io|
|
436
|
+
io.puts "#! /bin/sh"
|
437
|
+
io.puts "exec #{ruby_executable} \"$@\""
|
438
|
+
end
|
439
|
+
FileUtils.chmod 0755, File.join(shim_path, 'ruby')
|
440
|
+
end
|
441
|
+
|
412
442
|
def install
|
413
443
|
if private_bundler?
|
414
444
|
puts "Installing bundler in #{bundler_gem_home}"
|
@@ -420,6 +450,8 @@ module Autoproj
|
|
420
450
|
else
|
421
451
|
exit 1
|
422
452
|
end
|
453
|
+
save_ruby_and_bundler_shims(bundler)
|
454
|
+
env['PATH'].unshift shim_path
|
423
455
|
save_gemfile
|
424
456
|
puts "Installing autoproj in #{dot_autoproj}"
|
425
457
|
install_autoproj(bundler)
|
@@ -470,10 +502,21 @@ module Autoproj
|
|
470
502
|
Gem.ruby, autoproj_path, *args, *autoproj_options
|
471
503
|
end
|
472
504
|
|
505
|
+
def v1_workspace?
|
506
|
+
File.file?(File.join(root_dir, 'autoproj', 'config.yml')) &&
|
507
|
+
!File.directory?(File.join(root_dir, '.autoproj'))
|
508
|
+
end
|
509
|
+
|
473
510
|
def stage1
|
511
|
+
if v1_workspace? && File.file?(v1_envsh = File.join(root_dir, 'env.sh'))
|
512
|
+
FileUtils.cp v1_envsh, 'env.sh-autoproj-v1'
|
513
|
+
end
|
474
514
|
FileUtils.mkdir_p dot_autoproj
|
475
515
|
save_config
|
476
516
|
install
|
517
|
+
rescue Exception
|
518
|
+
FileUtils.rm_rf dot_autoproj
|
519
|
+
raise
|
477
520
|
end
|
478
521
|
|
479
522
|
def call_stage2
|
@@ -492,6 +535,11 @@ module Autoproj
|
|
492
535
|
if !system(Gem.ruby, autoproj_path, 'envsh', *autoproj_options)
|
493
536
|
exit 1
|
494
537
|
end
|
538
|
+
# This is really needed on an existing install to install the
|
539
|
+
# gems that were present in the v1 layout
|
540
|
+
if !system(Gem.ruby, autoproj_path, 'osdeps')
|
541
|
+
exit 1
|
542
|
+
end
|
495
543
|
end
|
496
544
|
end
|
497
545
|
end
|
data/lib/autoproj/cli/main.rb
CHANGED
@@ -320,24 +320,6 @@ def query(query_string = nil)
|
|
320
320
|
run_autoproj_cli(:query, :Query, Hash[], *Array(query_string))
|
321
321
|
end
|
322
322
|
|
323
|
-
desc 'upgrade', "upgrade autoproj itself, and the workspace layout"
|
324
|
-
option :local, type: :boolean, default: false,
|
325
|
-
desc: 'do not access the network (will fail if some gems are missing)'
|
326
|
-
option :gemfile, type: :string,
|
327
|
-
desc: 'path to a gemfile that should be used to install autoproj'
|
328
|
-
def upgrade
|
329
|
-
require 'autoproj/ops/install'
|
330
|
-
installer = Autoproj::Ops::Install.new(Dir.pwd)
|
331
|
-
|
332
|
-
if options.has_key?('local')
|
333
|
-
installer.local = options['local']
|
334
|
-
end
|
335
|
-
if options[:gemfile]
|
336
|
-
installer.gemfile = File.read(options[:gemfile])
|
337
|
-
end
|
338
|
-
installer.stage1
|
339
|
-
end
|
340
|
-
|
341
323
|
desc 'install_stage2 ROOT_DIR [ENVVAR=VALUE ...]', 'used by autoproj_install to finalize the installation',
|
342
324
|
hide: true
|
343
325
|
def install_stage2(root_dir, *vars)
|
data/lib/autoproj/cli/osdeps.rb
CHANGED
@@ -9,9 +9,13 @@ def run(user_selection, options = Hash.new)
|
|
9
9
|
finalize_setup(user_selection,
|
10
10
|
ignore_non_imported_packages: true)
|
11
11
|
|
12
|
+
options = Kernel.validate_options options,
|
13
|
+
update: true,
|
14
|
+
shell_helpers: ws.config.shell_helpers?
|
12
15
|
ws.install_os_packages(
|
13
16
|
osdep_packages,
|
14
17
|
install_only: !options[:update])
|
18
|
+
ws.export_env_sh(shell_helpers: options[:shell_helpers])
|
15
19
|
end
|
16
20
|
end
|
17
21
|
end
|
@@ -226,19 +226,32 @@ def private_gems?
|
|
226
226
|
!!get('private_gems', false)
|
227
227
|
end
|
228
228
|
|
229
|
-
|
229
|
+
# The path provided to bundler to install the gems
|
230
|
+
def gems_bundler_path
|
230
231
|
value = get('private_gems', false)
|
231
232
|
if value.respond_to?(:to_str)
|
232
|
-
|
233
|
+
value
|
233
234
|
elsif value
|
234
235
|
default = File.join(ws.prefix_dir, 'gems')
|
235
236
|
set('private_gems', default)
|
236
237
|
default
|
237
|
-
else
|
238
|
-
Gem.user_dir
|
239
238
|
end
|
240
239
|
end
|
241
240
|
|
241
|
+
# The GEM_HOME derived from {#gems_bundler_path}
|
242
|
+
#
|
243
|
+
# RubyGems and Bundler install gems in a subdirectory specific to the
|
244
|
+
# Ruby platform and version. This adds the relevant suffix to
|
245
|
+
# {#gems_bundler_path}
|
246
|
+
def gems_gem_home
|
247
|
+
base_path = gems_bundler_path || File.join(Gem.user_dir, '.gem')
|
248
|
+
path_suffix = Pathname.new(Gem.user_dir).
|
249
|
+
relative_path_from(Pathname.new(File.join(Gem.user_home, '.gem'))).
|
250
|
+
to_s
|
251
|
+
File.join(base_path, path_suffix)
|
252
|
+
end
|
253
|
+
|
254
|
+
# The full path to the expected ruby executable
|
242
255
|
def ruby_executable
|
243
256
|
if path = get('ruby_executable', nil)
|
244
257
|
path
|
@@ -249,6 +262,8 @@ def ruby_executable
|
|
249
262
|
end
|
250
263
|
end
|
251
264
|
|
265
|
+
# Verify that the Ruby executable that is being used to run autoproj
|
266
|
+
# matches the one expected in the configuration
|
252
267
|
def validate_ruby_executable
|
253
268
|
actual = OSPackageResolver.autodetect_ruby_program
|
254
269
|
if has_value_for?('ruby_executable')
|
@@ -82,7 +82,9 @@ def self.find_v1_workspace_dir(base_dir = default_find_base_dir)
|
|
82
82
|
path = Pathname.new(base_dir)
|
83
83
|
while !path.root?
|
84
84
|
if (path + "autoproj").exist?
|
85
|
-
|
85
|
+
if !(path + ".autoproj").exist?
|
86
|
+
return path.to_s
|
87
|
+
end
|
86
88
|
end
|
87
89
|
path = path.parent
|
88
90
|
end
|
data/lib/autoproj/ops/install.rb
CHANGED
@@ -24,6 +24,8 @@ class UnexpectedBinstub < RuntimeError; end
|
|
24
24
|
# A set of options that should be passed to autoproj when calling it
|
25
25
|
# in a subprocess
|
26
26
|
attr_reader :autoproj_options
|
27
|
+
# The Ruby interpreter we use for this install
|
28
|
+
attr_reader :ruby_executable
|
27
29
|
|
28
30
|
def initialize(root_dir)
|
29
31
|
@root_dir = root_dir
|
@@ -44,15 +46,16 @@ def initialize(root_dir)
|
|
44
46
|
|
45
47
|
load_config
|
46
48
|
if config['ruby_executable'] != Gem.ruby
|
47
|
-
raise "this autoproj installation was already bootstrapped using #{config['ruby_executable']}, but you are currently running under #{Gem.ruby}. Changing the ruby interpreter in a given workspace is not supported"
|
49
|
+
raise "this autoproj installation was already bootstrapped using #{config['ruby_executable']}, but you are currently running under #{Gem.ruby}. Changing the ruby interpreter in a given workspace is not supported, you need to do a clean bootstrap"
|
48
50
|
end
|
49
|
-
|
51
|
+
@ruby_executable = config['ruby_executable']
|
50
52
|
@local = false
|
51
53
|
end
|
52
54
|
|
53
55
|
def env_for_child
|
54
|
-
|
55
|
-
h[k] =
|
56
|
+
env.inject(Hash.new) do |h, (k, v)|
|
57
|
+
h[k] = if v && !v.empty? then v.join(File::PATH_SEPARATOR)
|
58
|
+
end
|
56
59
|
h
|
57
60
|
end
|
58
61
|
end
|
@@ -91,6 +94,8 @@ def autoproj_install_dir; File.join(dot_autoproj, 'autoproj') end
|
|
91
94
|
def autoproj_gemfile_path; File.join(autoproj_install_dir, 'Gemfile') end
|
92
95
|
def autoproj_config_path; File.join(dot_autoproj, 'config.yml') end
|
93
96
|
|
97
|
+
def shim_path; File.join(dot_autoproj, 'bin') end
|
98
|
+
|
94
99
|
# Whether we can access the network while installing
|
95
100
|
def local?; !!@local end
|
96
101
|
# (see #local?)
|
@@ -151,7 +156,7 @@ def guess_gem_program
|
|
151
156
|
|
152
157
|
candidates = ['gem']
|
153
158
|
if ruby_bin =~ /^ruby(.+)$/
|
154
|
-
candidates
|
159
|
+
candidates.unshift "gem#{$1}"
|
155
160
|
end
|
156
161
|
|
157
162
|
candidates.each do |gem_name|
|
@@ -175,10 +180,20 @@ def default_gemfile_contents(autoproj_version = ">= 2.0.0.a")
|
|
175
180
|
|
176
181
|
# Parse the provided command line options and returns the non-options
|
177
182
|
def parse_options(args = ARGV)
|
183
|
+
default_gem_path = File.join(Dir.home, '.autoproj', 'gems')
|
184
|
+
self.private_bundler = default_gem_path
|
185
|
+
self.private_gems = default_gem_path
|
186
|
+
self.private_autoproj = default_gem_path
|
187
|
+
|
178
188
|
options = OptionParser.new do |opt|
|
179
189
|
opt.on '--local', 'do not access the network (may fail)' do
|
180
190
|
@local = true
|
181
191
|
end
|
192
|
+
opt.on '--public', "install gems in the default RubyGems locations. Consider using this if you don't have a v1 install anymore" do
|
193
|
+
self.private_bundler = false
|
194
|
+
self.private_autoproj = false
|
195
|
+
self.private_gems = false
|
196
|
+
end
|
182
197
|
opt.on '--private-bundler[=PATH]', 'install bundler locally in the workspace' do |path|
|
183
198
|
self.private_bundler = path || true
|
184
199
|
end
|
@@ -188,7 +203,7 @@ def parse_options(args = ARGV)
|
|
188
203
|
opt.on '--private-gems[=PATH]', 'install gems locally in the prefix directory' do |path|
|
189
204
|
self.private_gems = path || true
|
190
205
|
end
|
191
|
-
opt.on '--private[=PATH]',
|
206
|
+
opt.on '--private[=PATH]', "whether bundler, autoproj and the workspace gems should be installed locally in the workspace. This is the default, with a path of #{default_gem_path}" do |path|
|
192
207
|
self.private_bundler = path || true
|
193
208
|
self.private_autoproj = path || true
|
194
209
|
self.private_gems = path || true
|
@@ -225,15 +240,16 @@ def install_bundler
|
|
225
240
|
|
226
241
|
result = system(
|
227
242
|
env_for_child.merge('GEM_PATH' => "", 'GEM_HOME' => bundler_gem_home),
|
228
|
-
gem_program, 'install', '--no-document', '--no-format-executable',
|
243
|
+
Gem.ruby, gem_program, 'install', '--no-document', '--no-format-executable',
|
229
244
|
*local,
|
230
245
|
"--bindir=#{File.join(bundler_gem_home, 'bin')}", 'bundler')
|
231
246
|
|
232
|
-
if
|
247
|
+
if result
|
248
|
+
File.join(bundler_gem_home, 'bin', 'bundler')
|
249
|
+
else
|
233
250
|
STDERR.puts "FATAL: failed to install bundler in #{dot_autoproj}"
|
234
|
-
|
251
|
+
nil
|
235
252
|
end
|
236
|
-
File.join(bundler_gem_home, 'bin', 'bundler')
|
237
253
|
end
|
238
254
|
|
239
255
|
def find_bundler
|
@@ -249,11 +265,11 @@ def find_bundler
|
|
249
265
|
if !bundler
|
250
266
|
if ENV['PATH'] != clean_path
|
251
267
|
STDERR.puts " it appears that you already have some autoproj-generated env.sh loaded"
|
252
|
-
STDERR.puts " - if you are
|
253
|
-
STDERR.puts " - if you are running
|
268
|
+
STDERR.puts " - if you are upgrading a v1 install, please contact the autoproj author at https://github.com/rock-core/autoproj/issues/new"
|
269
|
+
STDERR.puts " - if you are running a fresh install, try again in a console where the env.sh is not loaded"
|
254
270
|
exit 1
|
255
271
|
else
|
256
|
-
STDERR.puts "
|
272
|
+
STDERR.puts " you might want to try and install it manually first by running 'gem install bundler'"
|
257
273
|
STDERR.puts " or call this command again with --private-bundler to have it installed in the workspace"
|
258
274
|
exit 1
|
259
275
|
end
|
@@ -282,7 +298,7 @@ def install_autoproj(bundler)
|
|
282
298
|
if private_autoproj?
|
283
299
|
clean_env['GEM_PATH'] = bundler_gem_home
|
284
300
|
clean_env['GEM_HOME'] = nil
|
285
|
-
opts << "--
|
301
|
+
opts << "--path=#{autoproj_gem_home}"
|
286
302
|
end
|
287
303
|
binstubs_path = File.join(autoproj_install_dir, 'bin')
|
288
304
|
result = system(clean_env.merge('GEM_HOME' => autoproj_gem_home),
|
@@ -301,7 +317,7 @@ def install_autoproj(bundler)
|
|
301
317
|
end
|
302
318
|
|
303
319
|
def self.clean_binstubs(binstubs_path)
|
304
|
-
%w{bundler bundle}.each do |bundler_bin|
|
320
|
+
%w{bundler bundle rake thor}.each do |bundler_bin|
|
305
321
|
path = File.join(binstubs_path, bundler_bin)
|
306
322
|
if File.file?(path)
|
307
323
|
FileUtils.rm path
|
@@ -399,6 +415,20 @@ def gem_bindir
|
|
399
415
|
end
|
400
416
|
end
|
401
417
|
|
418
|
+
def save_ruby_and_bundler_shims(bundler_path)
|
419
|
+
FileUtils.mkdir_p shim_path
|
420
|
+
File.open(File.join(shim_path, 'bundler'), 'w') do |io|
|
421
|
+
io.puts "#! /bin/sh"
|
422
|
+
io.puts "exec #{ruby_executable} #{bundler_path} \"$@\""
|
423
|
+
end
|
424
|
+
FileUtils.chmod 0755, File.join(shim_path, 'bundler')
|
425
|
+
File.open(File.join(shim_path, 'ruby'), 'w') do |io|
|
426
|
+
io.puts "#! /bin/sh"
|
427
|
+
io.puts "exec #{ruby_executable} \"$@\""
|
428
|
+
end
|
429
|
+
FileUtils.chmod 0755, File.join(shim_path, 'ruby')
|
430
|
+
end
|
431
|
+
|
402
432
|
def install
|
403
433
|
if private_bundler?
|
404
434
|
puts "Installing bundler in #{bundler_gem_home}"
|
@@ -410,6 +440,8 @@ def install
|
|
410
440
|
else
|
411
441
|
exit 1
|
412
442
|
end
|
443
|
+
save_ruby_and_bundler_shims(bundler)
|
444
|
+
env['PATH'].unshift shim_path
|
413
445
|
save_gemfile
|
414
446
|
puts "Installing autoproj in #{dot_autoproj}"
|
415
447
|
install_autoproj(bundler)
|
@@ -460,10 +492,21 @@ def run_autoproj(*args)
|
|
460
492
|
Gem.ruby, autoproj_path, *args, *autoproj_options
|
461
493
|
end
|
462
494
|
|
495
|
+
def v1_workspace?
|
496
|
+
File.file?(File.join(root_dir, 'autoproj', 'config.yml')) &&
|
497
|
+
!File.directory?(File.join(root_dir, '.autoproj'))
|
498
|
+
end
|
499
|
+
|
463
500
|
def stage1
|
501
|
+
if v1_workspace? && File.file?(v1_envsh = File.join(root_dir, 'env.sh'))
|
502
|
+
FileUtils.cp v1_envsh, 'env.sh-autoproj-v1'
|
503
|
+
end
|
464
504
|
FileUtils.mkdir_p dot_autoproj
|
465
505
|
save_config
|
466
506
|
install
|
507
|
+
rescue Exception
|
508
|
+
FileUtils.rm_rf dot_autoproj
|
509
|
+
raise
|
467
510
|
end
|
468
511
|
|
469
512
|
def call_stage2
|
@@ -482,6 +525,11 @@ def stage2(*vars)
|
|
482
525
|
if !system(Gem.ruby, autoproj_path, 'envsh', *autoproj_options)
|
483
526
|
exit 1
|
484
527
|
end
|
528
|
+
# This is really needed on an existing install to install the
|
529
|
+
# gems that were present in the v1 layout
|
530
|
+
if !system(Gem.ruby, autoproj_path, 'osdeps')
|
531
|
+
exit 1
|
532
|
+
end
|
485
533
|
end
|
486
534
|
end
|
487
535
|
end
|
@@ -31,11 +31,11 @@ def initialize_environment
|
|
31
31
|
|
32
32
|
config = ws.config
|
33
33
|
|
34
|
-
env.add_path 'PATH', File.join(Gem.user_dir, 'bin')
|
35
34
|
env.add_path 'PATH', File.join(ws.prefix_dir, 'gems', 'bin')
|
36
35
|
env.add_path 'PATH', File.join(config.bundler_gem_home, 'bin')
|
37
36
|
env.add_path 'PATH', File.join(ws.dot_autoproj_dir, 'autoproj', 'bin')
|
38
37
|
env.set 'GEM_HOME', config.gems_gem_home
|
38
|
+
env.set 'GEM_PATH', config.bundler_gem_home
|
39
39
|
|
40
40
|
root_dir = File.join(ws.prefix_dir, 'gems')
|
41
41
|
gemfile_path = File.join(root_dir, 'Gemfile')
|
@@ -46,11 +46,10 @@ def initialize_environment
|
|
46
46
|
if !config.private_bundler? || !config.private_autoproj? || !config.private_gems?
|
47
47
|
env.set('GEM_PATH', *Gem.default_path)
|
48
48
|
end
|
49
|
+
Autobuild.programs['bundler'] = File.join(ws.dot_autoproj_dir, 'bin', 'bundler')
|
50
|
+
|
49
51
|
if config.private_bundler?
|
50
|
-
Autobuild.programs['bundler'] = File.join(config.bundler_gem_home, 'bin', 'bundler')
|
51
52
|
env.add_path 'GEM_PATH', config.bundler_gem_home
|
52
|
-
else
|
53
|
-
Autobuild.programs['bundler'] = env.find_in_path('bundler')
|
54
53
|
end
|
55
54
|
|
56
55
|
env.init_from_env 'RUBYLIB'
|
@@ -64,6 +63,11 @@ def initialize_environment
|
|
64
63
|
end
|
65
64
|
# And discover the system's rubylib
|
66
65
|
if system_rubylib = discover_rubylib
|
66
|
+
# Do not explicitely add the system rubylib to the
|
67
|
+
# environment, the interpreter will do it for us.
|
68
|
+
#
|
69
|
+
# This allows to use a binstub generated for one of ruby
|
70
|
+
# interpreter version on our workspace
|
67
71
|
env.system_env['RUBYLIB'] = []
|
68
72
|
env.original_env['RUBYLIB'] = (original_rubylib - system_rubylib).join(File::PATH_SEPARATOR)
|
69
73
|
end
|
@@ -160,6 +164,63 @@ def self.run_bundler_install(ws, gemfile, *options, update: true, binstubs: nil)
|
|
160
164
|
end
|
161
165
|
end
|
162
166
|
|
167
|
+
# Parse the contents of a gemfile into a set of
|
168
|
+
def merge_gemfiles(*path, unlock: [])
|
169
|
+
gems_remotes = Set.new
|
170
|
+
dependencies = Hash.new do |h, k|
|
171
|
+
h[k] = Hash.new do |h, k|
|
172
|
+
h[k] = Hash.new do |a, b|
|
173
|
+
a[b] = Array.new
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
path.each do |gemfile|
|
178
|
+
bundler_def = Bundler::Dsl.evaluate(gemfile, nil, [])
|
179
|
+
gems_remotes |= bundler_def.send(:sources).rubygems_remotes.to_set
|
180
|
+
bundler_def.dependencies.each do |d|
|
181
|
+
d.groups.each do |group_name|
|
182
|
+
if !d.platforms.empty?
|
183
|
+
d.platforms.each do |platform_name|
|
184
|
+
dependencies[group_name][platform_name][d.name] = d
|
185
|
+
end
|
186
|
+
else
|
187
|
+
dependencies[group_name][''][d.name] = d
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
contents = []
|
194
|
+
gems_remotes.each do |g|
|
195
|
+
g = g.to_s
|
196
|
+
if g.end_with?('/')
|
197
|
+
g = g[0..-2]
|
198
|
+
end
|
199
|
+
contents << "source '#{g.to_s}'"
|
200
|
+
end
|
201
|
+
dependencies.each do |group_name, by_platform|
|
202
|
+
contents << "group :#{group_name} do"
|
203
|
+
by_platform.each do |platform_name, deps|
|
204
|
+
deps = deps.values.sort_by(&:name)
|
205
|
+
if !platform_name.empty?
|
206
|
+
contents << " platform :#{platform_name} do"
|
207
|
+
platform_indent = " "
|
208
|
+
end
|
209
|
+
deps.each do |d|
|
210
|
+
if d.source
|
211
|
+
options = d.source.options.map { |k, v| "#{k}: \"#{v}\"" }
|
212
|
+
end
|
213
|
+
contents << [" #{platform_indent}gem \"#{d.name}\", \"#{d.requirement}\"", *options].join(", ")
|
214
|
+
end
|
215
|
+
if !platform_name.empty?
|
216
|
+
contents << " end"
|
217
|
+
end
|
218
|
+
end
|
219
|
+
contents << "end"
|
220
|
+
end
|
221
|
+
contents.join("\n")
|
222
|
+
end
|
223
|
+
|
163
224
|
def install(gems, filter_uptodate_packages: false, install_only: false)
|
164
225
|
root_dir = File.join(ws.prefix_dir, 'gems')
|
165
226
|
gemfile_path = File.join(root_dir, 'Gemfile')
|
@@ -188,20 +249,21 @@ def install(gems, filter_uptodate_packages: false, install_only: false)
|
|
188
249
|
Dir.glob(File.join(ws.overrides_dir, "*.gemfile")) do |gemfile_path|
|
189
250
|
gemfiles << gemfile_path
|
190
251
|
end
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
252
|
+
gemfiles << File.join(ws.dot_autoproj_dir, 'autoproj', 'Gemfile')
|
253
|
+
|
254
|
+
# Save the osdeps entries in a temporary gemfile and finally
|
255
|
+
# merge the whole lot of it
|
256
|
+
gemfile_contents = Tempfile.open 'autoproj-gemfile' do |io|
|
257
|
+
osdeps_gemfile_lines = gems.sort.map do |name|
|
258
|
+
name, version = parse_package_entry(name)
|
259
|
+
io.puts "gem \"#{name}\", \"#{version || ">= 0"}\""
|
260
|
+
end
|
261
|
+
io.flush
|
262
|
+
gemfiles.unshift io.path
|
263
|
+
# The autoproj gemfile needs to be last, we really don't
|
264
|
+
# want to mess it up
|
265
|
+
merge_gemfiles(*gemfiles)
|
199
266
|
end
|
200
|
-
gemfile_lines = gemfile_lines.sort.uniq
|
201
|
-
gemfile_contents = [
|
202
|
-
"eval_gemfile \"#{File.join(ws.dot_autoproj_dir, 'autoproj', 'Gemfile')}\"",
|
203
|
-
*gemfile_lines
|
204
|
-
].join("\n")
|
205
267
|
|
206
268
|
FileUtils.mkdir_p root_dir
|
207
269
|
if updated = (!File.exist?(gemfile_path) || File.read(gemfile_path) != gemfile_contents)
|
@@ -212,7 +274,7 @@ def install(gems, filter_uptodate_packages: false, install_only: false)
|
|
212
274
|
|
213
275
|
options = Array.new
|
214
276
|
if ws.config.private_gems?
|
215
|
-
options << "--path" << ws.config.
|
277
|
+
options << "--path" << ws.config.gems_bundler_path
|
216
278
|
end
|
217
279
|
|
218
280
|
binstubs_path = File.join(root_dir, 'bin')
|
@@ -233,7 +295,7 @@ def install(gems, filter_uptodate_packages: false, install_only: false)
|
|
233
295
|
backup_restore(backups)
|
234
296
|
raise
|
235
297
|
ensure
|
236
|
-
FileUtils.rm_f File.join(binstubs_path, 'bundler')
|
298
|
+
FileUtils.rm_f File.join(binstubs_path, 'bundler') if binstubs_path
|
237
299
|
backup_clean(backups)
|
238
300
|
end
|
239
301
|
|
@@ -246,6 +308,7 @@ def discover_rubylib
|
|
246
308
|
out: io,
|
247
309
|
err: '/dev/null')
|
248
310
|
if result
|
311
|
+
io.rewind
|
249
312
|
io.readlines.map { |l| l.chomp }.find_all { |l| !l.empty? }
|
250
313
|
end
|
251
314
|
end
|
@@ -260,11 +323,12 @@ def discover_bundle_rubylib(silent_errors: false)
|
|
260
323
|
end
|
261
324
|
Tempfile.open 'autoproj-rubylib' do |io|
|
262
325
|
result = Bundler.clean_system(
|
263
|
-
Hash['BUNDLE_GEMFILE' => gemfile],
|
264
|
-
Autobuild.tool('bundler'), 'exec', 'ruby', '-e', 'puts $LOAD_PATH',
|
326
|
+
Hash['BUNDLE_GEMFILE' => gemfile, 'RUBYLIB' => nil],
|
327
|
+
Autobuild.tool('bundler'), 'exec', Autobuild.tool('ruby'), '-rbundler/setup', '-e', 'puts $LOAD_PATH',
|
265
328
|
out: io, **silent_redirect)
|
266
329
|
|
267
330
|
if result
|
331
|
+
io.rewind
|
268
332
|
io.readlines.map { |l| l.chomp }.find_all { |l| !l.empty? }
|
269
333
|
end
|
270
334
|
end
|
data/lib/autoproj/version.rb
CHANGED
data/lib/autoproj/workspace.rb
CHANGED
@@ -64,10 +64,10 @@ def self.from_dir(dir)
|
|
64
64
|
def self.from_environment
|
65
65
|
if path = Autoproj.find_workspace_dir
|
66
66
|
from_dir(path)
|
67
|
-
elsif envvar = ENV['AUTOPROJ_CURRENT_ROOT']
|
68
|
-
raise NotWorkspace, "AUTOPROJ_CURRENT_ROOT is currently set to #{envvar}, but that is not an Autoproj workspace"
|
69
67
|
elsif Autoproj.find_v1_workspace_dir(dir = Autoproj.default_find_base_dir)
|
70
68
|
raise OutdatedWorkspace, "#{dir} looks like a v1 workspace, run autoproj upgrade before continuing"
|
69
|
+
elsif envvar = ENV['AUTOPROJ_CURRENT_ROOT']
|
70
|
+
raise NotWorkspace, "AUTOPROJ_CURRENT_ROOT is currently set to #{envvar}, but that is not an Autoproj workspace"
|
71
71
|
else
|
72
72
|
raise NotWorkspace, "not in an Autoproj installation, and no env.sh has been loaded so far"
|
73
73
|
end
|
@@ -342,9 +342,6 @@ def run(*args, &block)
|
|
342
342
|
end
|
343
343
|
options_env = options.fetch(:env, Hash.new)
|
344
344
|
options[:env] = env.resolved_env.merge(options_env)
|
345
|
-
if options_env['BUNDLE_GEMFILE']
|
346
|
-
raise
|
347
|
-
end
|
348
345
|
Autobuild::Subprocess.run(*args, options, &block)
|
349
346
|
end
|
350
347
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: autoproj
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
4
|
+
version: 2.0.0.rc16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sylvain Joyeux
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-02-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: autobuild
|