diff options
Diffstat (limited to 'packages/vagrant/0001-Revert-Merge-pull-request-12225-from-chrisroberts-re.patch')
| -rw-r--r-- | packages/vagrant/0001-Revert-Merge-pull-request-12225-from-chrisroberts-re.patch | 349 | 
1 files changed, 349 insertions, 0 deletions
| diff --git a/packages/vagrant/0001-Revert-Merge-pull-request-12225-from-chrisroberts-re.patch b/packages/vagrant/0001-Revert-Merge-pull-request-12225-from-chrisroberts-re.patch new file mode 100644 index 0000000..ae0b3f3 --- /dev/null +++ b/packages/vagrant/0001-Revert-Merge-pull-request-12225-from-chrisroberts-re.patch @@ -0,0 +1,349 @@ +From dc7156d8951242231cfd9142b3d5628815dc6589 Mon Sep 17 00:00:00 2001 +From: Maximilian Bosch <maximilian@mbosch.me> +Date: Wed, 31 Mar 2021 14:30:01 +0200 +Subject: [PATCH] Revert "Merge pull request #12225 from + chrisroberts/resolution-isolation" + +This reverts commit 8a69d0c4dae035a4b1aa789bc4ec3db69c210df2, reversing +changes made to 5dd0a8c8acc36b654c13a5102e4327eedf1858f2. + +----- + +Rationale: NixOS-specific patch. The changes in here break our current +implementation of declarative plugins (only `vagrant-libvirt` atm). +--- + bin/vagrant                       | 28 +-------------- + lib/vagrant.rb                    |  2 +- + lib/vagrant/bundler.rb            | 17 +++------ + lib/vagrant/errors.rb             | 12 ------- + lib/vagrant/plugin/manager.rb     | 22 ++---------- + templates/locales/en.yml          | 23 ++---------- + test/unit/bin/vagrant_test.rb     |  1 - + test/unit/vagrant/bundler_test.rb | 58 ++++++++++++++----------------- + 8 files changed, 39 insertions(+), 124 deletions(-) + +diff --git a/bin/vagrant b/bin/vagrant +index c019f30ff..ba7e40076 100755 +--- a/bin/vagrant ++++ b/bin/vagrant +@@ -23,9 +23,9 @@ if idx = argv.index("--") +   argv = argv.slice(0, idx) + end +  +-require_relative "../lib/vagrant/version" + # Fast path the version of Vagrant + if argv.include?("-v") || argv.include?("--version") ++  require_relative "../lib/vagrant/version" +   puts "Vagrant #{Vagrant::VERSION}" +   exit 0 + end +@@ -82,29 +82,6 @@ end + $stdout.sync = true + $stderr.sync = true +  +-# Before we start activate all our dependencies +-# so we can provide correct resolutions later +-builtin_specs = [] +- +-vagrant_spec = Gem::Specification.find_all_by_name("vagrant").detect do |spec| +-  spec.version == Gem::Version.new(Vagrant::VERSION) +-end +- +-dep_activator = proc do |spec| +-  spec.runtime_dependencies.each do |dep| +-    gem(dep.name, *dep.requirement.as_list) +-    dep_spec = Gem::Specification.find_all_by_name(dep.name).detect(&:activated?) +-    if dep_spec +-      builtin_specs << dep_spec +-      dep_activator.call(dep_spec) +-    end +-  end +-end +- +-if vagrant_spec +-  dep_activator.call(vagrant_spec) +-end +- + env = nil + begin +   require 'log4r' +@@ -114,9 +91,6 @@ begin +   require 'vagrant/util/platform' +   require 'vagrant/util/experimental' +  +-  # Set our list of builtin specs +-  Vagrant::Bundler.instance.builtin_specs = builtin_specs +- +   # Schedule the cleanup of things +   at_exit(&Vagrant::Bundler.instance.method(:deinit)) +  +diff --git a/lib/vagrant.rb b/lib/vagrant.rb +index f790039d3..97e67e3b8 100644 +--- a/lib/vagrant.rb ++++ b/lib/vagrant.rb +@@ -59,7 +59,7 @@ require "vagrant/plugin/manager" + # See https://github.com/rest-client/rest-client/issues/34#issuecomment-290858 + # for more information + class VagrantLogger < Log4r::Logger +-  def << msg ++  def << (msg) +     debug(msg.strip) +   end + end +diff --git a/lib/vagrant/bundler.rb b/lib/vagrant/bundler.rb +index eb2caabb0..d75f54362 100644 +--- a/lib/vagrant/bundler.rb ++++ b/lib/vagrant/bundler.rb +@@ -189,11 +189,8 @@ module Vagrant +     attr_reader :env_plugin_gem_path +     # @return [Pathname] Vagrant environment data path +     attr_reader :environment_data_path +-    # @return [Array<Gem::Specification>, nil] List of builtin specs +-    attr_accessor :builtin_specs +  +     def initialize +-      @builtin_specs = [] +       @plugin_gem_path = Vagrant.user_data_path.join("gems", RUBY_VERSION).freeze +       @logger = Log4r::Logger.new("vagrant::bundler") +     end +@@ -290,6 +287,7 @@ module Vagrant +         # Never allow dependencies to be remotely satisfied during init +         request_set.remote = false +  ++        repair_result = nil +         begin +           @logger.debug("resolving solution from available specification set") +           # Resolve the request set to ensure proper activation order +@@ -652,6 +650,7 @@ module Vagrant +         self_spec.activate +         @logger.info("Activated vagrant specification version - #{self_spec.version}") +       end ++      self_spec.runtime_dependencies.each { |d| gem d.name, *d.requirement.as_list } +       # discover all the gems we have available +       list = {} +       if Gem.respond_to?(:default_specifications_dir) +@@ -660,16 +659,10 @@ module Vagrant +         spec_dir = Gem::Specification.default_specifications_dir +       end +       directories = [spec_dir] +-      if Vagrant.in_bundler? +-        Gem::Specification.find_all{true}.each do |spec| +-          list[spec.full_name] = spec +-        end +-      else +-        builtin_specs.each do |spec| +-          list[spec.full_name] = spec +-        end ++      Gem::Specification.find_all{true}.each do |spec| ++        list[spec.full_name] = spec +       end +-      if Vagrant.in_installer? ++      if(!Object.const_defined?(:Bundler)) +         directories += Gem::Specification.dirs.find_all do |path| +           !path.start_with?(Gem.user_dir) +         end +diff --git a/lib/vagrant/errors.rb b/lib/vagrant/errors.rb +index 5cb861c06..782615bc4 100644 +--- a/lib/vagrant/errors.rb ++++ b/lib/vagrant/errors.rb +@@ -636,18 +636,6 @@ module Vagrant +       error_key(:provisioner_winrm_unsupported) +     end +  +-    class PluginNeedsDeveloperTools < VagrantError +-      error_key(:plugin_needs_developer_tools) +-    end +- +-    class PluginMissingLibrary < VagrantError +-      error_key(:plugin_missing_library) +-    end +- +-    class PluginMissingRubyDev < VagrantError +-      error_key(:plugin_missing_ruby_dev) +-    end +- +     class PluginGemNotFound < VagrantError +       error_key(:plugin_gem_not_found) +     end +diff --git a/lib/vagrant/plugin/manager.rb b/lib/vagrant/plugin/manager.rb +index b73f07f9c..9058e68b3 100644 +--- a/lib/vagrant/plugin/manager.rb ++++ b/lib/vagrant/plugin/manager.rb +@@ -179,26 +179,8 @@ module Vagrant +         result +       rescue Gem::GemNotFoundException +         raise Errors::PluginGemNotFound, name: name +-      rescue Gem::Exception => err +-        @logger.warn("Failed to install plugin: #{err}") +-        @logger.debug("#{err.class}: #{err}\n#{err.backtrace.join("\n")}") +-        # Try and determine a cause for the failure +-        case err.message +-        when /install development tools first/ +-          raise Errors::PluginNeedsDeveloperTools +-        when /library not found in default locations/ +-          lib = err.message.match(/(\w+) library not found in default locations/) +-          if lib.nil? +-            raise Errors::BundlerError, message: err.message +-          end +-          raise Errors::PluginMissingLibrary, +-            library: lib.captures.first, +-            name: name +-        when /find header files for ruby/ +-          raise Errors::PluginMissingRubyDev +-        else +-          raise Errors::BundlerError, message: err.message +-        end ++      rescue Gem::Exception => e ++        raise Errors::BundlerError, message: e.to_s +       end +  +       # Uninstalls the plugin with the given name. +diff --git a/templates/locales/en.yml b/templates/locales/en.yml +index edae9b477..782904f49 100644 +--- a/templates/locales/en.yml ++++ b/templates/locales/en.yml +@@ -794,9 +794,9 @@ en: +         matching this provider. For example, if you're using VirtualBox, +         the clone environment must also be using VirtualBox. +       cloud_init_not_found: |- +-        cloud-init is not found. Please ensure that cloud-init is installed and ++        cloud-init is not found. Please ensure that cloud-init is installed and  +         available on path for guest '%{guest_name}'. +-      cloud_init_command_failed: |- ++      cloud_init_command_failed: |-  +         cloud init command '%{cmd}' failed on guest '%{guest_name}'. +       command_deprecated: |- +         The command 'vagrant %{name}' has been deprecated and is no longer functional +@@ -1245,30 +1245,6 @@ en: +         following command: +  +           vagrant plugin install --local +-      plugin_needs_developer_tools: |- +-        Vagrant failed to install the requested plugin because development tools +-        are required for installation but are not currently installed on this +-        machine. Please install development tools and then try this command +-        again. +-      plugin_missing_library: |- +-        Vagrant failed to install the requested plugin because it depends +-        on development files for a library which is not currently installed +-        on this system. The following library is required by the '%{name}' +-        plugin: +- +-          %{library} +- +-        If a package manager is used on this system, please install the development +-        package for the library. The name of the package will be similar to: +- +-          %{library}-dev or %{library}-devel +- +-        After the library and development files have been installed, please +-        run the command again. +-      plugin_missing_ruby_dev: |- +-        Vagrant failed to install the requested plugin because the Ruby header +-        files could not be found. Install the ruby development package for your +-        system and then run this command again. +       powershell_not_found: |- +         Failed to locate the powershell executable on the available PATH. Please +         ensure powershell is installed and available on the local PATH, then +@@ -3015,7 +2998,7 @@ en: +     pushes: +       file: +         no_destination: "File destination must be specified." +- ++     +     autocomplete: +       installed: |- +         Autocomplete installed at paths: +diff --git a/test/unit/bin/vagrant_test.rb b/test/unit/bin/vagrant_test.rb +index dbbd52112..bc11309aa 100644 +--- a/test/unit/bin/vagrant_test.rb ++++ b/test/unit/bin/vagrant_test.rb +@@ -30,7 +30,6 @@ describe "vagrant bin" do +     allow(Kernel).to receive(:exit) +     allow(Vagrant::Environment).to receive(:new).and_return(env) +     allow(Vagrant).to receive(:in_installer?).and_return(true) +-    allow(self).to receive(:require_relative) +   end +  +   after { expect(run_vagrant).to eq(exit_code) } +diff --git a/test/unit/vagrant/bundler_test.rb b/test/unit/vagrant/bundler_test.rb +index 69f425c66..00cedc021 100644 +--- a/test/unit/vagrant/bundler_test.rb ++++ b/test/unit/vagrant/bundler_test.rb +@@ -778,46 +778,42 @@ describe Vagrant::Bundler do +       end +     end +  +-    context "when bundler is not defined" do +-      before { expect(Vagrant).to receive(:in_bundler?).and_return(false) } ++    context "when run time dependencies are defined" do ++      let(:vagrant_dep_specs) { [double("spec", name: "vagrant-dep", requirement: double("spec-req", as_list: []))] } +  +-      context "when running inside the installer" do +-        before { expect(Vagrant).to receive(:in_installer?).and_return(true) } ++      it "should call #gem to activate the dependencies" do ++        expect(subject).to receive(:gem).with("vagrant-dep", any_args) ++        subject.send(:vagrant_internal_specs) ++      end ++    end +  +-        it "should load gem specification directories" do +-          expect(Gem::Specification).to receive(:dirs).and_return(spec_dirs) +-          subject.send(:vagrant_internal_specs) +-        end ++    context "when bundler is not defined" do ++      before { expect(Object).to receive(:const_defined?).with(:Bundler).and_return(false) } +  +-        context "when checking paths" do +-          let(:spec_dirs) { [double("spec-dir", start_with?: in_user_dir)] } +-          let(:in_user_dir) { true } +-          let(:user_dir) { double("user-dir") } ++      it "should load gem specification directories" do ++        expect(Gem::Specification).to receive(:dirs).and_return(spec_dirs) ++        subject.send(:vagrant_internal_specs) ++      end +  +-          before { allow(Gem).to receive(:user_dir).and_return(user_dir) } ++      context "when checking paths" do ++        let(:spec_dirs) { [double("spec-dir", start_with?: in_user_dir)] } ++        let(:in_user_dir) { true } ++        let(:user_dir) { double("user-dir") } +  +-          it "should check if path is within local user directory" do +-            expect(spec_dirs.first).to receive(:start_with?).with(user_dir).and_return(false) +-            subject.send(:vagrant_internal_specs) +-          end +- +-          context "when path is not within user directory" do +-            let(:in_user_dir) { false } ++        before { allow(Gem).to receive(:user_dir).and_return(user_dir) } +  +-            it "should use path when loading specs" do +-              expect(Gem::Specification).to receive(:each_spec) { |arg| expect(arg).to include(spec_dirs.first) } +-              subject.send(:vagrant_internal_specs) +-            end +-          end ++        it "should check if path is within local user directory" do ++          expect(spec_dirs.first).to receive(:start_with?).with(user_dir).and_return(false) ++          subject.send(:vagrant_internal_specs) +         end +-      end +  +-      context "when running outside the installer" do +-        before { expect(Vagrant).to receive(:in_installer?).and_return(false) } ++        context "when path is not within user directory" do ++          let(:in_user_dir) { false } +  +-        it "should not load gem specification directories" do +-          expect(Gem::Specification).not_to receive(:dirs) +-          subject.send(:vagrant_internal_specs) ++          it "should use path when loading specs" do ++            expect(Gem::Specification).to receive(:each_spec) { |arg| expect(arg).to include(spec_dirs.first) } ++            subject.send(:vagrant_internal_specs) ++          end +         end +       end +     end +--  +2.29.3 + | 
