ruby-changes:23321
From: drbrain <ko1@a...>
Date: Wed, 18 Apr 2012 06:18:14 +0900 (JST)
Subject: [ruby-changes:23321] drbrain:r35372 (trunk): Revert r35370 due to bad source branch
drbrain 2012-04-18 06:17:56 +0900 (Wed, 18 Apr 2012) New Revision: 35372 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=35372 Log: Revert r35370 due to bad source branch Removed files: trunk/lib/rubygems/psych_additions.rb trunk/lib/rubygems/psych_tree.rb trunk/lib/rubygems/syck_hack.rb trunk/test/rubygems/data/null-type.gemspec.rz Modified files: trunk/ChangeLog trunk/lib/rubygems/builder.rb trunk/lib/rubygems/commands/build_command.rb trunk/lib/rubygems/commands/fetch_command.rb trunk/lib/rubygems/commands/pristine_command.rb trunk/lib/rubygems/commands/setup_command.rb trunk/lib/rubygems/commands/specification_command.rb trunk/lib/rubygems/config_file.rb trunk/lib/rubygems/custom_require.rb trunk/lib/rubygems/defaults.rb trunk/lib/rubygems/format.rb trunk/lib/rubygems/installer.rb trunk/lib/rubygems/installer_test_case.rb trunk/lib/rubygems/package/tar_input.rb trunk/lib/rubygems/platform.rb trunk/lib/rubygems/requirement.rb trunk/lib/rubygems/spec_fetcher.rb trunk/lib/rubygems/specification.rb trunk/lib/rubygems/test_case.rb trunk/lib/rubygems/version.rb trunk/lib/rubygems.rb trunk/test/rubygems/test_gem.rb trunk/test/rubygems/test_gem_commands_build_command.rb trunk/test/rubygems/test_gem_commands_fetch_command.rb trunk/test/rubygems/test_gem_commands_help_command.rb trunk/test/rubygems/test_gem_commands_install_command.rb trunk/test/rubygems/test_gem_commands_specification_command.rb trunk/test/rubygems/test_gem_format.rb trunk/test/rubygems/test_gem_installer.rb trunk/test/rubygems/test_gem_platform.rb trunk/test/rubygems/test_gem_security.rb trunk/test/rubygems/test_gem_specification.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 35371) +++ ChangeLog (revision 35372) @@ -1,12 +1,3 @@ -Wed Apr 18 05:49:32 2012 Eric Hodel <drbrain@s...> - - * lib/rubygems: Update to RubyGems 1.8.22 plus r33517 and r35337 which - were ported to the rubygems git repository. - - See https://github.com/rubygems/rubygems/blob/1.8/History.txt for - changes since 1.8.11. - * test/rubygems: ditto. - Tue Apr 17 22:18:48 2012 Nobuyoshi Nakada <nobu@r...> * strftime.c (rb_strftime_with_timespec): fix padding of time zone Index: lib/rubygems/psych_additions.rb =================================================================== --- lib/rubygems/psych_additions.rb (revision 35371) +++ lib/rubygems/psych_additions.rb (revision 35372) @@ -1,9 +0,0 @@ -# This exists just to satify bugs in marshal'd gemspecs that -# contain a reference to YAML::PrivateType. We prune these out -# in Specification._load, but if we don't have the constant, Marshal -# blows up. - -module Psych - class PrivateType - end -end Index: lib/rubygems/syck_hack.rb =================================================================== --- lib/rubygems/syck_hack.rb (revision 35371) +++ lib/rubygems/syck_hack.rb (revision 35372) @@ -1,65 +0,0 @@ -# :stopdoc: - -# Hack to handle syck's DefaultKey bug -# -# This file is always loaded AFTER either syck or psych are already -# loaded. It then looks at what constants are available and creates -# a consistent view on all rubys. -# -# All this is so that there is always a YAML::Syck::DefaultKey -# class no matter if the full yaml library has loaded or not. -# - -module YAML - # In newer 1.9.2, there is a Syck toplevel constant instead of it - # being underneith YAML. If so, reference it back under YAML as - # well. - if defined? ::Syck - Syck = ::Syck - - # JRuby's "Syck" is called "Yecht" - elsif defined? YAML::Yecht - Syck = YAML::Yecht - - # Otherwise, if there is no YAML::Syck, then we've got just psych - # loaded, so lets define a stub for DefaultKey. - elsif !defined? YAML::Syck - module Syck - class DefaultKey - end - end - end - - # Now that we've got something that is always here, define #to_s - # so when code tries to use this, it at least just shows up like it - # should. - module Syck - class DefaultKey - def to_s - '=' - end - end - end -end - -# Sometime in the 1.9 dev cycle, the Syck constant was moved from under YAML -# to be a toplevel constant. So gemspecs created under these versions of Syck -# will have references to Syck::DefaultKey. -# -# So we need to be sure that we reference Syck at the toplevel too so that -# we can always load these kind of gemspecs. -# -if !defined?(Syck) - Syck = YAML::Syck -end - -# Now that we've got Syck setup in all the right places, store -# a reference to the DefaultKey class inside Gem. We do this so that -# if later on YAML, etc are redefined, we've still got a consistent -# place to find the DefaultKey class for comparison. - -module Gem - SyckDefaultKey = YAML::Syck::DefaultKey -end - -# :startdoc: Index: lib/rubygems/psych_tree.rb =================================================================== --- lib/rubygems/psych_tree.rb (revision 35371) +++ lib/rubygems/psych_tree.rb (revision 35372) @@ -1,27 +0,0 @@ -module Gem - if defined? ::Psych::Visitors - class NoAliasYAMLTree < Psych::Visitors::YAMLTree - def visit_String(str) - return super unless str == '=' # or whatever you want - - quote = Psych::Nodes::Scalar::SINGLE_QUOTED - @emitter.scalar str, nil, nil, false, true, quote - end - - # Noop this out so there are no anchors - def register(target, obj) - end - - # This is ported over from the yaml_tree in 1.9.3 - def format_time time - if time.utc? - time.strftime("%Y-%m-%d %H:%M:%S.%9N Z") - else - time.strftime("%Y-%m-%d %H:%M:%S.%9N %:z") - end - end - - private :format_time - end - end -end Index: lib/rubygems/builder.rb =================================================================== --- lib/rubygems/builder.rb (revision 35371) +++ lib/rubygems/builder.rb (revision 35372) @@ -32,9 +32,9 @@ # Builds the gem from the specification. Returns the name of the file # written. - def build(skip_validation=false) + def build @spec.mark_version - @spec.validate unless skip_validation + @spec.validate @signer = sign write_package say success if Gem.configuration.verbose Index: lib/rubygems/installer_test_case.rb =================================================================== --- lib/rubygems/installer_test_case.rb (revision 35371) +++ lib/rubygems/installer_test_case.rb (revision 35372) @@ -118,9 +118,7 @@ FileUtils.mkdir_p 'bin' FileUtils.mkdir_p 'lib' FileUtils.mkdir_p File.join('ext', 'a') - File.open File.join('bin', 'executable'), 'w' do |f| - f.puts "raise 'ran executable'" - end + File.open File.join('bin', 'executable'), 'w' do |f| f.puts '1' end File.open File.join('lib', 'code.rb'), 'w' do |f| f.puts '1' end File.open File.join('ext', 'a', 'mkrf_conf.rb'), 'w' do |f| f << <<-EOF Index: lib/rubygems/format.rb =================================================================== --- lib/rubygems/format.rb (revision 35371) +++ lib/rubygems/format.rb (revision 35372) @@ -28,7 +28,7 @@ # representing the data in the gem def self.from_file_by_path(file_path, security_policy = nil) - unless File.file?(file_path) + unless File.exist?(file_path) raise Gem::Exception, "Cannot load gem at [#{file_path}] in #{Dir.pwd}" end Index: lib/rubygems/spec_fetcher.rb =================================================================== --- lib/rubygems/spec_fetcher.rb (revision 35371) +++ lib/rubygems/spec_fetcher.rb (revision 35372) @@ -255,12 +255,8 @@ loaded = false if File.exist? local_file then - begin - spec_dump = - @fetcher.fetch_path(spec_path, File.mtime(local_file)) - rescue Gem::RemoteFetcher::FetchError => e - alert_warning "Error fetching data: #{e.message}" - end + spec_dump = + @fetcher.fetch_path(spec_path, File.mtime(local_file)) rescue nil loaded = true if spec_dump Index: lib/rubygems/config_file.rb =================================================================== --- lib/rubygems/config_file.rb (revision 35371) +++ lib/rubygems/config_file.rb (revision 35372) @@ -25,8 +25,6 @@ # +:sources+:: Sets Gem::sources # +:verbose+:: See #verbose -require 'rbconfig' - class Gem::ConfigFile DEFAULT_BACKTRACE = false @@ -70,7 +68,7 @@ path.strip rescue LoadError - RbConfig::CONFIG["sysconfdir"] || "/etc" + "/etc" end end Index: lib/rubygems/custom_require.rb =================================================================== --- lib/rubygems/custom_require.rb (revision 35371) +++ lib/rubygems/custom_require.rb (revision 35372) @@ -32,7 +32,7 @@ # that file has already been loaded is preserved. def require path - if Gem.unresolved_deps.empty? then + if Gem.unresolved_deps.empty? or Gem.loaded_path? path then gem_original_require path else spec = Gem::Specification.find { |s| @@ -55,8 +55,7 @@ return gem_original_require path end rescue LoadError => load_error - if load_error.message.start_with?("Could not find") or - (load_error.message.end_with?(path) and Gem.try_activate(path)) then + if load_error.message.end_with?(path) and Gem.try_activate(path) then return gem_original_require(path) end Index: lib/rubygems/specification.rb =================================================================== --- lib/rubygems/specification.rb (revision 35371) +++ lib/rubygems/specification.rb (revision 35372) @@ -262,19 +262,18 @@ def self._all # :nodoc: unless defined?(@@all) && @@all then - specs = {} + specs = [] - self.dirs.each { |dir| + self.dirs.reverse_each { |dir| Dir[File.join(dir, "*.gemspec")].each { |path| spec = Gem::Specification.load path.untaint # #load returns nil if the spec is bad, so we just ignore # it at this stage - specs[spec.full_name] ||= spec if spec + specs << spec if spec } } - @@all = specs.values - + @@all = specs _resort! end @@all @@ -485,8 +484,6 @@ # +input+ can be anything that YAML.load() accepts: String or IO. def self.from_yaml(input) - Gem.load_yaml - input = normalize_yaml_input input spec = YAML.load input @@ -538,7 +535,7 @@ file = file.dup.untaint code = if defined? Encoding - File.read file, :mode => 'r:UTF-8:-' + File.read file, :encoding => "UTF-8" else File.read file end @@ -666,16 +663,11 @@ raise TypeError, "invalid Gem::Specification format #{array.inspect}" end - # Cleanup any YAML::PrivateType. They only show up for an old bug - # where nil => null, so just convert them to nil based on the type. - - array.map! { |e| e.kind_of?(YAML::PrivateType) ? nil : e } - spec.instance_variable_set :@rubygems_version, array[0] # spec version spec.instance_variable_set :@name, array[2] spec.instance_variable_set :@version, array[3] - spec.date = array[4] + spec.instance_variable_set :@date, array[4] spec.instance_variable_set :@summary, array[5] spec.instance_variable_set :@required_ruby_version, array[6] spec.instance_variable_set :@required_rubygems_version, array[7] @@ -764,16 +756,8 @@ def activate_dependencies self.runtime_dependencies.each do |spec_dep| - if loaded = Gem.loaded_specs[spec_dep.name] - next if spec_dep.matches_spec? loaded - - msg = "can't satisfy '#{spec_dep}', already activated '#{loaded.full_name}'" - e = Gem::LoadError.new msg - e.name = spec_dep.name - - raise e - end - + # TODO: check for conflicts! not just name! + next if Gem.loaded_specs.include? spec_dep.name specs = spec_dep.to_specs if specs.size == 1 then @@ -1002,12 +986,6 @@ when String then if /\A(\d{4})-(\d{2})-(\d{2})\Z/ =~ date then Time.utc($1.to_i, $2.to_i, $3.to_i) - - # Workaround for where the date format output from psych isn't - # parsed as a Time object by syck and thus comes through as a - # string. - elsif /\A(\d{4})-(\d{2})-(\d{2}) \d{2}:\d{2}:\d{2}\.\d+?Z\z/ =~ date then - Time.utc($1.to_i, $2.to_i, $3.to_i) else raise(Gem::InvalidSpecificationException, "invalid date format in specification: #{date.inspect}") @@ -1384,7 +1362,7 @@ val = other_spec.instance_variable_get(name) if val then instance_variable_set name, val.dup - elsif Gem.configuration.really_verbose + else warn "WARNING: #{full_name} has an invalid nil value for #{name}" end rescue TypeError @@ -1934,22 +1912,7 @@ def to_yaml(opts = {}) # :nodoc: if YAML.const_defined?(:ENGINE) && !YAML::ENGINE.syck? then - # Because the user can switch the YAML engine behind our - # back, we have to check again here to make sure that our - # psych code was properly loaded, and load it if not. - unless Gem.const_defined?(:NoAliasYAMLTree) - require 'rubygems/psych_tree' - end - - builder = Gem::NoAliasYAMLTree.new({}) - builder << self - ast = builder.tree - - io = StringIO.new - - Psych::Visitors::Emitter.new(io).accept(ast) - - io.string.gsub(/ !!null \n/, " \n") + super.gsub(/ !!null \n/, " \n") else YAML.quick_emit object_id, opts do |out| out.map taguri, to_yaml_style do |map| @@ -2134,13 +2097,7 @@ # FIX: have this handle the platform/new_platform/original_platform bullshit def yaml_initialize(tag, vals) # :nodoc: vals.each do |ivar, val| - case ivar - when "date" - # Force Date to go through the extra coerce logic in date= - self.date = val.untaint - else - instance_variable_set "@#{ivar}", val.untaint - end + instance_variable_set "@#{ivar}", val end @original_platform = @platform # for backwards compatibility Index: lib/rubygems/platform.rb =================================================================== --- lib/rubygems/platform.rb (revision 35371) +++ lib/rubygems/platform.rb (revision 35372) @@ -68,7 +68,6 @@ when /aix(\d+)/ then [ 'aix', $1 ] when /cygwin/ then [ 'cygwin', nil ] when /darwin(\d+)?/ then [ 'darwin', $1 ] - when /^macruby$/ then [ 'macruby', nil ] when /freebsd(\d+)/ then [ 'freebsd', $1 ] when /hpux(\d+)/ then [ 'hpux', $1 ] when /^java$/, /^jruby$/ then [ 'java', nil ] Index: lib/rubygems/version.rb =================================================================== --- lib/rubygems/version.rb (revision 35371) +++ lib/rubygems/version.rb (revision 35372) @@ -238,12 +238,6 @@ initialize array[0] end - def yaml_initialize(tag, map) - @version = map['version'] - @segments = nil - @hash = nil - end - ## # A version is considered a prerelease if it contains a letter. Index: lib/rubygems/package/tar_input.rb =================================================================== --- lib/rubygems/package/tar_input.rb (revision 35371) +++ lib/rubygems/package/tar_input.rb (revision 35372) @@ -210,25 +210,21 @@ # the unpacking speed) we threw our hands in the air and declared that # this method would use the String IO approach on all platforms at all # times. And that's the way it is. - # - # Revisited. Here's the beginning of the long story. - # http://osdir.com/ml/lang.ruby.gems.devel/2007-06/msg00045.html - # - # StringIO wraping has never worked as a workaround by definition. Skipping - # initial 10 bytes and passing -MAX_WBITS to Zlib::Inflate luckily works as - # gzip reader, but it only works if the GZip header is 10 bytes long (see - # below) and it does not check inflated stream consistency (CRC value in the - # Gzip trailer.) - # - # RubyGems generated Gzip Header: 10 bytes - # magic(2) + method(1) + flag(1) + mtime(4) + exflag(1) + os(1) + - # orig_name(0) + comment(0) - # - # Ideally, it must return a GZipReader without meaningless buffering. We - # have lots of CRuby committers around so let's fix windows build when we - # received an error. + def zipped_stream(entry) - Zlib::GzipReader.new entry + if defined? Rubinius or defined? Maglev then + # these implementations have working Zlib + zis = Zlib::GzipReader.new entry + dis = zis.read + is = StringIO.new(dis) + else + # This is Jamis Buck's Zlib workaround for some unknown issue + entry.read(10) # skip the gzip header + zis = Zlib::Inflate.new(-Zlib::MAX_WBITS) + is = StringIO.new(zis.inflate(entry.read)) + end + ensure + zis.finish if zis end end Index: lib/rubygems/installer.rb =================================================================== --- lib/rubygems/installer.rb (revision 35371) +++ lib/rubygems/installer.rb (revision 35372) @@ -366,7 +366,7 @@ if /\A#!/ =~ first_line then # Preserve extra words on shebang line, like "-w". Thanks RPA. - shebang = first_line.sub(/\A\#!.*?ruby\S*((\s+\S+)+)/, "#!#{Gem.ruby}") + shebang = first_line.sub(/\A\#!.*?ruby\S*(?=(\s+\S+))/, "#!#{Gem.ruby}") opts = $1 shebang.strip! # Avoid nasty ^M issues. end @@ -466,13 +466,9 @@ version = "#{Gem::Requirement.default}" -if ARGV.first - str = ARGV.first - str = str.dup.force_encoding("BINARY") if str.respond_to? :force_encoding - if str =~ /\\A_(.*)_\\z/ - version = $1 - ARGV.shift - end +if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then + version = $1 + ARGV.shift end gem '#{spec.name}', version Index: lib/rubygems/commands/specification_command.rb =================================================================== --- lib/rubygems/commands/specification_command.rb (revision 35371) +++ lib/rubygems/commands/specification_command.rb (revision 35372) @@ -62,26 +62,8 @@ "Please specify a gem name or file on the command line" end - case options[:version] - when String - req = Gem::Requirement.parse options[:version] - when Gem::Requirement - req = options[:version] - else - raise Gem::CommandLineError, "Unsupported version type: #{options[:version]}" - end + dep = Gem::Dependency.new gem, options[:version] - if !req.none? and options[:all] - alert_error "Specify --all or -v, not both" - terminate_interaction 1 - end - - if options[:all] - dep = Gem::Dependency.new gem - else - dep = Gem::Dependency.new gem, options[:version] - end - field = get_one_optional_argument raise Gem::CommandLineError, "--ruby and FIELD are mutually exclusive" if @@ -98,12 +80,8 @@ end if remote? then - found = Gem::SpecFetcher.fetcher.fetch dep, true + found = Gem::SpecFetcher.fetcher.fetch dep - if dep.prerelease? or options[:prerelease] - found += Gem::SpecFetcher.fetcher.fetch dep, false, true, true - end - specs.push(*found.map { |spec,| spec }) end Index: lib/rubygems/commands/fetch_command.rb =================================================================== --- lib/rubygems/commands/fetch_command.rb (revision 35371) +++ lib/rubygems/commands/fetch_command.rb (revision 35372) @@ -13,7 +13,6 @@ add_bulk_threshold_option add_proxy_option add_source_option - add_clear_sources_option add_version_option add_platform_option @@ -59,17 +58,9 @@ next end - file = "#{spec.full_name}.gem" - remote_path = URI.parse(source_uri) + "gems/#{file}" + path = Gem::RemoteFetcher.fetcher.download spec, source_uri + FileUtils.mv path, File.basename(spec.cache_file) - fetch = Gem::RemoteFetcher.fetcher - - gem = fetch.fetch_path remote_path.to_s - - File.open file, "wb" do |f| - f.write gem - end - say "Downloaded #{spec.full_name}" end end Index: lib/rubygems/commands/pristine_command.rb =================================================================== --- lib/rubygems/commands/pristine_command.rb (revision 35371) +++ lib/rubygems/commands/pristine_command.rb (revision 35372) @@ -94,14 +94,10 @@ end # TODO use installer options - install_defaults = Gem::ConfigFile::PLATFORM_DEFAULTS['install'] - installer_env_shebang = install_defaults.to_s['--env-shebang'] - installer = Gem::Installer.new(gem, :wrappers => true, :force => true, - :install_dir => spec.base_dir, - :env_shebang => installer_env_shebang) + :install_dir => spec.base_dir) installer.install say "Restored #{spec.full_name}" Index: lib/rubygems/commands/build_command.rb =================================================================== --- lib/ (... truncated) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/