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)