lib/gemirro/utils.rb in gemirro-0.13.3 vs lib/gemirro/utils.rb in gemirro-0.13.4
- old
+ new
@@ -14,12 +14,11 @@
#
class Utils
attr_reader(:cache,
:versions_fetcher,
:gems_fetcher,
- :gems_orig_collection,
- :gems_source_collection,
+ :gems_collection,
:stored_gems)
##
# Cache class to store marshal and data into files
#
# @return [Gemirro::Cache]
@@ -34,25 +33,36 @@
#
# @param [TrueClass|FalseClass] orig Fetch orig files
# @return [Gemirro::GemVersionCollection]
#
def self.gems_collection(orig = true)
- return @gems_orig_collection if orig && !@gems_orig_collection.nil?
- return @gems_source_collection if !orig && !@gems_source_collection.nil?
+ @gems_collection = {} if @gems_collection.nil?
+ is_orig = orig ? 1 : 0
+ data = @gems_collection[is_orig]
+ data = { files: {}, values: nil } if data.nil?
+
+ file_paths = specs_files_paths(orig)
+ has_file_changed = false
+ file_paths.pmap do |file_path|
+ next if data[:files].key?(file_path) &&
+ data[:files][file_path] == File.mtime(file_path)
+ has_file_changed = true
+ end
+
+ # Return result if no file changed
+ return @gems_collection[is_orig][:values] unless has_file_changed
+
gems = []
- specs_files_paths(orig).pmap do |specs_file_path|
- next unless File.exist?(specs_file_path)
- spec_gems = cache.cache(File.basename(specs_file_path)) do
- Marshal.load(Zlib::GzipReader.open(specs_file_path).read)
- end
- gems.concat(spec_gems)
+ file_paths.pmap do |file_path|
+ next unless File.exist?(file_path)
+ gems.concat(Marshal.load(Zlib::GzipReader.open(file_path).read))
+ data[:files][file_path] = File.mtime(file_path)
end
collection = GemVersionCollection.new(gems)
- @gems_source_collection = collection unless orig
- @gems_orig_collection = collection if orig
+ data[:values] = collection
collection
end
##
@@ -65,12 +75,11 @@
marshal_version = Gemirro::Configuration.marshal_version
specs_file_types.pmap do |specs_file_type|
File.join(configuration.destination,
[specs_file_type,
marshal_version,
- 'gz' + (orig ? '.orig' : '')
- ].join('.'))
+ 'gz' + (orig ? '.orig' : '')].join('.'))
end
end
##
# Return specs fils types
@@ -106,20 +115,21 @@
##
# @return [Gemirro::GemsFetcher]
#
def self.gems_fetcher
- @gems_fetcher ||= Gemirro::GemsFetcher.new(
- configuration.source, versions_fetcher)
+ @gems_fetcher ||= Gemirro::GemsFetcher
+ .new(configuration.source, versions_fetcher)
end
##
# Try to cache gem classes
#
# @param [String] gem_name Gem name
# @return [Gem]
#
def self.stored_gem(gem_name, gem_version, platform = 'ruby')
+ platform = 'ruby' if platform.nil?
@stored_gems ||= {}
# rubocop:disable Metrics/LineLength
@stored_gems[gem_name] = {} unless @stored_gems.key?(gem_name)
@stored_gems[gem_name][gem_version] = {} unless @stored_gems[gem_name].key?(gem_version)
@stored_gems[gem_name][gem_version][platform] ||= Gem.new(gem_name, gem_version, platform) unless @stored_gems[gem_name][gem_version].key?(platform)