Import rubygems 1.5.0 (release candidate)

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30599 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
ryan 2011-01-19 00:08:49 +00:00
parent d26fb035ca
commit e798ccbacf
173 changed files with 2721 additions and 2455 deletions

View file

@ -1,5 +1,10 @@
######################################################################
# This file is imported from the rubygems project.
# DO NOT make modifications in this repo. They _will_ be reverted!
# File a patch instead and assign it to Ryan Davis or Eric Hodel.
######################################################################
require 'webrick'
require 'yaml'
require 'zlib'
require 'erb'
@ -21,7 +26,6 @@ require 'rubygems/doc_manager'
# * legacy indexes:
# * "/Marshal.#{Gem.marshal_version}" - Full SourceIndex dump of metadata
# for installed gems
# * "/yaml" - YAML dump of metadata for installed gems - deprecated
#
# == Usage
#
@ -429,18 +433,19 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
def self.run(options)
new(options[:gemdir], options[:port], options[:daemon],
options[:addresses]).run
options[:launch], options[:addresses]).run
end
##
# Only the first directory in gem_dirs is used for serving gems
def initialize(gem_dirs, port, daemon, addresses = nil)
def initialize(gem_dirs, port, daemon, launch = nil, addresses = nil)
Socket.do_not_reverse_lookup = true
@gem_dirs = Array gem_dirs
@port = port
@daemon = daemon
@launch = launch
@addresses = addresses
logger = WEBrick::Log.new nil, WEBrick::BasicLog::FATAL
@server = WEBrick::HTTPServer.new :DoNotListen => true, :Logger => logger
@ -553,19 +558,6 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
add_date res
case req.request_uri.path
when '/quick/index' then
res.body << @source_index.map { |name,| name }.sort.join("\n")
when '/quick/index.rz' then
index = @source_index.map { |name,| name }.sort.join("\n")
res['content-type'] = 'application/x-deflate'
res.body << Gem.deflate(index)
when '/quick/latest_index' then
index = @source_index.latest_specs.map { |spec| spec.full_name }
res.body << index.sort.join("\n")
when '/quick/latest_index.rz' then
index = @source_index.latest_specs.map { |spec| spec.full_name }
res['content-type'] = 'application/x-deflate'
res.body << Gem.deflate(index.sort.join("\n"))
when %r|^/quick/(Marshal.#{Regexp.escape Gem.marshal_version}/)?(.*?)-([0-9.]+)(-.*?)?\.gemspec\.rz$| then
dep = Gem::Dependency.new $2, $3
specs = @source_index.search dep
@ -590,9 +582,6 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
elsif marshal_format then
res['content-type'] = 'application/x-deflate'
res.body << Gem.deflate(Marshal.dump(specs.first))
else # deprecated YAML format
res['content-type'] = 'application/x-deflate'
res.body << Gem.deflate(specs.first.to_yaml)
end
else
raise WEBrick::HTTPStatus::NotFound, "`#{req.path}' not found."
@ -675,6 +664,9 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
values = { "gem_count" => specs.size.to_s, "specs" => specs,
"total_file_count" => total_file_count.to_s }
# suppress 1.9.3dev warning about unused variable
values = values
result = template.result binding
res.body = result
end
@ -768,9 +760,6 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
WEBrick::Daemon.start if @daemon
@server.mount_proc "/yaml", method(:yaml)
@server.mount_proc "/yaml.Z", method(:yaml)
@server.mount_proc "/Marshal.#{Gem.marshal_version}", method(:Marshal)
@server.mount_proc "/Marshal.#{Gem.marshal_version}.Z", method(:Marshal)
@ -803,6 +792,8 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
trap("INT") { @server.shutdown; exit! }
trap("TERM") { @server.shutdown; exit! }
launch if @launch
@server.start
end
@ -833,26 +824,14 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
end
end
def yaml(req, res)
@source_index.refresh!
def launch
listeners = @server.listeners.map{|l| l.addr[2] }
add_date res
host = listeners.any?{|l| l == '0.0.0.0'} ? 'localhost' : listeners.first
index = @source_index.to_yaml
say "Launching browser to http://#{host}:#{@port}"
if req.path =~ /Z$/ then
res['content-type'] = 'application/x-deflate'
index = Gem.deflate index
else
res['content-type'] = 'text/plain'
end
if req.request_method == 'HEAD' then
res['content-length'] = index.length
return
end
res.body << index
system("#{@launch} http://#{host}:#{@port}")
end
end