bin/autoproj_install in autoproj-2.0.0.rc27 vs bin/autoproj_install in autoproj-2.0.0.rc28
- old
+ new
@@ -202,17 +202,17 @@
opt.on '--public', "install gems in the default RubyGems locations. Consider using this if you don't have a v1 install anymore" do
self.private_bundler = false
self.private_autoproj = false
self.private_gems = false
end
- opt.on '--private-bundler[=PATH]', 'install bundler locally in the workspace' do |path|
+ opt.on '--private-bundler[=PATH]', 'install bundler locally in the workspace, or in a dedicated path' do |path|
self.private_bundler = path || true
end
- opt.on '--private-autoproj[=PATH]', 'install autoproj locally in the workspace' do |path|
+ opt.on '--private-autoproj[=PATH]', 'install autoproj locally in the workspace, or in a dedicated path' do |path|
self.private_autoproj = path || true
end
- opt.on '--private-gems[=PATH]', 'install gems locally in the prefix directory' do |path|
+ opt.on '--private-gems[=PATH]', 'install gems locally in the prefix directory, or in a dedicated path' do |path|
self.private_gems = path || true
end
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|
self.private_bundler = path || true
self.private_autoproj = path || true
@@ -222,10 +222,13 @@
@gemfile = default_gemfile_contents(version)
end
opt.on '--gemfile=PATH', String, 'use the given Gemfile to install autoproj instead of the default' do |path|
@gemfile = File.read(path)
end
+ opt.on '--seed-config=PATH', String, 'path to a seed file that should be used to initialize the configuration' do |path|
+ @config.merge!(YAML.load(File.read(path)))
+ end
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
@prefer_indep_over_os_packages = true
end
opt.on '--[no-]color', 'do not use colored output (enabled by default if the terminal supports it)' do |color|
if color then autoproj_options << "--color"
@@ -240,57 +243,45 @@
end
args = options.parse(ARGV)
autoproj_options + args
end
- def install_bundler
- gem_program = guess_gem_program
- puts "Detected 'gem' to be #{gem_program}"
+ def find_bundler(gem_program)
+ result = system(
+ env_for_child.merge('GEM_PATH' => "", 'GEM_HOME' => bundler_gem_home),
+ Gem.ruby, gem_program, 'which', 'bundler/setup',
+ out: '/dev/null')
+ return if !result
+ bundler_path = File.join(bundler_gem_home, 'bin', 'bundler')
+ if File.exist?(bundler_path)
+ bundler_path
+ else
+ STDERR.puts "gem install bundler returned successfully, but still cannot find bundler in #{bundler_path}"
+ nil
+ end
+ end
+
+ def install_bundler(gem_program)
local = ['--local'] if local?
result = system(
env_for_child.merge('GEM_PATH' => "", 'GEM_HOME' => bundler_gem_home),
- Gem.ruby, gem_program, 'install', '--no-document', '--no-format-executable',
+ Gem.ruby, gem_program, 'install', '--env-shebang', '--no-document', '--no-format-executable',
*local,
"--bindir=#{File.join(bundler_gem_home, 'bin')}", 'bundler')
- if result
- File.join(bundler_gem_home, 'bin', 'bundler')
- else
- STDERR.puts "FATAL: failed to install bundler in #{dot_autoproj}"
+ if !result
+ STDERR.puts "FATAL: failed to install bundler in #{bundler_gem_home}"
nil
end
- end
- def find_bundler
- clean_env = env_for_child
- if bundler = find_in_clean_path('bundler', gem_bindir)
- return bundler
- end
-
- clean_path = env_for_child['PATH']
- STDERR.puts "cannot find 'bundler' in PATH=#{clean_path}#{File::PATH_SEPARATOR}#{gem_bindir}"
- STDERR.puts "installing it now ..."
- bundler = install_bundler
- if !bundler
- if ENV['PATH'] != clean_path
- STDERR.puts " it appears that you already have some autoproj-generated env.sh loaded"
- STDERR.puts " - if you are upgrading a v1 install, please contact the autoproj author at https://github.com/rock-core/autoproj/issues/new"
- STDERR.puts " - if you are running a fresh install, try again in a console where the env.sh is not loaded"
- exit 1
- else
- STDERR.puts " you might want to try and install it manually first by running 'gem install bundler'"
- STDERR.puts " or call this command again with --private-bundler to have it installed in the workspace"
- exit 1
- end
- end
-
- if File.exist?(bundler)
- bundler
+ bundler_path = File.join(bundler_gem_home, 'bin', 'bundler')
+ if File.exist?(bundler_path)
+ bundler_path
else
- STDERR.puts "gem install bundler returned successfully, but still cannot find bundler in #{bundler}"
+ STDERR.puts "gem install bundler returned successfully, but still cannot find bundler in #{bundler_path}"
nil
end
end
def install_autoproj(bundler)
@@ -438,24 +429,32 @@
end
FileUtils.chmod 0755, File.join(shim_path, 'ruby')
end
def install
- if private_bundler?
+ if ENV['BUNDLER_GEMFILE']
+ 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"
+ end
+
+ gem_program = guess_gem_program
+ puts "Detected 'gem' to be #{gem_program}"
+
+ if bundler = find_bundler(gem_program)
+ puts "Detected bundler at #{bundler}"
+ else
puts "Installing bundler in #{bundler_gem_home}"
- if !(bundler = install_bundler)
+ if !(bundler = install_bundler(gem_program))
exit 1
end
- env['GEM_PATH'].unshift bundler_gem_home
- elsif bundler = find_bundler
- puts "Detected bundler at #{bundler}"
- else
- exit 1
+ if private_bundler?
+ env['GEM_PATH'].unshift bundler_gem_home
+ end
end
save_ruby_and_bundler_shims(bundler)
env['PATH'].unshift shim_path
save_gemfile
- puts "Installing autoproj in #{dot_autoproj}"
+
+ puts "Installing autoproj#{"in #{autoproj_gem_home}" if private_autoproj?}"
install_autoproj(bundler)
end
def load_config
v1_config_path = File.join(root_dir, 'autoproj', 'config.yml')