def get_source_index
@@index ||= nil
return @@index if @@index
dump = unless File.exist? ".source_index" then
warn "Fetching full index and caching. This can take a while."
url = GEMURL + "Marshal.#{Gem.marshal_version}.Z"
dump = Gem::RemoteFetcher.fetcher.fetch_path url
dump = Gem.inflate dump
warn "stripping index to latest gems"
ary = Marshal.load dump
h = {}
Hash[ary].values.sort.each { |spec| h[spec.name] = spec }
ary = h.map { |_, v| [v.full_name, v] }
dump = Marshal.dump ary
open ".source_index", "wb" do |io| io.write dump end
dump
else
open ".source_index", "rb" do |io| io.read end
end
@@index = Marshal.load dump
end