From 5b0abba9317f206913cf2e599d0dac7e9dbd0baa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= Date: Wed, 21 Apr 2021 13:54:29 +0200 Subject: Sync bundler & rubygems --- spec/bundler/support/artifice/compact_index.rb | 4 +-- ...index_partial_update_no_etag_not_incremental.rb | 40 ++++++++++++++++++++++ spec/bundler/support/artifice/endpoint.rb | 26 ++++++++++---- spec/bundler/support/artifice/windows.rb | 4 +-- spec/bundler/support/builders.rb | 7 ---- spec/bundler/support/helpers.rb | 4 ++- spec/bundler/support/rubygems_ext.rb | 2 +- 7 files changed, 68 insertions(+), 19 deletions(-) create mode 100644 spec/bundler/support/artifice/compact_index_partial_update_no_etag_not_incremental.rb (limited to 'spec/bundler/support') diff --git a/spec/bundler/support/artifice/compact_index.rb b/spec/bundler/support/artifice/compact_index.rb index 5cf3a79f29..1b314e89ef 100644 --- a/spec/bundler/support/artifice/compact_index.rb +++ b/spec/bundler/support/artifice/compact_index.rb @@ -62,7 +62,7 @@ class CompactIndexAPI < Endpoint body.byteslice(range) end - def gems(gem_repo = GEM_REPO) + def gems(gem_repo = default_gem_repo) @gems ||= {} @gems[gem_repo] ||= begin specs = Bundler::Deprecate.skip_during do @@ -80,7 +80,7 @@ class CompactIndexAPI < Endpoint CompactIndex::Dependency.new(d.name, reqs) end checksum = begin - Digest(:SHA256).file("#{GEM_REPO}/gems/#{spec.original_name}.gem").base64digest + Digest(:SHA256).file("#{gem_repo}/gems/#{spec.original_name}.gem").base64digest rescue StandardError nil end diff --git a/spec/bundler/support/artifice/compact_index_partial_update_no_etag_not_incremental.rb b/spec/bundler/support/artifice/compact_index_partial_update_no_etag_not_incremental.rb new file mode 100644 index 0000000000..acf76dfbf0 --- /dev/null +++ b/spec/bundler/support/artifice/compact_index_partial_update_no_etag_not_incremental.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +require_relative "compact_index" + +Artifice.deactivate + +class CompactIndexPartialUpdateNoEtagNotIncremental < CompactIndexAPI + def partial_update_no_etag + response_body = yield + headers "Surrogate-Control" => "max-age=2592000, stale-while-revalidate=60" + content_type "text/plain" + requested_range_for(response_body) + end + + get "/versions" do + partial_update_no_etag do + file = tmp("versions.list") + FileUtils.rm_f(file) + file = CompactIndex::VersionsFile.new(file.to_s) + file.create(gems) + lines = file.contents([], :calculate_info_checksums => true).split("\n") + name, versions, checksum = lines.last.split(" ") + + # shuffle versions so new versions are not appended to the end + [*lines[0..-2], [name, versions.split(",").reverse.join(","), checksum].join(" ")].join("\n") + end + end + + get "/info/:name" do + partial_update_no_etag do + gem = gems.find {|g| g.name == params[:name] } + lines = CompactIndex.info(gem ? gem.versions : []).split("\n") + + # shuffle versions so new versions are not appended to the end + [lines.first, lines.last, *lines[1..-2]].join("\n") + end + end +end + +Artifice.activate_with(CompactIndexPartialUpdateNoEtagNotIncremental) diff --git a/spec/bundler/support/artifice/endpoint.rb b/spec/bundler/support/artifice/endpoint.rb index 1dc7101389..e0650fa7d5 100644 --- a/spec/bundler/support/artifice/endpoint.rb +++ b/spec/bundler/support/artifice/endpoint.rb @@ -26,7 +26,6 @@ class Endpoint < Sinatra::Base @all_requests ||= [] end - GEM_REPO = Pathname.new(ENV["BUNDLER_SPEC_GEM_REPO"] || Spec::Path.gem_repo1) set :raise_errors, true set :show_exceptions, false @@ -41,7 +40,22 @@ class Endpoint < Sinatra::Base helpers do include Spec::Path - def dependencies_for(gem_names, gem_repo = GEM_REPO) + def default_gem_repo + if ENV["BUNDLER_SPEC_GEM_REPO"] + Pathname.new(ENV["BUNDLER_SPEC_GEM_REPO"]) + else + case request.host + when "gem.repo2" + Spec::Path.gem_repo2 + when "gem.repo3" + Spec::Path.gem_repo3 + else + Spec::Path.gem_repo1 + end + end + end + + def dependencies_for(gem_names, gem_repo = default_gem_repo) return [] if gem_names.nil? || gem_names.empty? all_specs = %w[specs.4.8 prerelease_specs.4.8].map do |filename| @@ -74,11 +88,11 @@ class Endpoint < Sinatra::Base end get "/fetch/actual/gem/:id" do - File.binread("#{GEM_REPO}/quick/Marshal.4.8/#{params[:id]}") + File.binread("#{default_gem_repo}/quick/Marshal.4.8/#{params[:id]}") end get "/gems/:id" do - File.binread("#{GEM_REPO}/gems/#{params[:id]}") + File.binread("#{default_gem_repo}/gems/#{params[:id]}") end get "/api/v1/dependencies" do @@ -86,11 +100,11 @@ class Endpoint < Sinatra::Base end get "/specs.4.8.gz" do - File.binread("#{GEM_REPO}/specs.4.8.gz") + File.binread("#{default_gem_repo}/specs.4.8.gz") end get "/prerelease_specs.4.8.gz" do - File.binread("#{GEM_REPO}/prerelease_specs.4.8.gz") + File.binread("#{default_gem_repo}/prerelease_specs.4.8.gz") end end diff --git a/spec/bundler/support/artifice/windows.rb b/spec/bundler/support/artifice/windows.rb index f5b4baae30..ddbbd62b96 100644 --- a/spec/bundler/support/artifice/windows.rb +++ b/spec/bundler/support/artifice/windows.rb @@ -14,7 +14,7 @@ class Windows < Sinatra::Base set :show_exceptions, false helpers do - def gem_repo + def default_gem_repo Pathname.new(ENV["BUNDLER_SPEC_GEM_REPO"] || Spec::Path.gem_repo1) end end @@ -26,7 +26,7 @@ class Windows < Sinatra::Base files.each do |file| get "/#{file}" do - File.binread gem_repo.join(file) + File.binread default_gem_repo.join(file) end end diff --git a/spec/bundler/support/builders.rb b/spec/bundler/support/builders.rb index d593ced27e..25377d2ac2 100644 --- a/spec/bundler/support/builders.rb +++ b/spec/bundler/support/builders.rb @@ -192,13 +192,6 @@ module Spec update_repo2(&blk) if block_given? end - def build_repo3 - build_repo gem_repo3 do - build_gem "rack" - end - FileUtils.rm_rf Dir[gem_repo3("prerelease*")] - end - # A repo that has no pre-installed gems included. (The caller completely # determines the contents with the block.) def build_repo4(&blk) diff --git a/spec/bundler/support/helpers.rb b/spec/bundler/support/helpers.rb index d896b5276e..6fb0c6cb1c 100644 --- a/spec/bundler/support/helpers.rb +++ b/spec/bundler/support/helpers.rb @@ -87,9 +87,11 @@ module Spec env = options.delete(:env) || {} requires = options.delete(:requires) || [] + realworld = RSpec.current_example.metadata[:realworld] + options[:verbose] = true if options[:verbose].nil? && realworld artifice = options.delete(:artifice) do - if RSpec.current_example.metadata[:realworld] + if realworld "vcr" else "fail" diff --git a/spec/bundler/support/rubygems_ext.rb b/spec/bundler/support/rubygems_ext.rb index ea774429c9..9389543a0f 100644 --- a/spec/bundler/support/rubygems_ext.rb +++ b/spec/bundler/support/rubygems_ext.rb @@ -98,7 +98,7 @@ module Spec gem_activate(gem_name) load Gem.bin_path(gem_name, bin_container) rescue Gem::LoadError => e - abort "We couln't activate #{gem_name} (#{e.requirement}). Run `gem install #{gem_name}:'#{e.requirement}'`" + abort "We couldn't activate #{gem_name} (#{e.requirement}). Run `gem install #{gem_name}:'#{e.requirement}'`" end def gem_activate(gem_name) -- cgit v1.2.3