diff options
author | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-25 15:02:05 +0000 |
---|---|---|
committer | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-25 15:02:05 +0000 |
commit | 0dc342de848a642ecce8db697b8fecd83a63e117 (patch) | |
tree | 2b7ed4724aff1f86073e4740134bda9c4aac1a39 /trunk/lib/rubygems/indexer/master_index_builder.rb | |
parent | ef70cf7138ab8034b5b806f466e4b484b24f0f88 (diff) |
added tag v1_9_0_4
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_9_0_4@18845 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'trunk/lib/rubygems/indexer/master_index_builder.rb')
-rw-r--r-- | trunk/lib/rubygems/indexer/master_index_builder.rb | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/trunk/lib/rubygems/indexer/master_index_builder.rb b/trunk/lib/rubygems/indexer/master_index_builder.rb new file mode 100644 index 0000000000..669ea5a1df --- /dev/null +++ b/trunk/lib/rubygems/indexer/master_index_builder.rb @@ -0,0 +1,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 |