From fc00d362bd7b46edb1229045499c911a1d8bceb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= Date: Sun, 27 Sep 2020 14:39:43 +0200 Subject: [PATCH 1/4] Simplify setting the `remote` property of request set Set it unconditionally from the dependency installer. --- lib/rubygems/dependency_installer.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb index 54ecd1c5af9c..d0080451864f 100644 --- a/lib/rubygems/dependency_installer.rb +++ b/lib/rubygems/dependency_installer.rb @@ -283,7 +283,7 @@ def resolve_dependencies(dep_or_name, version) # :nodoc: request_set.development_shallow = @dev_shallow request_set.soft_missing = @force request_set.prerelease = @prerelease - request_set.remote = false unless consider_remote? + request_set.remote = consider_remote? installer_set = Gem::Resolver::InstallerSet.new @domain installer_set.ignore_installed = @only_install_dir From 64822f8f2ce4b426c73fa34531da58cf61841d59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= Date: Sun, 27 Sep 2020 14:41:46 +0200 Subject: [PATCH 2/4] Transmit the `remote` property from the installer set I plan to modify it there, so the correct value will be transmitted now. --- lib/rubygems/dependency_installer.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb index d0080451864f..a3e1f0941627 100644 --- a/lib/rubygems/dependency_installer.rb +++ b/lib/rubygems/dependency_installer.rb @@ -283,7 +283,6 @@ def resolve_dependencies(dep_or_name, version) # :nodoc: request_set.development_shallow = @dev_shallow request_set.soft_missing = @force request_set.prerelease = @prerelease - request_set.remote = consider_remote? installer_set = Gem::Resolver::InstallerSet.new @domain installer_set.ignore_installed = @only_install_dir @@ -321,6 +320,7 @@ def resolve_dependencies(dep_or_name, version) # :nodoc: installer_set.add_always_install dependency request_set.always_install = installer_set.always_install + request_set.remote = installer_set.consider_remote? if @ignore_dependencies installer_set.ignore_dependencies = true From 09719ffa8a11257bda97da10c4478636ede04d16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= Date: Sun, 27 Sep 2020 16:34:22 +0200 Subject: [PATCH 3/4] Remove unused `@remote` property from `InstallerSet` --- lib/rubygems/resolver/installer_set.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/rubygems/resolver/installer_set.rb b/lib/rubygems/resolver/installer_set.rb index 4b29bfb199b1..b0e4ce5a3725 100644 --- a/lib/rubygems/resolver/installer_set.rb +++ b/lib/rubygems/resolver/installer_set.rb @@ -32,7 +32,6 @@ def initialize(domain) super() @domain = domain - @remote = consider_remote? @f = Gem::SpecFetcher.fetcher From 5608aeb7f873ffcab081b20535f966747147c363 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= Date: Sun, 27 Sep 2020 14:49:56 +0200 Subject: [PATCH 4/4] Don't hit the network if installing a local gemspec with no dependencies --- .github/workflows/install-rubygems.yml | 9 +++++++++ lib/rubygems/dependency_installer.rb | 1 + 2 files changed, 10 insertions(+) diff --git a/.github/workflows/install-rubygems.yml b/.github/workflows/install-rubygems.yml index dcd3267644de..7c0689f7cf15 100644 --- a/.github/workflows/install-rubygems.yml +++ b/.github/workflows/install-rubygems.yml @@ -41,4 +41,13 @@ jobs: run: bundle --version - name: Check bundler man pages were installed and are properly picked up run: bundle install --help | grep -q BUNDLE-INSTALL + - name: Build bundler + run: gem build bundler.gemspec + working-directory: ./bundler + - name: Install built bundler + run: gem install bundler-*.gem --verbose > output.txt + working-directory: ./bundler + - name: Check bundler install didn't hit the network + run: if grep -q 'GET http' output.txt; then false; else true; fi + working-directory: ./bundler timeout-minutes: 10 diff --git a/lib/rubygems/dependency_installer.rb b/lib/rubygems/dependency_installer.rb index a3e1f0941627..34ab10404b8a 100644 --- a/lib/rubygems/dependency_installer.rb +++ b/lib/rubygems/dependency_installer.rb @@ -306,6 +306,7 @@ def resolve_dependencies(dep_or_name, version) # :nodoc: dependency = if spec = installer_set.local?(dep_or_name) + installer_set.remote = nil if spec.dependencies.none? Gem::Dependency.new spec.name, version elsif String === dep_or_name Gem::Dependency.new dep_or_name, version