summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml2
-rw-r--r--CHANGELOG.md1
-rw-r--r--Rakefile4
-rw-r--r--lib/bundler.rb11
-rw-r--r--lib/bundler/cli/exec.rb3
-rw-r--r--lib/bundler/fetcher/base.rb2
-rw-r--r--lib/bundler/ruby_version.rb3
-rw-r--r--lib/bundler/rubygems_integration.rb36
-rw-r--r--lib/bundler/ssl_certs/Fastly.pem82
-rw-r--r--lib/bundler/ssl_certs/GlobalSignOrganizationValidationCA.pem26
-rw-r--r--lib/bundler/ssl_certs/GlobalSignRoot.pem18
-rw-r--r--spec/bundler/bundler_spec.rb37
-rw-r--r--spec/bundler/fetcher/base_spec.rb4
-rw-r--r--spec/bundler/fetcher/downloader_spec.rb2
-rw-r--r--spec/bundler/ruby_version_spec.rb22
-rw-r--r--spec/commands/exec_spec.rb4
-rw-r--r--spec/other/ssl_cert_spec.rb1
-rw-r--r--spec/realworld/edgecases_spec.rb2
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)
diff --git a/Rakefile b/Rakefile
index f63081001b..647885265a 100644
--- a/Rakefile
+++ b/Rakefile
@@ -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