Method: Gem::Source#load_specs
- Defined in:
- lib/rubygems/source.rb
#load_specs(type) ⇒ Object
Loads type kind of specs fetching from @uri if the on-disk cache is out of date.
type is one of the following:
:released => Return the list of all released specs :latest => Return the list of only the highest version of each gem :prerelease => Return the list of all prerelease only specs
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
# File 'lib/rubygems/source.rb', line 159 def load_specs(type) file = FILES[type] fetcher = Gem::RemoteFetcher.fetcher file_name = "#{file}.#{Gem.marshal_version}" spec_path = enforce_trailing_slash(uri) + "#{file_name}.gz" cache_dir = cache_dir spec_path local_file = File.join(cache_dir, file_name) retried = false if update_cache? require "fileutils" FileUtils.mkdir_p cache_dir end spec_dump = fetcher.cache_update_path spec_path, local_file, update_cache? Gem.load_safe_marshal begin Gem::NameTuple.from_list Gem::SafeMarshal.safe_load(spec_dump) rescue ArgumentError if update_cache? && !retried FileUtils.rm local_file retried = true retry else raise Gem::Exception.new("Invalid spec cache file in #{local_file}") end end end |