autoproj 2.7.1 → 2.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +5 -5
  2. data/Rakefile +31 -1
  3. data/autoproj.gemspec +2 -0
  4. data/bin/alocate +3 -5
  5. data/bin/alog +3 -3
  6. data/bin/amake +3 -4
  7. data/bin/aup +4 -3
  8. data/bin/autoproj +1 -6
  9. data/bin/autoproj_bootstrap +153 -47
  10. data/bin/autoproj_install +153 -47
  11. data/lib/autoproj/autobuild_extensions/dsl.rb +5 -0
  12. data/lib/autoproj/bash_completion.rb +26 -0
  13. data/lib/autoproj/cli/base.rb +4 -4
  14. data/lib/autoproj/cli/build.rb +2 -3
  15. data/lib/autoproj/cli/main.rb +52 -2
  16. data/lib/autoproj/cli/main_global.rb +39 -0
  17. data/lib/autoproj/cli/osdeps.rb +2 -1
  18. data/lib/autoproj/cli/update.rb +13 -1
  19. data/lib/autoproj/configuration.rb +14 -2
  20. data/lib/autoproj/environment.rb +48 -31
  21. data/lib/autoproj/ops/install.rb +153 -47
  22. data/lib/autoproj/shell_completion.rb +164 -0
  23. data/lib/autoproj/templates/helpers.bash.erb +79 -0
  24. data/lib/autoproj/templates/helpers.zsh.erb +38 -0
  25. data/lib/autoproj/templates/main.bash.erb +35 -0
  26. data/lib/autoproj/templates/main.zsh.erb +9 -0
  27. data/lib/autoproj/templates/subcommand.bash.erb +50 -0
  28. data/lib/autoproj/templates/subcommand.zsh.erb +51 -0
  29. data/lib/autoproj/version.rb +1 -1
  30. data/lib/autoproj/workspace.rb +97 -19
  31. data/lib/autoproj/zsh_completion.rb +43 -0
  32. data/shell/autoproj_bash +67 -0
  33. data/shell/autoproj_zsh +26 -0
  34. data/shell/completion/alocate_bash +68 -0
  35. data/shell/completion/alocate_zsh +22 -0
  36. data/shell/completion/alog_bash +61 -0
  37. data/shell/completion/alog_zsh +20 -0
  38. data/shell/completion/amake_bash +77 -0
  39. data/shell/completion/amake_zsh +27 -0
  40. data/shell/completion/aup_bash +89 -0
  41. data/shell/completion/aup_zsh +34 -0
  42. data/shell/completion/autoproj_bash +1556 -0
  43. data/shell/completion/autoproj_zsh +1005 -0
  44. metadata +51 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 0c27ad7f0094558f228fb7c604412b04280f3cbf
4
- data.tar.gz: f31f5167a74df916cd5e2c5a63c8f7ef4edcfdef
2
+ SHA256:
3
+ metadata.gz: 74382a8f78adb1bf83f20565bccc8c76972780b497bdd047559d520ed5486b09
4
+ data.tar.gz: 55bcf45cd3caa0fa840ef9b70dc8679b476669f27362b2181a5cb424005d0b63
5
5
  SHA512:
6
- metadata.gz: 42ac6f5fb9ca6986d9e9989089815028daee6c291ddc2cec8b7504a5c4e8f968966642c24df6923c0d887c807399cd7af09ff3e941c83860e97cf0578bd40f47
7
- data.tar.gz: 627c706ec1acb216ea5ce9ba700ef87662a62391963816ea504bf68b74f86edea46adf2272a5ac034f8de55164ad3b485bd4d0c251cbd39f4475c3858fad3a62
6
+ metadata.gz: d407340e19a489609da4e291bcb09f271db61e917ff345d94160e4546c10222cbaf67158f6c59ed0b2c093520011f7c156acbcaaf7c059e52cc89c7100a5b0cb
7
+ data.tar.gz: 68975b05b8470110377ac2b3519759351fc8c03d6df8c088e9712da35beca5a5305b699134189a83cf844ed94664d9b9825bb6b5195598a1efdbcb41b8dd4400
data/Rakefile CHANGED
@@ -25,5 +25,35 @@ task 'bootstrap' do
25
25
  end
26
26
  end
27
27
  end
28
- file 'bin/autoproj_bootstrap' => 'bootstrap'
29
28
 
29
+ require 'autoproj/bash_completion'
30
+ require 'autoproj/zsh_completion'
31
+
32
+ shells = [['bash', Autoproj::BashCompletion], ['zsh', Autoproj::ZshCompletion]]
33
+ clis = [%w[alocate locate], %w[alog log], %w[amake build], %w[aup update],
34
+ ['autoproj', nil]]
35
+
36
+ shell_dir = File.join(Dir.pwd, 'shell')
37
+ completion_dir = File.join(shell_dir, 'completion')
38
+
39
+ desc 'generate the shell helpers scripts'
40
+ task 'helpers' do
41
+ require 'erb'
42
+ templates_dir = File.join(Dir.pwd, 'lib', 'autoproj', 'templates')
43
+ FileUtils.mkdir_p(completion_dir)
44
+
45
+ shells.each do |shell|
46
+ clis.each do |cli|
47
+ completion = shell[1].new(cli[0], command: cli[1])
48
+ completion_file = File.join(completion_dir, "#{cli[0]}_#{shell[0]}")
49
+
50
+ IO.write(completion_file, completion.generate)
51
+ end
52
+ erb = File.read(File.join(templates_dir, "helpers.#{shell[0]}.erb"))
53
+ helper_file = File.join(shell_dir, "autoproj_#{shell[0]}")
54
+
55
+ IO.write(helper_file, ::ERB.new(erb, nil, '-').result(binding))
56
+ end
57
+ end
58
+
59
+ file 'bin/autoproj_bootstrap' => 'bootstrap'
@@ -34,9 +34,11 @@ Gem::Specification.new do |s|
34
34
  s.add_runtime_dependency 'tty-prompt', '~> 0.15.0'
35
35
  s.add_runtime_dependency 'tty-spinner', '~> 0.8.0'
36
36
  s.add_runtime_dependency 'rb-inotify' if RbConfig::CONFIG['target_os'] =~ /linux/
37
+ s.add_runtime_dependency 'xdg'
37
38
  s.add_development_dependency "flexmock", '~> 2.0', ">= 2.0.0"
38
39
  s.add_development_dependency "minitest", "~> 5.0", ">= 5.0"
39
40
  s.add_development_dependency "simplecov"
40
41
  s.add_development_dependency "aruba"
42
+ s.add_development_dependency "tty-cursor"
41
43
  end
42
44
 
@@ -1,7 +1,7 @@
1
1
  #! /usr/bin/env ruby
2
2
 
3
3
  require 'autoproj/cli/main'
4
- Autoproj::CLI.basic_setup
4
+ argv = Autoproj::CLI.basic_setup
5
5
 
6
6
  class Alocate < Autoproj::CLI::Main
7
7
  def self.banner(*)
@@ -10,13 +10,11 @@ class Alocate < Autoproj::CLI::Main
10
10
  end
11
11
 
12
12
  begin
13
- if ARGV.include?('--help') || ARGV.include?('help')
13
+ if argv.include?('--help') || argv.include?('help')
14
14
  Alocate.start(['help', 'locate'])
15
15
  else
16
- Alocate.start(['locate', *ARGV])
16
+ Alocate.start(['locate', *argv])
17
17
  end
18
18
  rescue Interrupt
19
19
  # Already notified in the reporting infrastructure
20
20
  end
21
-
22
-
data/bin/alog CHANGED
@@ -3,7 +3,8 @@
3
3
  require 'autoproj/cli/main'
4
4
  require 'autoproj/cli/locate'
5
5
 
6
- if ARGV.include?('--help') || ARGV.include?('help')
6
+ argv = Autoproj::CLI.basic_setup
7
+ if argv.include?('--help') || argv.include?('help')
7
8
  puts "Usage:"
8
9
  puts " alog [package]"
9
10
  puts
@@ -11,11 +12,10 @@ if ARGV.include?('--help') || ARGV.include?('help')
11
12
  exit 0
12
13
  end
13
14
 
14
- Autoproj::CLI.basic_setup
15
15
  Autoproj.report(silent: true) do
16
16
  cli = Autoproj::CLI::Locate.new
17
17
 
18
- arg = ARGV.first || Dir.pwd
18
+ arg = argv.first || Dir.pwd
19
19
  if File.directory?(arg)
20
20
  arg = "#{File.expand_path(arg)}/"
21
21
  end
data/bin/amake CHANGED
@@ -1,8 +1,8 @@
1
1
  #! /usr/bin/env ruby
2
2
 
3
3
  require 'autoproj/cli/main'
4
- Autoproj::CLI.basic_setup
5
4
 
5
+ argv = Autoproj::CLI.basic_setup
6
6
  class Amake < Autoproj::CLI::Main
7
7
  def self.banner(*)
8
8
  "amake [options]"
@@ -10,12 +10,11 @@ class Amake < Autoproj::CLI::Main
10
10
  end
11
11
 
12
12
  begin
13
- if ARGV.include?('--help') || ARGV.include?('help')
13
+ if argv.include?('--help') || argv.include?('help')
14
14
  Amake.start(['help', 'build'])
15
15
  else
16
- Amake.start(['build', '--amake', *ARGV])
16
+ Amake.start(['build', '--amake', *argv])
17
17
  end
18
18
  rescue Interrupt
19
19
  # Already notified in the reporting infrastructure
20
20
  end
21
-
data/bin/aup CHANGED
@@ -1,7 +1,8 @@
1
1
  #! /usr/bin/env ruby
2
2
 
3
3
  require 'autoproj/cli/main'
4
- Autoproj::CLI.basic_setup
4
+
5
+ argv = Autoproj::CLI.basic_setup
5
6
 
6
7
  class Aup < Autoproj::CLI::Main
7
8
  def self.banner(*)
@@ -10,10 +11,10 @@ class Aup < Autoproj::CLI::Main
10
11
  end
11
12
 
12
13
  begin
13
- if ARGV.include?('--help') || ARGV.include?('help')
14
+ if argv.include?('--help') || argv.include?('help')
14
15
  Aup.start(['help', 'update'])
15
16
  else
16
- Aup.start(['update', *ARGV, '--aup'])
17
+ Aup.start(['update', *argv, '--aup'])
17
18
  end
18
19
  rescue Interrupt
19
20
  # Already notified in the reporting infrastructure
@@ -2,15 +2,10 @@
2
2
 
3
3
  require 'autoproj/cli'
4
4
  require 'autoproj/cli/main'
5
- Autoproj::CLI.basic_setup
5
+ argv = Autoproj::CLI.basic_setup
6
6
 
7
- argv = ARGV.find_all { |arg| arg != "--no-plugins" }
8
- if argv.size == ARGV.size
9
- Autoproj::CLI.load_plugins
10
- end
11
7
  begin
12
8
  Autoproj::CLI::Main.start(argv)
13
9
  rescue Interrupt
14
10
  # Already notified in the reporting infrastructure
15
11
  end
16
-
@@ -57,13 +57,15 @@ module Autoproj
57
57
 
58
58
  load_config
59
59
  if config['ruby_executable'] != Gem.ruby
60
- 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"
60
+ raise "this autoproj installation was already bootstrapped using "\
61
+ "#{config['ruby_executable']}, but you are currently running "\
62
+ "under #{Gem.ruby}. Changing the ruby interpreter in a given "\
63
+ "workspace is not supported, you need to do a clean bootstrap"
61
64
  end
62
65
  @ruby_executable = config['ruby_executable']
63
66
  @local = false
64
67
 
65
- default_gem_path = File.join(Dir.home, '.autoproj', 'gems')
66
- @gems_install_path = default_gem_path
68
+ install_gems_in_gem_user_dir
67
69
  end
68
70
 
69
71
  def env_for_child
@@ -142,13 +144,15 @@ module Autoproj
142
144
  #
143
145
  # They are installed in a versioned subdirectory of this path, e.g.
144
146
  # {#gem_path_suffix}.
145
- #
147
+ #
146
148
  # @return [String]
147
149
  attr_reader :gems_install_path
148
150
  # The GEM_HOME under which the workspace's gems should be installed
149
- #
151
+ #
150
152
  # @return [String]
151
- def gems_gem_home; File.join(gems_install_path, gem_path_suffix) end
153
+ def gems_gem_home
154
+ File.join(gems_install_path, gem_path_suffix)
155
+ end
152
156
  # Sets where the workspace's gems should be installed
153
157
  #
154
158
  # @param [String] path the absolute path that should be given to
@@ -157,17 +161,41 @@ module Autoproj
157
161
  def gems_install_path=(path)
158
162
  @gems_install_path = path
159
163
  end
164
+
165
+ private def xdg_var(varname, default)
166
+ if (env = ENV[varname]) && !env.empty?
167
+ env
168
+ else
169
+ default
170
+ end
171
+ end
172
+
160
173
  # Install autoproj in Gem's default user dir
161
174
  def install_gems_in_gem_user_dir
162
- @gems_install_path = File.join(Gem.user_home, '.gem')
175
+ xdg_default_gem_path = xdg_var('XDG_DATA_HOME',
176
+ File.join(Dir.home, '.local', 'share', 'autoproj', 'gems'))
177
+ default_gem_path = File.join(
178
+ Dir.home, '.autoproj', 'gems')
179
+ @gems_install_path =
180
+ if File.directory?(xdg_default_gem_path)
181
+ xdg_default_gem_path
182
+ elsif File.directory?(default_gem_path)
183
+ default_gem_path
184
+ else
185
+ xdg_default_gem_path
186
+ end
163
187
  end
164
188
 
165
189
  # Whether autoproj should prefer OS-independent packages over their
166
190
  # OS-packaged equivalents (e.g. the thor gem vs. the ruby-thor
167
191
  # Debian package)
168
- def prefer_indep_over_os_packages?; @prefer_indep_over_os_packages end
192
+ def prefer_indep_over_os_packages?
193
+ @prefer_indep_over_os_packages
194
+ end
169
195
  # (see #prefer_index_over_os_packages?)
170
- def prefer_indep_over_os_packages=(flag); @prefer_indep_over_os_packages = !!flag end
196
+ def prefer_indep_over_os_packages=(flag)
197
+ @prefer_indep_over_os_packages = !!flag
198
+ end
171
199
 
172
200
  def self.guess_gem_program
173
201
  ruby_bin = RbConfig::CONFIG['RUBY_INSTALL_NAME']
@@ -175,7 +203,7 @@ module Autoproj
175
203
 
176
204
  candidates = ['gem']
177
205
  if ruby_bin =~ /^ruby(.+)$/
178
- candidates.unshift "gem#{$1}"
206
+ candidates.unshift "gem#{$1}"
179
207
  end
180
208
 
181
209
  candidates.each do |gem_name|
@@ -183,7 +211,8 @@ module Autoproj
183
211
  return gem_full_path
184
212
  end
185
213
  end
186
- raise ArgumentError, "cannot find a gem program (tried #{candidates.sort.join(", ")} in #{ruby_bindir})"
214
+ raise ArgumentError, "cannot find a gem program "\
215
+ "(tried #{candidates.sort.join(", ")} in #{ruby_bindir})"
187
216
  end
188
217
 
189
218
  # The content of the default {#gemfile}
@@ -207,39 +236,48 @@ module Autoproj
207
236
  opt.on '--skip-stage2', 'do not run the stage2 install' do
208
237
  @skip_stage2 = true
209
238
  end
210
- opt.on '--gem-source=URL', String, "use this source for RubyGems instead of rubygems.org" do |url|
239
+ opt.on '--gem-source=URL', String, "use this source for RubyGems "\
240
+ "instead of rubygems.org" do |url|
211
241
  @gem_source = url
212
242
  end
213
- opt.on '--gems-path=PATH', "install gems under this path instead of ~/.autoproj/gems" do |path|
243
+ opt.on '--gems-path=PATH', "install gems under this path instead "\
244
+ "of ~/.autoproj/gems" do |path|
214
245
  self.gems_install_path = path
215
246
  end
216
247
  opt.on '--public-gems', "install gems in the default gem location" do
217
248
  self.install_gems_in_gem_user_dir
218
249
  end
219
- opt.on '--version=VERSION_CONSTRAINT', String, 'use the provided string as a version constraint for autoproj' do |version|
250
+ opt.on '--version=VERSION_CONSTRAINT', String, 'use the provided "\
251
+ "string as a version constraint for autoproj' do |version|
220
252
  if @gemfile
221
253
  raise "cannot give both --version and --gemfile"
222
254
  end
223
255
  @gemfile = default_gemfile_contents(version)
224
256
  end
225
- opt.on '--gemfile=PATH', String, 'use the given Gemfile to install autoproj instead of the default' do |path|
257
+ opt.on '--gemfile=PATH', String, 'use the given Gemfile to install "\
258
+ "autoproj instead of the default' do |path|
226
259
  if @gemfile
227
260
  raise "cannot give both --version and --gemfile"
228
261
  end
229
262
  @gemfile = File.read(path)
230
263
  end
231
- opt.on '--seed-config=PATH', String, 'path to a seed file that should be used to initialize the configuration' do |path|
264
+ opt.on '--seed-config=PATH', String, 'path to a seed file that "\
265
+ "should be used to initialize the configuration' do |path|
232
266
  @config.merge!(YAML.load(File.read(path)))
233
267
  end
234
- opt.on '--prefer-os-independent-packages', 'prefer OS-independent packages (such as a RubyGem) over their OS-packaged equivalent (e.g. the thor gem vs. the ruby-thor debian package)' do
268
+ opt.on '--prefer-os-independent-packages', 'prefer OS-independent "\
269
+ "packages (such as a RubyGem) over their OS-packaged equivalent "\
270
+ "(e.g. the thor gem vs. the ruby-thor debian package)' do
235
271
  @prefer_indep_over_os_packages = true
236
272
  end
237
- opt.on '--[no-]color', 'do not use colored output (enabled by default if the terminal supports it)' do |color|
273
+ opt.on '--[no-]color', 'do not use colored output (enabled by "\
274
+ "default if the terminal supports it)' do |color|
238
275
  if color then autoproj_options << "--color"
239
276
  else autoproj_options << '--no-color'
240
277
  end
241
278
  end
242
- opt.on '--[no-]progress', 'do not use progress output (enabled by default if the terminal supports it)' do |color|
279
+ opt.on '--[no-]progress', 'do not use progress output (enabled by "\
280
+ "default if the terminal supports it)' do |color|
243
281
  if color then autoproj_options << "--progress"
244
282
  else autoproj_options << '--no-progress'
245
283
  end
@@ -272,9 +310,11 @@ module Autoproj
272
310
 
273
311
  result = system(
274
312
  env_for_child.merge('GEM_HOME' => gems_gem_home),
275
- Gem.ruby, gem_program, 'install', '--env-shebang', '--no-document', '--no-format-executable', '--clear-sources', '--source', gem_source,
276
- *local,
277
- "--bindir=#{File.join(gems_gem_home, 'bin')}", 'bundler', **redirection)
313
+ Gem.ruby, gem_program, 'install',
314
+ '--env-shebang', '--no-document', '--no-format-executable',
315
+ '--clear-sources', '--source', gem_source,
316
+ *local, "--bindir=#{File.join(gems_gem_home, 'bin')}",
317
+ 'bundler', **redirection)
278
318
 
279
319
  if !result
280
320
  STDERR.puts "FATAL: failed to install bundler in #{gems_gem_home}"
@@ -285,14 +325,15 @@ module Autoproj
285
325
  if File.exist?(bundler_path)
286
326
  bundler_path
287
327
  else
288
- STDERR.puts "gem install bundler returned successfully, but still cannot find bundler in #{bundler_path}"
328
+ STDERR.puts "gem install bundler returned successfully, but still "\
329
+ "cannot find bundler in #{bundler_path}"
289
330
  nil
290
331
  end
291
332
  end
292
333
 
293
334
  def install_autoproj(bundler)
294
- # Force bundler to update. If the user does not want this, let him specify a
295
- # Gemfile with tighter version constraints
335
+ # Force bundler to update. If the user does not want this, let
336
+ # him specify a Gemfile with tighter version constraints
296
337
  lockfile = File.join(dot_autoproj, 'Gemfile.lock')
297
338
  if File.exist?(lockfile)
298
339
  FileUtils.rm lockfile
@@ -304,6 +345,7 @@ module Autoproj
304
345
  opts << '--local' if local?
305
346
  opts << "--path=#{gems_install_path}"
306
347
  shims_path = File.join(dot_autoproj, 'bin')
348
+
307
349
  result = system(clean_env,
308
350
  Gem.ruby, bundler, 'install',
309
351
  "--gemfile=#{autoproj_gemfile_path}",
@@ -316,12 +358,14 @@ module Autoproj
316
358
  exit 1
317
359
  end
318
360
  ensure
319
- self.class.rewrite_shims(shims_path, ruby_executable, root_dir, autoproj_gemfile_path, gems_gem_home)
361
+ self.class.rewrite_shims(shims_path, ruby_executable,
362
+ root_dir, autoproj_gemfile_path, gems_gem_home)
320
363
  end
321
364
 
322
365
  EXCLUDED_FROM_SHIMS = %w{rake thor}
323
366
 
324
- def self.rewrite_shims(shim_path, ruby_executable, root_dir, autoproj_gemfile_path, gems_gem_home)
367
+ def self.rewrite_shims(shim_path, ruby_executable,
368
+ root_dir, autoproj_gemfile_path, gems_gem_home)
325
369
  FileUtils.mkdir_p shim_path
326
370
  File.open(File.join(shim_path, 'ruby'), 'w') do |io|
327
371
  io.puts "#! /bin/sh"
@@ -329,10 +373,9 @@ module Autoproj
329
373
  end
330
374
  FileUtils.chmod 0755, File.join(shim_path, 'ruby')
331
375
 
332
- FileUtils.touch File.join(shim_path, 'bundler')
333
- FileUtils.touch File.join(shim_path, 'bundle')
334
376
  Dir.glob(File.join(shim_path, '*')) do |bin_script|
335
- next if !File.file?(bin_script)
377
+ next unless File.file?(bin_script)
378
+
336
379
  bin_name = File.basename(bin_script)
337
380
  if EXCLUDED_FROM_SHIMS.include?(bin_name)
338
381
  FileUtils.rm_f bin_script
@@ -342,19 +385,46 @@ module Autoproj
342
385
 
343
386
  bin_shim = File.join(shim_path, bin_name)
344
387
  bin_script_lines = File.readlines(bin_script)
388
+ next if has_autoproj_preamble?(bin_script_lines)
389
+
345
390
  File.open(bin_shim, 'w') do |io|
346
391
  if bin_name == 'bundler' || bin_name == 'bundle'
347
- io.puts shim_bundler(ruby_executable, autoproj_gemfile_path, gems_gem_home)
392
+ io.puts shim_bundler(bin_script_lines, ruby_executable,
393
+ autoproj_gemfile_path, gems_gem_home)
348
394
  else
349
- load_line = bin_script_lines.grep(/load Gem.bin_path/).first
350
- io.puts shim_script(ruby_executable, root_dir, autoproj_gemfile_path, gems_gem_home, load_line)
395
+ io.puts shim_script(bin_script_lines, ruby_executable, root_dir,
396
+ autoproj_gemfile_path, gems_gem_home)
351
397
  end
352
398
  end
353
399
  FileUtils.chmod 0755, bin_shim
354
400
  end
355
401
  end
356
402
 
357
- def self.shim_bundler(ruby_executable, autoproj_gemfile_path, gems_gem_home)
403
+ def self.new_style_bundler_binstub?(script_lines)
404
+ script_lines.any? { |l| l =~ /This file was generated by Bundler/ }
405
+ end
406
+
407
+ def self.has_autoproj_preamble?(script_lines)
408
+ script_lines.any? { |l| l =~ /Autoproj generated preamble/ }
409
+ end
410
+
411
+ def self.shim_bundler(script_lines, ruby_executable, autoproj_gemfile_path, gems_gem_home)
412
+ return shim_bundler_old(ruby_executable, autoproj_gemfile_path, gems_gem_home) \
413
+ unless new_style_bundler_binstub?(script_lines)
414
+
415
+ script_lines.insert(1, <<-RESTART_BUNDLER)
416
+ # Autoproj generated preamble
417
+ if defined?(Bundler)
418
+ Bundler.with_clean_env do
419
+ exec($0, *ARGV)
420
+ end
421
+ end
422
+ ENV['BUNDLE_GEMFILE'] = '#{autoproj_gemfile_path}'
423
+ RESTART_BUNDLER
424
+ script_lines.join
425
+ end
426
+
427
+ def self.shim_bundler_old(ruby_executable, autoproj_gemfile_path, gems_gem_home)
358
428
  "#! #{ruby_executable}
359
429
 
360
430
  if defined?(Bundler)
@@ -370,8 +440,35 @@ Gem.paths = Hash['GEM_HOME' => '#{gems_gem_home}', 'GEM_PATH' => '']
370
440
 
371
441
  load Gem.bin_path('bundler', 'bundler')"
372
442
  end
373
-
374
- def self.shim_script(ruby_executable, root_dir, autoproj_gemfile_path, gems_gem_home, load_line)
443
+
444
+ def self.shim_script(script_lines, ruby_executable, root_dir,
445
+ autoproj_gemfile_path, gems_gem_home)
446
+ new_style = !script_lines.empty? && script_lines.any? do |l|
447
+ l =~ /This file was generated by Bundler/
448
+ end
449
+ load_line = script_lines.grep(/load Gem.bin_path/).first
450
+ return shim_script_old(ruby_executable, root_dir,
451
+ autoproj_gemfile_path, gems_gem_home, load_line) \
452
+ unless new_style
453
+
454
+ script_lines.insert(1, <<-AUTOPROJ_PREAMBLE)
455
+ # Autoproj generated preamble, v1
456
+ if defined?(Bundler)
457
+ Bundler.with_clean_env do
458
+ exec(Hash['RUBYLIB' => nil], $0, *ARGV)
459
+ end
460
+ elsif ENV['RUBYLIB']
461
+ exec(Hash['RUBYLIB' => nil], $0, *ARGV)
462
+ end
463
+
464
+ ENV['BUNDLE_GEMFILE'] = '#{autoproj_gemfile_path}'
465
+ ENV['AUTOPROJ_CURRENT_ROOT'] = '#{root_dir}'
466
+ AUTOPROJ_PREAMBLE
467
+ return script_lines.join
468
+ end
469
+
470
+ def self.shim_script_old(ruby_executable, root_dir, autoproj_gemfile_path,
471
+ gems_gem_home, load_line)
375
472
  "#! #{ruby_executable}
376
473
 
377
474
  if defined?(Bundler)
@@ -433,9 +530,10 @@ require 'bundler/setup'
433
530
  "if File.file?(config_path)",
434
531
  " require 'yaml'",
435
532
  " config = YAML.load(File.read(config_path)) || Hash.new",
436
- " (config['plugins'] || Hash.new).each do |plugin_name, (version, options)|",
437
- " gem plugin_name, version, **options",
438
- " end",
533
+ " (config['plugins'] || Hash.new).",
534
+ " each do |plugin_name, (version, options)|",
535
+ " gem plugin_name, version, **options",
536
+ " end",
439
537
  "end"
440
538
  ].join("\n")
441
539
 
@@ -449,7 +547,8 @@ require 'bundler/setup'
449
547
 
450
548
 
451
549
  def find_in_clean_path(command, *additional_paths)
452
- clean_path = env_for_child['PATH'].split(File::PATH_SEPARATOR) + additional_paths
550
+ clean_path = env_for_child['PATH'].split(File::PATH_SEPARATOR) +
551
+ additional_paths
453
552
  clean_path.each do |p|
454
553
  full_path = File.join(p, command)
455
554
  if File.file?(full_path)
@@ -473,7 +572,8 @@ require 'bundler/setup'
473
572
  #
474
573
  # So, we're calling 'gem' as a subcommand to discovery the
475
574
  # actual bindir
476
- bindir = IO.popen(env_for_child, [Gem.ruby, '-e', 'puts "#{Gem.user_dir}/bin"']).read
575
+ bindir = IO.popen(env_for_child,
576
+ [Gem.ruby, '-e', 'puts "#{Gem.user_dir}/bin"']).read
477
577
  if bindir
478
578
  @gem_bindir = bindir.chomp
479
579
  else
@@ -483,7 +583,9 @@ require 'bundler/setup'
483
583
 
484
584
  def install
485
585
  if ENV['BUNDLER_GEMFILE']
486
- raise "cannot run autoproj_install or autoproj_bootstrap while under a 'bundler exec' subcommand or having loaded an env.sh. Open a new console and try again"
586
+ raise "cannot run autoproj_install or autoproj_bootstrap while "\
587
+ "under a 'bundler exec' subcommand or having loaded an env.sh. "\
588
+ "Open a new console and try again"
487
589
  end
488
590
 
489
591
  gem_program = self.class.guess_gem_program
@@ -513,7 +615,7 @@ require 'bundler/setup'
513
615
 
514
616
  def load_config
515
617
  v1_config_path = File.join(root_dir, 'autoproj', 'config.yml')
516
-
618
+
517
619
  config = Hash.new
518
620
  if File.file?(v1_config_path)
519
621
  config.merge!(YAML.load(File.read(v1_config_path)) || Hash.new)
@@ -527,7 +629,10 @@ require 'bundler/setup'
527
629
  ruby_executable = File.join(ruby_bindir, ruby)
528
630
  if current = config['ruby_executable'] # When upgrading or reinstalling
529
631
  if current != ruby_executable
530
- raise "this workspace has already been initialized using #{current}, you cannot run autoproj install with #{ruby_executable}. If you know what you're doing, delete the ruby_executable line in config.yml and try again"
632
+ raise "this workspace has already been initialized using "\
633
+ "#{current}, you cannot run autoproj install with "\
634
+ "#{ruby_executable}. If you know what you're doing, "\
635
+ "delete the ruby_executable line in config.yml and try again"
531
636
  end
532
637
  else
533
638
  config['ruby_executable'] = ruby_executable
@@ -586,14 +691,16 @@ require 'bundler/setup'
586
691
  save_env_sh(*vars)
587
692
  puts "running 'autoproj envsh' to generate a proper env.sh"
588
693
  if !system(Gem.ruby, autoproj_path, 'envsh', *autoproj_options)
589
- STDERR.puts "failed to run autoproj envsh on the newly installed autoproj (#{autoproj_path})"
694
+ STDERR.puts "failed to run autoproj envsh on the newly installed "\
695
+ "autoproj (#{autoproj_path})"
590
696
  exit 1
591
697
  end
592
698
  # This is really needed on an existing install to install the
593
699
  # gems that were present in the v1 layout
594
700
  puts "running 'autoproj osdeps' to re-install missing gems"
595
701
  if !system(Gem.ruby, autoproj_path, 'osdeps')
596
- STDERR.puts "failed to run autoproj osdeps on the newly installed autoproj (#{autoproj_path})"
702
+ STDERR.puts "failed to run autoproj osdeps on the newly installed "\
703
+ "autoproj (#{autoproj_path})"
597
704
  exit 1
598
705
  end
599
706
  end
@@ -602,7 +709,6 @@ require 'bundler/setup'
602
709
  end
603
710
 
604
711
 
605
-
606
712
  ENV.delete('BUNDLE_GEMFILE')
607
713
  ENV.delete('RUBYLIB')
608
714
  ops = Autoproj::Ops::Install.new(Dir.pwd)