+++ /dev/null
-#!/usr/bin/env bash
-#
-# This is a wrapper to properly execute Vagrant within the embedded
-# Vagrant installation directory. This sets up proper environmental variables
-# so that everything loads and compiles to proper directories.
-
-VAGRANT_DIR="$( ruby -e 'print Gem::default_path[-1] + "/gems/vagrant-1.8.1"' )"
-
-# Export GEM_HOME based on VAGRANT_HOME
-#
-# This needs to be set because Bundler includes gem paths
-# from RubyGems' Gem.paths.
-if [ -z $VAGRANT_HOME ]; then
- VAGRANT_HOME=$(eval echo "~/.vagrant.d")
-fi
-export GEM_HOME="$VAGRANT_HOME/gems"
-
-# SSL certs
-export SSL_CERT_FILE="/etc/ssl/certs/ca-certificates.crt"
-
-# Export an environmental variable to say we're in a Vagrant
-# installer created environment.
-export VAGRANT_INSTALLER_ENV=1
-
-# This is currently used only in Vagrant::Plugin::Manager.system_plugins_file
-# to locate plugins configuration file.
-export VAGRANT_INSTALLER_EMBEDDED_DIR="/var/lib/vagrant"
-export VAGRANT_INSTALLER_VERSION="2"
-
-# Determine the OS that we're on, which is used in some later checks.
-# It is very important we do this _before_ setting the PATH below
-# because uname dependencies can conflict on some platforms.
-OS=$(uname -s 2>/dev/null)
-
-# Export the OS as an environmental variable that Vagrant can access
-# so that it can behave better.
-export VAGRANT_DETECTED_OS="${OS}"
-
-VAGRANT_EXECUTABLE="${VAGRANT_DIR}/bin/vagrant"
-VAGRANT_LAUNCHER="${VAGRANT_DIR}/lib/vagrant/pre-rubygems.rb"
-
-# Export the VAGRANT_EXECUTABLE so that pre-rubygems can optimize a bit
-export VAGRANT_EXECUTABLE
-
-# Call the actual Vagrant bin with our arguments
-exec ruby "${VAGRANT_LAUNCHER}" "$@"
+++ /dev/null
-diff --git a/bin/vagrant b/bin/vagrant
-index fce68c8..781fc63 100755
---- a/bin/vagrant
-+++ b/bin/vagrant
-@@ -69,6 +69,11 @@ end
- require "bundler"
- begin
- $vagrant_bundler_runtime = Bundler.setup(:default, :plugins)
-+# Invalidate the cached Gemfile.lock if necessary and try again
-+rescue Bundler::GemNotFound
-+ FileUtils.rm File.expand_path("~/.vagrant.d/Gemfile") if File.exists? File.expand_path("~/.vagrant.d/Gemfile")
-+ FileUtils.rm File.expand_path("~/.vagrant.d/Gemfile.lock") if File.exists? File.expand_path("~/.vagrant.d/Gemfile.lock")
-+ $vagrant_bundler_runtime = Bundler.setup(:default, :plugins)
- rescue Bundler::GemNotFound
- $stderr.puts "Bundler, the underlying system used to manage Vagrant plugins,"
- $stderr.puts "is reporting that a plugin or its dependency can't be found."
-diff --git a/lib/vagrant/bundler.rb b/lib/vagrant/bundler.rb
-index ea8c056..0543963 100644
---- a/lib/vagrant/bundler.rb
-+++ b/lib/vagrant/bundler.rb
-@@ -63,6 +63,13 @@ module Vagrant
- @configfile = File.open(Tempfile.new("vagrant").path + "1", "w+")
- @configfile.close
-
-+ # Ensure the path to user's Gemfile exists
-+ gemfile = Vagrant.user_data_path.join("Gemfile")
-+ unless File.exists? gemfile
-+ FileUtils.mkdir_p(File.dirname(gemfile))
-+ File.open(gemfile, 'w') {}
-+ end
-+
- # Build up the Gemfile for our Bundler context. We make sure to
- # lock Vagrant to our current Vagrant version. In addition to that,
- # we add all our plugin dependencies.
-@@ -141,7 +148,7 @@ module Vagrant
-
- # Clean removes any unused gems.
- def clean(plugins)
-- gemfile = build_gemfile(plugins)
-+ gemfile = build_gemfile(plugins, false, true)
- lockfile = "#{gemfile.path}.lock"
- definition = ::Bundler::Definition.build(gemfile, lockfile, nil)
- root = File.dirname(gemfile.path)
-@@ -172,11 +179,24 @@ module Vagrant
- # Builds a valid Gemfile for use with Bundler given the list of
- # plugins.
- #
-+ # @param [Hash|Bool] update Hash of gems to update or true for all
-+ # @param [Bool] invalidate Invalidate Gemfile.lock
- # @return [Tempfile]
-- def build_gemfile(plugins)
-+ def build_gemfile(plugins, update = false, invalidate = false)
- sources = plugins.values.map { |p| p["sources"] }.flatten.compact.uniq
-
-- f = File.open(Tempfile.new("vagrant").path + "2", "w+")
-+ # Determine what gems to update
-+ if update.is_a? Hash
-+ update_gems = update[:gems]
-+ elsif update === true
-+ update_gems = plugins.map{ |p| p[0] }
-+ else
-+ update_gems = []
-+ end
-+
-+ gemfile = Vagrant.user_data_path.join("Gemfile")
-+ f = File.open(gemfile, "w+")
-+
- f.tap do |gemfile|
- if !sources.include?("http://rubygems.org")
- gemfile.puts(%Q[source "https://rubygems.org"])
-@@ -190,6 +210,19 @@ module Vagrant
-
- gemfile.puts(%Q[gemspec :path => "#{File.expand_path '../../..', __FILE__}"])
-
-+ locked_gems = []
-+
-+ # Use Gemfile.lock to lock the gem versions
-+ if ENV["VAGRANT_INTERNAL_BUNDLERIZED"] && File.exist?("#{gemfile.path}.lock") && !invalidate
-+ lockfile = ::Bundler::LockfileParser.new(::Bundler.read_file("#{gemfile.path}.lock"))
-+ lockfile.specs.each do |s|
-+ if s.name != 'vagrant' && !(update_gems.include? s.name)
-+ gemfile.puts(%Q[gem "#{s.name}", "#{s.version.to_s}"])
-+ end
-+ end
-+ locked_gems = lockfile.specs.map(&:name) - update_gems
-+ end
-+
- gemfile.puts("group :plugins do")
- plugins.each do |name, plugin|
- version = plugin["gem_version"]
-@@ -199,13 +232,19 @@ module Vagrant
- if plugin["require"] && plugin["require"] != ""
- opts[:require] = plugin["require"]
- end
--
-- gemfile.puts(%Q[gem "#{name}", #{version.inspect}, #{opts.inspect}])
-+ gemfile.puts(%Q[gem "#{name}", #{version.inspect}, #{opts.inspect}]) unless locked_gems.include? name
- end
- gemfile.puts("end")
--
- gemfile.close
- end
-+
-+ # Create Gemfile.lock if missing and re-generate Gemfile
-+ if !File.exist?("#{f.path}.lock") && File.exist?(f.path)
-+ lockfile = "#{f.path}.lock"
-+ ENV['BUNDLE_GEMFILE'] = f.path
-+ definition = ::Bundler::Definition.build(f.path, lockfile, false)
-+ end
-+ f
- end
-
- # This installs a set of plugins and optionally updates those gems.
-@@ -215,7 +254,7 @@ module Vagrant
- # can be a hash of options. See Bundler.definition.
- # @return [Array<Gem::Specification>]
- def internal_install(plugins, update, **extra)
-- gemfile = build_gemfile(plugins)
-+ gemfile = build_gemfile(plugins, update)
- lockfile = "#{gemfile.path}.lock"
- definition = ::Bundler::Definition.build(gemfile, lockfile, update)
- root = File.dirname(gemfile.path)
+++ /dev/null
-# Copyright 1999-2016 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Id$
-
-EAPI="5"
-USE_RUBY="ruby20 ruby21"
-
-RUBY_FAKEGEM_EXTRADOC="CHANGELOG.md README.md"
-RUBY_FAKEGEM_GEMSPEC="vagrant.gemspec"
-RUBY_FAKEGEM_EXTRAINSTALL="keys plugins templates version.txt"
-RUBY_FAKEGEM_TASK_DOC=""
-
-inherit bash-completion-r1 ruby-fakegem eutils
-
-DESCRIPTION="A tool for building and distributing development environments"
-HOMEPAGE="http://vagrantup.com/"
-SRC_URI="https://github.com/mitchellh/vagrant/archive/v${PV}.tar.gz -> ${P}.tar.gz"
-
-LICENSE="MIT"
-SLOT="0"
-KEYWORDS="~amd64 ~x86"
-IUSE="+virtualbox"
-
-RDEPEND="${RDEPEND}
- app-arch/libarchive
- net-misc/curl
- virtualbox? ( || ( <app-emulation/virtualbox-5.1 <app-emulation/virtualbox-bin-5.1 ) )"
-
-ruby_add_rdepend "
- >=dev-ruby/bundler-1.5.2 <=dev-ruby/bundler-1.10.6
- >=dev-ruby/childprocess-0.5.0
- >=dev-ruby/erubis-2.7.0
- >=dev-ruby/i18n-0.6.0:* <dev-ruby/i18n-0.8.0:*
- >=dev-ruby/listen-3.0.2
- >=dev-ruby/hashicorp-checkpoint-0.1.1
- >=dev-ruby/log4r-1.1.9 <dev-ruby/log4r-1.1.11
- >=dev-ruby/net-ssh-3.0.1
- >=dev-ruby/net-sftp-2.1
- >=dev-ruby/net-scp-1.1.0
- >=dev-ruby/rest-client-1.6.0:0
- >=dev-ruby/nokogiri-1.6.3.1
- >=dev-ruby/mime-types-2.6.2:* <dev-ruby/mime-types-3:*
-"
-
-ruby_add_bdepend "
- dev-ruby/rake
-"
-
-all_ruby_prepare() {
- # remove bundler support
- sed -i '/[Bb]undler/d' Rakefile || die
- rm Gemfile || die
-
- # loosen dependencies
- sed -e '/hashicorp-checkpoint\|listen\|net-ssh\|net-scp/s/~>/>=/' \
- -e '/nokogiri/s/=/>=/' \
- -i ${PN}.gemspec || die
-
- # remove windows-specific gems
- sed -e '/wdm\|winrm/d' \
- -i ${PN}.gemspec || die
-
- # remove bsd-specific gems
- sed -e '/rb-kqueue/d' \
- -i ${PN}.gemspec || die
-
- # see https://github.com/mitchellh/vagrant/pull/5877
- epatch "${FILESDIR}"/${P}-install-plugins-in-isolation.patch
-
- # disable embedded CA certs and use system ones
- epatch "${FILESDIR}"/${P}-disable-embedded-cacert.patch
-
- # fix rvm issue (bug #474476)
- epatch "${FILESDIR}"/${P}-rvm.patch
-}
-
-all_ruby_install() {
- newbashcomp contrib/bash/completion.sh ${PN}
- all_fakegem_install
-
- # provide executable similar to upstream:
- # https://github.com/mitchellh/vagrant-installers/blob/master/substrate/modules/vagrant_installer/templates/vagrant.erb
- newbin "${FILESDIR}/${P}" "${PN}"
-
- # directory for plugins.json
- dodir /var/lib/vagrant
-}