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