blob: 669ea5a1df1a418a66e056c6c3a3d200132bc894 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
require 'rubygems/indexer'
##
# Construct the master Gem index file.
class Gem::Indexer::MasterIndexBuilder < Gem::Indexer::AbstractIndexBuilder
def start_index
super
@index = Gem::SourceIndex.new
end
def end_index
super
@file.puts "--- !ruby/object:#{@index.class}"
@file.puts "gems:"
gems = @index.sort_by { |name, gemspec| gemspec.sort_obj }
gems.each do |name, gemspec|
yaml = gemspec.to_yaml.gsub(/^/, ' ')
yaml = yaml.sub(/\A ---/, '') # there's a needed extra ' ' here
@file.print " #{gemspec.original_name}:"
@file.puts yaml
end
end
def cleanup
super
index_file_name = File.join @directory, @filename
compress index_file_name, "Z"
paranoid index_file_name, "#{index_file_name}.Z"
@files << "#{@filename}.Z"
end
def add(spec)
@index.add_spec(spec)
end
private
def paranoid(path, compressed_path)
data = Gem.read_binary path
compressed_data = Gem.read_binary compressed_path
if data != unzip(compressed_data) then
raise "Compressed file #{compressed_path} does not match uncompressed file #{path}"
end
end
end
|