diff options
-rw-r--r-- | .travis.yml | 2 | ||||
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | Rakefile | 4 | ||||
-rw-r--r-- | lib/bundler.rb | 11 | ||||
-rw-r--r-- | lib/bundler/cli/exec.rb | 3 | ||||
-rw-r--r-- | lib/bundler/fetcher/base.rb | 2 | ||||
-rw-r--r-- | lib/bundler/ruby_version.rb | 3 | ||||
-rw-r--r-- | lib/bundler/rubygems_integration.rb | 36 | ||||
-rw-r--r-- | lib/bundler/ssl_certs/Fastly.pem | 82 | ||||
-rw-r--r-- | lib/bundler/ssl_certs/GlobalSignOrganizationValidationCA.pem | 26 | ||||
-rw-r--r-- | lib/bundler/ssl_certs/GlobalSignRoot.pem | 18 | ||||
-rw-r--r-- | spec/bundler/bundler_spec.rb | 37 | ||||
-rw-r--r-- | spec/bundler/fetcher/base_spec.rb | 4 | ||||
-rw-r--r-- | spec/bundler/fetcher/downloader_spec.rb | 2 | ||||
-rw-r--r-- | spec/bundler/ruby_version_spec.rb | 22 | ||||
-rw-r--r-- | spec/commands/exec_spec.rb | 4 | ||||
-rw-r--r-- | spec/other/ssl_cert_spec.rb | 1 | ||||
-rw-r--r-- | spec/realworld/edgecases_spec.rb | 2 |
18 files changed, 229 insertions, 31 deletions
diff --git a/.travis.yml b/.travis.yml index 0b6e02744f..9c7ca6ee1c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,7 +39,7 @@ env: # We need to know if changes to rubygems will break bundler on release - RGV=master # Test the latest rubygems release with all of our supported rubies - - RGV=v2.6.0 + - RGV=v2.6.1 - RGV=v2.4.8 matrix: diff --git a/CHANGELOG.md b/CHANGELOG.md index bbeb624023..466e423815 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -230,6 +230,7 @@ Bugfixes: - allow `viz` to work with prereleases (#3621, #3217, @aprescott) - validate gemspecs used in path and git gems (#3639, @segiddins, @indirect) - stop printing config warnings when config is unchanged (#3649, @fotanus, @indirect) + - Without groups saved via `config` are no longer ignored when the `--without` flag is used ## 1.10.0.pre.2 (2015-05-07) @@ -65,7 +65,7 @@ namespace :spec do sh "sudo apt-get install graphviz -y 2>&1 | tail -n 2" # Install the gems with a consistent version of RubyGems - sh "gem update --system 2.6.0" + sh "gem update --system 2.6.1" $LOAD_PATH.unshift("./spec") require "support/rubygems_ext" @@ -122,7 +122,7 @@ begin rubyopt = ENV["RUBYOPT"] # When editing this list, also edit .travis.yml! branches = %w(master) - releases = %w(v1.3.6 v1.3.7 v1.4.2 v1.5.3 v1.6.2 v1.7.2 v1.8.29 v2.0.14 v2.1.11 v2.2.5 v2.4.8 v2.6.0) + releases = %w(v1.3.6 v1.3.7 v1.4.2 v1.5.3 v1.6.2 v1.7.2 v1.8.29 v2.0.14 v2.1.11 v2.2.5 v2.4.8 v2.6.1) (branches + releases).each do |rg| desc "Run specs with Rubygems #{rg}" RSpec::Core::RakeTask.new(rg) do |t| diff --git a/lib/bundler.rb b/lib/bundler.rb index 2958e64cee..dcb151b058 100644 --- a/lib/bundler.rb +++ b/lib/bundler.rb @@ -303,12 +303,13 @@ module Bundler def which(executable) if File.file?(executable) && File.executable?(executable) executable - elsif path = ENV["PATH"] - executable_path = path.split(File::PATH_SEPARATOR).find do |p| - abs_path = File.join(p, executable) - File.file?(abs_path) && File.executable?(abs_path) + elsif paths = ENV["PATH"] + quote = '"'.freeze + paths.split(File::PATH_SEPARATOR).find do |path| + path = path[1..-2] if path.start_with?(quote) && path.end_with?(quote) + executable_path = File.expand_path(executable, path) + return executable_path if File.file?(executable_path) && File.executable?(executable_path) end - executable_path && File.expand_path(executable, executable_path) end end diff --git a/lib/bundler/cli/exec.rb b/lib/bundler/cli/exec.rb index 865ac20248..9162d54913 100644 --- a/lib/bundler/cli/exec.rb +++ b/lib/bundler/cli/exec.rb @@ -21,7 +21,7 @@ module Bundler validate_cmd! SharedHelpers.set_bundle_environment if bin_path = Bundler.which(cmd) - kernel_load(bin_path, *args) && return if ruby_shebang?(bin_path) + kernel_load(bin_path, *args) if ruby_shebang?(bin_path) # First, try to exec directly to something in PATH kernel_exec([bin_path, cmd], *args) else @@ -61,6 +61,7 @@ module Bundler Bundler.ui = nil require "bundler/setup" Kernel.load(file) + exit rescue SystemExit raise rescue Exception => e # rubocop:disable Lint/RescueException diff --git a/lib/bundler/fetcher/base.rb b/lib/bundler/fetcher/base.rb index f7210bd03d..6714ea2cd7 100644 --- a/lib/bundler/fetcher/base.rb +++ b/lib/bundler/fetcher/base.rb @@ -21,7 +21,7 @@ module Bundler @fetch_uri ||= begin if remote_uri.host == "rubygems.org" uri = remote_uri.dup - uri.host = "bundler.rubygems.org" + uri.host = "index.rubygems.org" uri else remote_uri diff --git a/lib/bundler/ruby_version.rb b/lib/bundler/ruby_version.rb index 800a4433f2..92f9d4c396 100644 --- a/lib/bundler/ruby_version.rb +++ b/lib/bundler/ruby_version.rb @@ -103,6 +103,9 @@ module Bundler private def matches?(requirements, version) + # Handles RUBY_PATCHLEVEL of -1 for instances like ruby-head + return requirements == version if requirements.to_s == "-1" || version.to_s == "-1" + Array(requirements).all? do |requirement| Gem::Requirement.create(requirement).satisfied_by?(Gem::Version.create(version)) end diff --git a/lib/bundler/rubygems_integration.rb b/lib/bundler/rubygems_integration.rb index 4e5ca7d1f8..8a0fdbaeeb 100644 --- a/lib/bundler/rubygems_integration.rb +++ b/lib/bundler/rubygems_integration.rb @@ -361,25 +361,31 @@ module Bundler # +specs+ def replace_bin_path(specs) gem_class = (class << Gem; self; end) - redefine_method(gem_class, :bin_path) do |name, *args| - exec_name = args.first - - return ENV["BUNDLE_BIN_PATH"] if exec_name == "bundle" - spec = nil + redefine_method(gem_class, :find_spec_for_exe) do |name, *args| + exec_name = args.first - if exec_name - spec = specs.find {|s| s.executables.include?(exec_name) } - raise(Gem::Exception, "can't find executable #{exec_name}") unless spec - unless spec.name == name - warn "Bundler is using a binstub that was created for a different gem.\n" \ - "This is deprecated, in future versions you may need to `bundle binstub #{name}` " \ - "to work around a system/bundle conflict." - end + spec = if exec_name + specs.find {|s| s.executables.include?(exec_name) } else - spec = specs.find {|s| s.name == name } - raise Gem::Exception, "no default executable for #{spec.full_name}" unless exec_name = spec.default_executable + specs.find {|s| s.name == name } + end + raise(Gem::Exception, "can't find executable #{exec_name}") unless spec + raise Gem::Exception, "no default executable for #{spec.full_name}" unless exec_name ||= spec.default_executable + unless spec.name == name + warn "Bundler is using a binstub that was created for a different gem.\n" \ + "This is deprecated, in future versions you may need to `bundle binstub #{name}` " \ + "to work around a system/bundle conflict." end + spec + end + + redefine_method(gem_class, :bin_path) do |name, *args| + exec_name = args.first + return ENV["BUNDLE_BIN_PATH"] if exec_name == "bundle" + + spec = find_spec_for_exe(name, *args) + exec_name ||= spec.default_executable gem_bin = File.join(spec.full_gem_path, spec.bindir, exec_name) gem_from_path_bin = File.join(File.dirname(spec.loaded_from), spec.bindir, exec_name) diff --git a/lib/bundler/ssl_certs/Fastly.pem b/lib/bundler/ssl_certs/Fastly.pem new file mode 100644 index 0000000000..9ea3429983 --- /dev/null +++ b/lib/bundler/ssl_certs/Fastly.pem @@ -0,0 +1,82 @@ +-----BEGIN CERTIFICATE----- +MIIO5DCCDcygAwIBAgISESFY8xfYRUgn/tM1S/rCQFqRMA0GCSqGSIb3DQEBCwUA +MGYxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTwwOgYD +VQQDEzNHbG9iYWxTaWduIE9yZ2FuaXphdGlvbiBWYWxpZGF0aW9uIENBIC0gU0hB +MjU2IC0gRzIwHhcNMTYwMzEwMTc1NDA5WhcNMTgwMzEzMTQwNDA2WjBsMQswCQYD +VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5j +aXNjbzEVMBMGA1UECgwMRmFzdGx5LCBJbmMuMRkwFwYDVQQDDBBsLnNzbC5mYXN0 +bHkubmV0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy8dy9W+1kNgD +fZZaVm9OuB6aAcLysbODKUvHt7IvPEJjLZYMP5SLCB5+eo93Vb1Vl3I/lU+qdBIP +1Yzi9Oh8XB+DBA7YmgzyeuWvT07YBOJOfXrbQK9tx+dmcZQtU3oka0uqOUDeT8fE +qccufwxA0RoVPGEKCZjDr4NALIBL4ckKxWeibvwnX1rN1fqyMMiW36ML3A9gdSA5 +0YIy7vh9CDvaSt/hBn/pUt2xkhhwtdi/zr6BrpjsMSgB/0qT03GukZ7fsxLI7Kwa +yspUlhLUbY99pKiXrf6NNuTIHt57IuD3a1TnBnHkOs9uQny31o3ShPOnxo4hB0xj +d+bbz2GsuQIDAQABo4ILhDCCC4AwDgYDVR0PAQH/BAQDAgWgMEkGA1UdIARCMEAw +PgYGZ4EMAQICMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24u +Y29tL3JlcG9zaXRvcnkvMIIJyQYDVR0RBIIJwDCCCbyCEGwuc3NsLmZhc3RseS5u +ZXSCECouMXN0ZGlic2Nkbi5jb22CCiouYW1hbi5jb22CGCouYW5zd2Vyc2luZ2Vu +ZXNpcy5jby51a4IWKi5hbnN3ZXJzaW5nZW5lc2lzLm9yZ4IUKi5hcGkubGl2ZXN0 +cmVhbS5jb22CEiouYXJrZW5jb3VudGVyLmNvbYIUKi5hdHRyaWJ1dGlvbi5yZXBv +cnSCDSouYmVzdGVnZy5jb22CEyouYnV5aXRkaXJlY3QuY28udWuCESouY29udGVu +dGJvZHkuY29tghQqLmNyZWF0aW9ubXVzZXVtLm9yZ4IbKi5jdXJhdGlvbnMuYmF6 +YWFydm9pY2UuY29tgg4qLmRsc2FkYXB0LmNvbYIVKi5kb2xsYXJzaGF2ZWNsdWIu +Y29tghoqLmV4Y2l0ZW9ubGluZXNlcnZpY2VzLmNvbYIQKi5mYXN0bHlsYWJzLmNv +bYIPKi5maWxlcGlja2VyLmlvghIqLmZpbGVzdGFja2FwaS5jb22CESouZm9kLXNh +bmRib3guY29tghEqLmZvZC1zdGFnaW5nLmNvbYIKKi5mb2Q0LmNvbYIMKi5mdWxs +MzAuY29tgg4qLmZ1bmRwYWFzLmNvbYIPKi5mdW5rZXI1MzAuY29tghAqLmZ1bm55 +b3JkaWUuY29tgg8qLmdhbWViYXR0ZS5jb22CCCouaGZhLmlvghEqLmphY2t0aHJl +YWRzLmNvbYIMKi5rbm5sYWIuY29tgg8qLmxlYWRlcnNpbi5jb22CDCoubGV0ZW1w +cy5jaIIPKi5sb290Y3JhdGUuY29tghUqLm1hcmxldHRlZnVuZGluZy5jb22CDyou +bXliZXN0ZWdnLmNvbYIJKi5uZmwuY29tggsqLnBhdGNoLmNvbYIMKi5wZWJibGUu +Y29tghAqLnBvdHRlcm1vcmUuY29tghAqLnByaW1lc3BvcnQuY29tghgqLnByb3Rl +Y3RlZC1jaGVja291dC5uZXSCCyoucmNoZXJ5LnNlgg4qLnJ1YnlnZW1zLm9yZ4IP +Ki5yd2xpdmVjbXMuY29tghcqLnNhZmFyaWJvb2tzb25saW5lLmNvbYISKi5zbWFy +dHNwYXJyb3cuY29tgg0qLnRhYy1jZG4ubmV0gg8qLnRoZXJlZHBpbi5jb22CDyou +dGhyaWxsaXN0LmNvbYIPKi50b3RhbHdpbmUuY29tgg8qLnRyYXZpcy1jaS5jb22C +DyoudHJhdmlzLWNpLm9yZ4ISKi50cmVhc3VyZWRhdGEuY29tggwqLnR1cm5lci5j +b22CDyoudW5pdGVkd2F5Lm9yZ4IOKi51bml2ZXJzZS5jb22CCSoudXJ4LmNvbYIK +Ki52ZXZvLmNvbYIbKi52aWRlb2NyZWF0b3IueWFob28tbmV0LmpwghYqLndob2xl +Zm9vZHNtYXJrZXQuY29tghMqLnliaS5pZGNmY2xvdWQubmV0ghEqLnlvbmRlcm11 +c2ljLmNvbYIQYS4xc3RkaWJzY2RuLmNvbYINYWZyb3N0cmVhbS50doIPYXBpLmRv +bWFpbnIuY29tgg1hcGkubnltYWcuY29tghdhcHAuYmV0dGVyaW1wYWN0Y2RuLmNv +bYIaYXNzZXRzLmZsLm1hcmthdmlwLWNkbi5jb22CHGFzc2V0czAxLmN4LnN1cnZl +eW1vbmtleS5jb22CEmF0dHJpYnV0aW9uLnJlcG9ydIIYY2RuLmZpbGVzdGFja2Nv +bnRlbnQuY29tghZjZG4uaGlnaHRhaWxzcGFjZXMuY29tggxjZG4ua2V2eS5jb22C +C2RvbWFpbnIuY29tgh5lbWJlZC1wcmVwcm9kLnRpY2tldG1hc3Rlci5jb22CGGVt +YmVkLm9wdGltaXplcGxheWVyLmNvbYIWZW1iZWQudGlja2V0bWFzdGVyLmNvbYIO +ZmFzdGx5bGFicy5jb22CD2ZsLmVhdDI0Y2RuLmNvbYIKZnVsbDMwLmNvbYIMZnVu +ZHBhYXMuY29tgg1mdW5rZXI1MzAuY29tggtnZXRtb3ZpLmNvbYIZZ2l2aW5ndHVl +c2RheS5naXZlZ2FiLmNvbYIOaS51cHdvcnRoeS5jb22CGmltYWdlcy5mbC5tYXJr +YXZpcC1jZG4uY29tgg9qYWNrdGhyZWFkcy5jb22CFmpzaW4uYWRwbHVnY29tcGFu +eS5jb22CFWpzaW4uYmx1ZXBpeGVsYWRzLmNvbYIKa25ubGFiLmNvbYINbGVhZGVy +c2luLmNvbYINbG9vdGNyYXRlLmNvbYITbWVkaWEuYmFyZm9vdC5jby5ueoIVbWVk +aWEucmlnaHRtb3ZlLmNvLnVrgg1tZXJyeWphbmUuY29tgiBtaWdodHktZmxvd2Vy +cy00MjAubWVycnlqYW5lLmNvbYIgbmV4dGdlbi1hc3NldHMuZWRtdW5kcy1tZWRp +YS5jb22CCW55bWFnLmNvbYILKi5ueW1hZy5jb22CCXBhdGNoLmNvbYIKcGViYmxl +LmNvbYIPcGl4ZWwubnltYWcuY29tgg5wcmltZXNwb3J0LmNvbYIicHJvcXVlc3Qu +dGVjaC5zYWZhcmlib29rc29ubGluZS5kZYIMcnVieWdlbXMub3JnghVzYWZhcmli +b29rc29ubGluZS5jb22CEXNlYXJjaC5tYXB6ZW4uY29tghFzdGF0aWMudmVzZGlh +LmNvbYIOdGhlZ3VhcmRpYW4udHaCECoudGhlZ3VhcmRpYW4udHaCDXRocmlsbGlz +dC5jb22CDXRvdGFsd2luZS5jb22CB3VyeC5jb22CGXZpZGVvY3JlYXRvci55YWhv +by1uZXQuanCCGndlbGNvbWUtZGV2LmJhbmtzaW1wbGUuY29tghB3aWtpLXRlbXAu +Y2EuY29tgg13d3cuYmxpbnEuY29tggx3d3cuYnVscS5jb22CInd3dy5jcmlzdGlh +bm9yb25hbGRvZnJhZ3JhbmNlcy5jb22CGXd3dy5mcmVlZ2l2aW5ndHVlc2RheS5v +cmeCEXd3dy5mcmVlbG90dG8uY29tgg53d3cuaW9kaW5lLmNvbYIXd3d3LmxhcHRv +cHNkaXJlY3QuY28udWuCDnd3dy5sZXRlbXBzLmNoghF3d3cubWVycnlqYW5lLmNv +bYIkd3d3Lm1pZ2h0eS1mbG93ZXJzLTQyMC5tZXJyeWphbmUuY29tghh3d3cubWls +bHN0cmVhbWxvdDQ2LmluZm+CEnd3dy5wb3R0ZXJtb3JlLmNvbYITd3d3LnRyYWlu +b3JlZ29uLm9yZ4IQd3d3LnZzbGl2ZS5jby5uejAJBgNVHRMEAjAAMB0GA1UdJQQW +MBQGCCsGAQUFBwMBBggrBgEFBQcDAjBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8v +Y3JsLmdsb2JhbHNpZ24uY29tL2dzL2dzb3JnYW5pemF0aW9udmFsc2hhMmcyLmNy +bDCBoAYIKwYBBQUHAQEEgZMwgZAwTQYIKwYBBQUHMAKGQWh0dHA6Ly9zZWN1cmUu +Z2xvYmFsc2lnbi5jb20vY2FjZXJ0L2dzb3JnYW5pemF0aW9udmFsc2hhMmcycjEu +Y3J0MD8GCCsGAQUFBzABhjNodHRwOi8vb2NzcDIuZ2xvYmFsc2lnbi5jb20vZ3Nv +cmdhbml6YXRpb252YWxzaGEyZzIwHQYDVR0OBBYEFExxRkNZ5ZAu1b3yysQe7R0J +p5v0MB8GA1UdIwQYMBaAFJbeYfG9HBYpUxzAzH07gwBA5hp8MA0GCSqGSIb3DQEB +CwUAA4IBAQAK0xY/KR6G9I6JJN1heilrcYEm71lrzxyAOrOq2YZV9l1L+qgSGxjV +vzvCNczZr76DD54+exBymDerBbwSI47JpSg3b5EzyiVvhz5r9rADYPBZBAkcTTUJ +std5fSbTMEKk+sB/DGdLr6v07kY+WRYbXMBuYNfRBVCoRXabzT5AMJEIYOudGFQC +1S/4tx3t1w7l4584Mr7uTAlDcMsNOkU4gs0Onghn6IAfuu1MN/0BYCuwO/qKdt5L +gN8rZB60W6VFOJGd1qJJv5erH/1j2nC8PBZQwl//IwW437uRNI5/ti3Fj/WR/0+T +dwT31o1uEbJZ0Mr5XmLQ/l8kal+xOiS0 +-----END CERTIFICATE----- diff --git a/lib/bundler/ssl_certs/GlobalSignOrganizationValidationCA.pem b/lib/bundler/ssl_certs/GlobalSignOrganizationValidationCA.pem new file mode 100644 index 0000000000..c846c09b0b --- /dev/null +++ b/lib/bundler/ssl_certs/GlobalSignOrganizationValidationCA.pem @@ -0,0 +1,26 @@ +-----BEGIN CERTIFICATE----- +MIIEaTCCA1GgAwIBAgILBAAAAAABRE7wQkcwDQYJKoZIhvcNAQELBQAwVzELMAkG +A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv +b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xNDAyMjAxMDAw +MDBaFw0yNDAyMjAxMDAwMDBaMGYxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i +YWxTaWduIG52LXNhMTwwOgYDVQQDEzNHbG9iYWxTaWduIE9yZ2FuaXphdGlvbiBW +YWxpZGF0aW9uIENBIC0gU0hBMjU2IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQDHDmw/I5N/zHClnSDDDlM/fsBOwphJykfVI+8DNIV0yKMCLkZc +C33JiJ1Pi/D4nGyMVTXbv/Kz6vvjVudKRtkTIso21ZvBqOOWQ5PyDLzm+ebomchj +SHh/VzZpGhkdWtHUfcKc1H/hgBKueuqI6lfYygoKOhJJomIZeg0k9zfrtHOSewUj +mxK1zusp36QUArkBpdSmnENkiN74fv7j9R7l/tyjqORmMdlMJekYuYlZCa7pnRxt +Nw9KHjUgKOKv1CGLAcRFrW4rY6uSa2EKTSDtc7p8zv4WtdufgPDWi2zZCHlKT3hl +2pK8vjX5s8T5J4BO/5ZS5gIg4Qdz6V0rvbLxAgMBAAGjggElMIIBITAOBgNVHQ8B +Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUlt5h8b0cFilT +HMDMfTuDAEDmGnwwRwYDVR0gBEAwPjA8BgRVHSAAMDQwMgYIKwYBBQUHAgEWJmh0 +dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMDMGA1UdHwQsMCow +KKAmoCSGImh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5uZXQvcm9vdC5jcmwwPQYIKwYB +BQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNv +bS9yb290cjEwHwYDVR0jBBgwFoAUYHtmGkUNl8qJUC99BM00qP/8/UswDQYJKoZI +hvcNAQELBQADggEBAEYq7l69rgFgNzERhnF0tkZJyBAW/i9iIxerH4f4gu3K3w4s +32R1juUYcqeMOovJrKV3UPfvnqTgoI8UV6MqX+x+bRDmuo2wCId2Dkyy2VG7EQLy +XN0cvfNVlg/UBsD84iOKJHDTu/B5GqdhcIOKrwbFINihY9Bsrk8y1658GEV1BSl3 +30JAZGSGvip2CTFvHST0mdCF/vIhCPnG9vHQWe3WVjwIKANnuvD58ZAWR65n5ryA +SOlCdjSXVWkkDoPWoC209fN5ikkodBpBocLTJIg1MGCUF7ThBCIxPTsvFwayuJ2G +K1pp74P1S8SqtCr4fKGxhZSM9AyHDPSsQPhZSZg= +-----END CERTIFICATE----- diff --git a/lib/bundler/ssl_certs/GlobalSignRoot.pem b/lib/bundler/ssl_certs/GlobalSignRoot.pem new file mode 100644 index 0000000000..e0885addbc --- /dev/null +++ b/lib/bundler/ssl_certs/GlobalSignRoot.pem @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx +GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds +b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV +BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD +VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa +DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc +THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb +Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP +c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX +gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF +AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj +Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG +j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH +hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC +X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- diff --git a/spec/bundler/bundler_spec.rb b/spec/bundler/bundler_spec.rb index 84d2922f37..2ad3704db0 100644 --- a/spec/bundler/bundler_spec.rb +++ b/spec/bundler/bundler_spec.rb @@ -103,4 +103,41 @@ describe Bundler do end end end + + describe "#which" do + let(:executable) { "executable" } + let(:path) { %w(/a /b c ../d "/e") } + let(:expected) { "executable" } + + before do + ENV["PATH"] = path.join(File::PATH_SEPARATOR) + + allow(File).to receive(:file?).and_return(false) + allow(File).to receive(:executable?).and_return(false) + if expected + expect(File).to receive(:file?).with(expected).and_return(true) + expect(File).to receive(:executable?).with(expected).and_return(true) + end + end + + subject { described_class.which(executable) } + + shared_examples_for "it returns the correct executable" do + it "returns the expected file" do + expect(subject).to eq(expected) + end + end + + it_behaves_like "it returns the correct executable" + + context "when the executable in inside a quoted path" do + let(:expected) { "/e/executable" } + it_behaves_like "it returns the correct executable" + end + + context "when the executable is not found" do + let(:expected) { nil } + it_behaves_like "it returns the correct executable" + end + end end diff --git a/spec/bundler/fetcher/base_spec.rb b/spec/bundler/fetcher/base_spec.rb index 5a8c7647b9..bd1c03660c 100644 --- a/spec/bundler/fetcher/base_spec.rb +++ b/spec/bundler/fetcher/base_spec.rb @@ -42,9 +42,9 @@ describe Bundler::Fetcher::Base do before { allow(subject).to receive(:remote_uri).and_return(remote_uri_obj) } context "when the remote uri's host is rubygems.org" do - it "should create a copy of the remote uri with bundler.rubygems.org as the host" do + it "should create a copy of the remote uri with index.rubygems.org as the host" do fetched_uri = subject.fetch_uri - expect(fetched_uri.host).to eq("bundler.rubygems.org") + expect(fetched_uri.host).to eq("index.rubygems.org") expect(fetched_uri).to_not be(remote_uri_obj) end end diff --git a/spec/bundler/fetcher/downloader_spec.rb b/spec/bundler/fetcher/downloader_spec.rb index ebfaf90534..bf6abd115a 100644 --- a/spec/bundler/fetcher/downloader_spec.rb +++ b/spec/bundler/fetcher/downloader_spec.rb @@ -12,7 +12,7 @@ describe Bundler::Fetcher::Downloader do describe "fetch" do let(:counter) { 0 } let(:httpv) { "1.1" } - let(:http_response) { nil } + let(:http_response) { double(:response) } before do allow(subject).to receive(:request).with(uri, options).and_return(http_response) diff --git a/spec/bundler/ruby_version_spec.rb b/spec/bundler/ruby_version_spec.rb index ce68463029..08a7e0e8e4 100644 --- a/spec/bundler/ruby_version_spec.rb +++ b/spec/bundler/ruby_version_spec.rb @@ -328,6 +328,28 @@ describe "Bundler::RubyVersion and its subclasses" do it_behaves_like "there is a difference in the engine versions" end + + context "with a patchlevel of -1" do + let(:version) { ">= 2.0.0" } + let(:patchlevel) { "-1" } + let(:engine) { "ruby" } + let(:engine_version) { "~> 2.0.1" } + let(:other_version) { version } + let(:other_engine) { engine } + let(:other_engine_version) { engine_version } + + context "and comparing with another patchlevel of -1" do + let(:other_patchlevel) { patchlevel } + + it_behaves_like "there are no differences" + end + + context "and comparing with a patchlevel that is not -1" do + let(:other_patchlevel) { "642" } + + it_behaves_like "there is a difference in the patchlevels" + end + end end describe "#system" do diff --git a/spec/commands/exec_spec.rb b/spec/commands/exec_spec.rb index be2f8aa2a5..29f5927c14 100644 --- a/spec/commands/exec_spec.rb +++ b/spec/commands/exec_spec.rb @@ -128,13 +128,13 @@ describe "bundle exec" do G end - bundle "exec rackup", :expect_err => true + bundle! "exec rackup", :expect_err => true expect(out).to eq("0.9.1") expect(err).to match("deprecated") Dir.chdir bundled_app2 do - bundle "exec rackup" + bundle! "exec rackup" expect(out).to eq("1.0.0") end end diff --git a/spec/other/ssl_cert_spec.rb b/spec/other/ssl_cert_spec.rb index b1b27ebb89..4ed6ca53c1 100644 --- a/spec/other/ssl_cert_spec.rb +++ b/spec/other/ssl_cert_spec.rb @@ -13,6 +13,7 @@ describe "SSL Certificates", :rubygems_master do rubygems.global.ssl.fastly.net rubygems.org staging.rubygems.org + index.rubygems.org ) hosts.each do |host| diff --git a/spec/realworld/edgecases_spec.rb b/spec/realworld/edgecases_spec.rb index 8295669d19..2f0ba9866a 100644 --- a/spec/realworld/edgecases_spec.rb +++ b/spec/realworld/edgecases_spec.rb @@ -49,7 +49,7 @@ describe "real world edgecases", :realworld => true, :sometimes => true do gem 'rack-cache', '1.2.0' # last version that works on Ruby 1.9 G bundle :lock - expect(lockfile).to include("rails (3.2.22.1)") + expect(lockfile).to include("rails (3.2.22.2)") expect(lockfile).to include("capybara (2.2.1)") end |