aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Rakefile18
-rw-r--r--lib/bundler/ssl_certs/certificate_manager.rb48
2 files changed, 32 insertions, 34 deletions
diff --git a/Rakefile b/Rakefile
index 64ea17d1..0d469613 100644
--- a/Rakefile
+++ b/Rakefile
@@ -3,7 +3,8 @@ $:.unshift File.expand_path("../lib", __FILE__)
require 'rubygems'
require 'shellwords'
require 'benchmark'
-require 'bundler/ssl_certs/certificate_manager'
+
+RUBYGEMS_REPO = "tmp/rubygems"
def safe_task(&block)
yield
@@ -110,7 +111,7 @@ begin
end
hash = nil
- Dir.chdir("tmp/rubygems") do
+ Dir.chdir(RUBYGEMS_REPO) do
system("git remote update")
if rg == "master"
system("git checkout origin/master")
@@ -219,15 +220,14 @@ rescue LoadError
end
end
+desc "Update vendored SSL certs to match the certs vendored by Rubygems"
+task :update_certs => "spec:rubygems:clone_rubygems_master" do
+ require 'bundler/ssl_certs/certificate_manager'
+ CertificateManager.update_from!(RUBYGEMS_REPO)
+end
+
require 'bundler/gem_tasks'
task :build => ["man:clean", "man:build"]
task :release => ["man:clean", "man:build"]
task :default => :spec
-
-namespace :rubygems do
- desc "Update bundler certificates to match those from rubygems"
- task :update_certs => "spec:rubygems:clone_rubygems_master" do
- CertificateManager.new.update!
- end
-end
diff --git a/lib/bundler/ssl_certs/certificate_manager.rb b/lib/bundler/ssl_certs/certificate_manager.rb
index 74850722..d17e928c 100644
--- a/lib/bundler/ssl_certs/certificate_manager.rb
+++ b/lib/bundler/ssl_certs/certificate_manager.rb
@@ -1,41 +1,39 @@
+require 'fileutils'
+
class CertificateManager
- BUNDLER_CERTIFICATES_PATH = "lib/bundler/ssl_certs/"
- LOCAL_RUBYGEMS_PATH = "tmp/rubygems"
- RUBYGEMS_CERTIFICATES_PATH = "#{File.join(LOCAL_RUBYGEMS_PATH, 'lib/rubygems/ssl_certs/')}"
- CERTIFICATE_FILE_EXTENSION = ".pem"
+ attr_reader :bundler_cert_path, :bundler_certs, :rubygems_certs
+
+ def self.update_from!(rubygems_path)
+ new(rubygems_path).update!
+ end
- attr_reader :bundler_certificates, :rubygems_certificates
+ def initialize(rubygems_path)
+ rubygems_certs = File.join(rubygems_path, 'lib/rubygems/ssl_certs')
+ @rubygems_certs = certificates_in(rubygems_certs)
- def initialize
- @bundler_certificates = certificate_files(BUNDLER_CERTIFICATES_PATH)
- @rubygems_certificates = certificate_files(RUBYGEMS_CERTIFICATES_PATH)
+ @bundler_cert_path = File.expand_path("..", __FILE__)
+ @bundler_certs = certificates_in(bundler_cert_path)
end
def up_to_date?
- same_filenames = (bundler_certificates == rubygems_certificates)
- same_certificates = false
+ return false if bundler_certs != rubygems_certs
- if same_filenames
- same_certificates = bundler_certificates.all? do |filename|
- FileUtils.compare_file(File.join(BUNDLER_CERTIFICATES_PATH, filename), File.join(RUBYGEMS_CERTIFICATES_PATH, filename))
- end
+ bundler_certs.zip(rubygems_certs).all? do |bc, rc|
+ FileUtils.compare_file(bc, rc)
end
-
- same_filenames && same_certificates
end
def update!
- unless up_to_date?
- FileUtils.rm Dir.glob(File.join(BUNDLER_CERTIFICATES_PATH, "*#{CERTIFICATE_FILE_EXTENSION}"))
- FileUtils.cp_r Dir.glob(File.join(RUBYGEMS_CERTIFICATES_PATH, "*#{CERTIFICATE_FILE_EXTENSION}")), BUNDLER_CERTIFICATES_PATH
- end
+ return if up_to_date?
+
+ FileUtils.rm bundler_certs
+ FileUtils.cp rubygems_certs, bundler_cert_path
end
- private
+private
- def certificate_files(path)
- Dir.entries(path).select do |filename|
- filename.end_with?(CERTIFICATE_FILE_EXTENSION)
- end.sort
+ def certificates_in(path)
+ Dir[File.join(path, "*.pem")].sort
end
+
end