1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Update to RubyGems 1.3.7.pre.1

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27441 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
drbrain 2010-04-22 08:24:42 +00:00
parent d0e5a34ac7
commit 372dcece3f
64 changed files with 759 additions and 240 deletions

View file

@ -33,6 +33,8 @@ require 'rubygems/doc_manager'
class Gem::Server
attr_reader :spec_dirs
include ERB::Util
include Gem::UserInteraction
@ -430,29 +432,36 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
options[:addresses]).run
end
def initialize(gem_dir, port, daemon, addresses = nil)
##
# Only the first directory in gem_dirs is used for serving gems
def initialize(gem_dirs, port, daemon, addresses = nil)
Socket.do_not_reverse_lookup = true
@gem_dir = gem_dir
@gem_dirs = Array gem_dirs
@port = port
@daemon = daemon
@addresses = addresses
logger = WEBrick::Log.new nil, WEBrick::BasicLog::FATAL
@server = WEBrick::HTTPServer.new :DoNotListen => true, :Logger => logger
@spec_dir = File.join @gem_dir, 'specifications'
@spec_dirs = @gem_dirs.map do |gem_dir|
spec_dir = File.join gem_dir, 'specifications'
unless File.directory? @spec_dir then
raise ArgumentError, "#{@gem_dir} does not appear to be a gem repository"
unless File.directory? spec_dir then
raise ArgumentError, "#{gem_dir} does not appear to be a gem repository"
end
spec_dir
end
@source_index = Gem::SourceIndex.from_gems_in @spec_dir
@source_index = Gem::SourceIndex.from_gems_in(*@spec_dirs)
end
def Marshal(req, res)
@source_index.refresh!
res['date'] = File.stat(@spec_dir).mtime
add_date res
index = Marshal.dump @source_index
@ -471,12 +480,18 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
res.body << index
end
def add_date res
res['date'] = @spec_dirs.map do |spec_dir|
File.stat(spec_dir).mtime
end.max
end
def latest_specs(req, res)
@source_index.refresh!
res['content-type'] = 'application/x-gzip'
res['date'] = File.stat(@spec_dir).mtime
add_date res
specs = @source_index.latest_specs.sort.map do |spec|
platform = spec.original_platform
@ -535,7 +550,7 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
@source_index.refresh!
res['content-type'] = 'text/plain'
res['date'] = File.stat(@spec_dir).mtime
add_date res
case req.request_uri.path
when '/quick/index' then
@ -586,7 +601,7 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
def root(req, res)
@source_index.refresh!
res['date'] = File.stat(@spec_dir).mtime
add_date res
raise WEBrick::HTTPStatus::NotFound, "`#{req.path}' not found." unless
req.path == '/'
@ -630,16 +645,16 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
specs << {
"authors" => "Chad Fowler, Rich Kilmer, Jim Weirich, Eric Hodel and others",
"dependencies" => [],
"doc_path" => "/doc_root/rubygems-#{Gem::RubyGemsVersion}/rdoc/index.html",
"doc_path" => "/doc_root/rubygems-#{Gem::VERSION}/rdoc/index.html",
"executables" => [{"executable" => 'gem', "is_last" => true}],
"only_one_executable" => true,
"full_name" => "rubygems-#{Gem::RubyGemsVersion}",
"full_name" => "rubygems-#{Gem::VERSION}",
"has_deps" => false,
"homepage" => "http://docs.rubygems.org/",
"name" => 'rubygems',
"rdoc_installed" => true,
"summary" => "RubyGems itself",
"version" => Gem::RubyGemsVersion,
"version" => Gem::VERSION,
}
specs = specs.sort_by { |spec| [spec["name"].downcase, spec["version"]] }
@ -718,7 +733,7 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
# documentation - just put it underneath the main doc folder.
def show_rdoc_for_pattern(pattern, res)
found_gems = Dir.glob("#{@gem_dir}/doc/#{pattern}").select {|path|
found_gems = Dir.glob("{#{@gem_dirs.join ','}}/doc/#{pattern}").select {|path|
File.exist? File.join(path, 'rdoc/index.html')
}
case found_gems.length
@ -771,7 +786,7 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
@server.mount_proc("/gem-server-rdoc-style.css") do |req, res|
res['content-type'] = 'text/css'
res['date'] = File.stat(@spec_dir).mtime
add_date res
res.body << RDOC_CSS
end
@ -782,7 +797,7 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
paths = { "/gems" => "/cache/", "/doc_root" => "/doc/" }
paths.each do |mount_point, mount_dir|
@server.mount(mount_point, WEBrick::HTTPServlet::FileHandler,
File.join(@gem_dir, mount_dir), true)
File.join(@gem_dir.first, mount_dir), true)
end
trap("INT") { @server.shutdown; exit! }
@ -794,7 +809,7 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
def specs(req, res)
@source_index.refresh!
res['date'] = File.stat(@spec_dir).mtime
add_date res
specs = @source_index.sort.map do |_, spec|
platform = spec.original_platform
@ -821,7 +836,7 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
def yaml(req, res)
@source_index.refresh!
res['date'] = File.stat(@spec_dir).mtime
add_date res
index = @source_index.to_yaml