lib/rubygems/comparator.rb in gem-compare-0.0.6 vs lib/rubygems/comparator.rb in gem-compare-0.0.7

- old
+ new

@@ -4,10 +4,12 @@ require 'curb' require 'json' require 'rubygems/package' require 'rubygems/dependency' require 'rubygems/spec_fetcher' +require 'rubygems/remote_fetcher' +require 'rubygems/comparator/version' require 'rubygems/comparator/utils' require 'rubygems/comparator/report' require 'rubygems/comparator/spec_comparator' require 'rubygems/comparator/file_list_comparator' require 'rubygems/comparator/dependency_comparator' @@ -20,12 +22,10 @@ class Gem::Comparator include Gem::Comparator::Utils attr_accessor :options, :report - VERSION = '0.0.4' - ## # Set the working dir and process options # # Creates temporal directory if the gem files shouldn't be kept @@ -89,14 +89,17 @@ comparators = [SpecComparator, FileListComparator, DependencyComparator, GemfileComparator] - comparators.each do |c| - comparator = c.new - cmp = (comparator.compares == :packages) ? gem_packages.values : gem_specs.values - @report = comparator.compare(cmp, @report, @options) + # Use different gem sources if specified + with_sources @options[:sources] do + comparators.each do |c| + comparator = c.new + cmp = (comparator.compares == :packages) ? gem_packages.values : gem_specs.values + @report = comparator.compare(cmp, @report, @options) + end end # Clean up FileUtils.rm_rf options[:output] unless options[:keep_all] end @@ -105,9 +108,46 @@ info 'Printing results...' @report.print end private + + def with_sources(sources, &block) + if sources + override_sources sources do + yield + end + else + yield + end + end + + def override_sources(new_sources, &block) + original_sources = Gem.sources.clone + old_sources = Gem.sources.to_a + old_sources.each do |source_uri| + Gem.sources.delete source_uri + end + new_sources.each do |source_uri| + source = Gem::Source.new source_uri + source.load_specs :released + Gem.sources << source + end + Gem.configuration.write + yield + rescue URI::Error, ArgumentError + error 'Given URI is not valid.' + rescue Gem::RemoteFetcher::FetchError => e + error "Fetching the gem from the given URI failed with the " + + "following error:\n #{e.message}" + ensure + original_sources.each do |source_uri| + source = Gem::Source.new source_uri + source.load_specs :released + Gem.sources << source + end + Gem.configuration.write + end ## # If there is an unexpanded version in +versions+ such # as '>= 4.0.0' or '~>1.0.0', find all existing # +gem_name+ versions that match the criteria