diff options
Diffstat (limited to 'lib/rubygems/server.rb')
-rw-r--r-- | lib/rubygems/server.rb | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/lib/rubygems/server.rb b/lib/rubygems/server.rb index ca6dc683f5..7655be22ce 100644 --- a/lib/rubygems/server.rb +++ b/lib/rubygems/server.rb @@ -530,6 +530,36 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; } end end + def prerelease_specs req, res + reset_gems + + res['content-type'] = 'application/x-gzip' + + add_date res + + specs = Gem::Specification.select do |spec| + spec.version.prerelease? + end.sort.map do |spec| + platform = spec.original_platform || Gem::Platform::RUBY + [spec.name, spec.version, platform] + end + + specs = Marshal.dump specs + + if req.path =~ /\.gz$/ then + specs = Gem.gzip specs + res['content-type'] = 'application/x-gzip' + else + res['content-type'] = 'application/octet-stream' + end + + if req.request_method == 'HEAD' then + res['content-length'] = specs.length + else + res.body << specs + end + end + def quick(req, res) reset_gems @@ -537,7 +567,7 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; } add_date res case req.request_uri.path - when %r|^/quick/(Marshal.#{Regexp.escape Gem.marshal_version}/)?(.*?)-([0-9.]+)(-.*?)?\.gemspec\.rz$| then + when %r|^/quick/(Marshal.#{Regexp.escape Gem.marshal_version}/)?(.*?)-([0-9.]+[^-]*?)(-.*?)?\.gemspec\.rz$| then marshal_format, name, version, platform = $1, $2, $3, $4 specs = Gem::Specification.find_all_by_name name, version @@ -757,6 +787,11 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; } @server.mount_proc "/latest_specs.#{Gem.marshal_version}.gz", method(:latest_specs) + @server.mount_proc "/prerelease_specs.#{Gem.marshal_version}", + method(:prerelease_specs) + @server.mount_proc "/prerelease_specs.#{Gem.marshal_version}.gz", + method(:prerelease_specs) + @server.mount_proc "/quick/", method(:quick) @server.mount_proc("/gem-server-rdoc-style.css") do |req, res| |