diff options
author | Andre Arko <andre@arko.net> | 2013-12-18 16:41:09 -0800 |
---|---|---|
committer | Andre Arko <andre@arko.net> | 2013-12-18 22:30:26 -0800 |
commit | 88d49f25bc0f5794ca28c51f33868e27d395d926 (patch) | |
tree | c3b00fce65b4200a1f8d2ad181a2bd780decee3b | |
parent | 53dc2e239a539c07ade5a197564076c6513a3684 (diff) | |
download | bundler-88d49f25bc0f5794ca28c51f33868e27d395d926.tar.gz |
simplify the certs manager
-rw-r--r-- | Rakefile | 18 | ||||
-rw-r--r-- | lib/bundler/ssl_certs/certificate_manager.rb | 48 |
2 files changed, 32 insertions, 34 deletions
@@ -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 |