[前][次][番号順一覧][スレッド一覧]

ruby-changes:16641

From: mame <ko1@a...>
Date: Wed, 14 Jul 2010 00:53:18 +0900 (JST)
Subject: [ruby-changes:16641] Ruby:r28634 (ruby_1_9_2): * gem_prelude.rb: provide workaround for gem activation. Currently,

mame	2010-07-14 00:53:05 +0900 (Wed, 14 Jul 2010)

  New Revision: 28634

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=28634

  Log:
    * gem_prelude.rb: provide workaround for gem activation.  Currently,
      gem activation does not work by default.  Now it can be worked
      around by requiring "rubygems" first.  [ruby-core:29486]
      a patch from Evan Phoenix in [ruby-core:31096].
    
    * lib/rubygems.rb: ditto.

  Modified files:
    branches/ruby_1_9_2/ChangeLog
    branches/ruby_1_9_2/gem_prelude.rb
    branches/ruby_1_9_2/lib/rubygems.rb
    branches/ruby_1_9_2/test/rubygems/test_gem_activation.rb

Index: ruby_1_9_2/ChangeLog
===================================================================
--- ruby_1_9_2/ChangeLog	(revision 28633)
+++ ruby_1_9_2/ChangeLog	(revision 28634)
@@ -1,3 +1,12 @@
+Thu Jul  8 00:15:50 2010  Yusuke Endoh  <mame@t...>
+
+	* gem_prelude.rb: provide workaround for gem activation.  Currently,
+	  gem activation does not work by default.  Now it can be worked
+	  around by requiring "rubygems" first.  [ruby-core:29486]
+	  a patch from Evan Phoenix in [ruby-core:31096].
+
+	* lib/rubygems.rb: ditto.
+
 Sun Jul 11 15:14:03 2010  Yuki Sonoda (Yugui)  <yugui@y...>
 
 	* Makefile.in ({|dist-|real-}clean-ext): fixes the previous
Index: ruby_1_9_2/gem_prelude.rb
===================================================================
--- ruby_1_9_2/gem_prelude.rb	(revision 28633)
+++ ruby_1_9_2/gem_prelude.rb	(revision 28634)
@@ -136,7 +136,7 @@
 
       @loaded_full_rubygems_library = false
 
-      def self.load_full_rubygems_library
+      def self.remove
         return if @loaded_full_rubygems_library
 
         @loaded_full_rubygems_library = true
@@ -150,7 +150,13 @@
         Kernel.module_eval do
           undef_method :gem if method_defined? :gem
         end
+      end
 
+      def self.load_full_rubygems_library
+        return if @loaded_full_rubygems_library
+
+        remove
+
         $".delete path_to_full_rubygems_library
         if $".any? {|path| path.end_with?('/rubygems.rb')}
           raise LoadError, "another rubygems is already loaded from #{path}"
@@ -179,6 +185,7 @@
 
       GemPaths = {}
       GemVersions = {}
+      GemLoadPaths = []
 
       def push_gem_version_on_load_path(gem_name, *version_requirements)
         if version_requirements.empty?
@@ -241,29 +248,27 @@
           end
         end
 
-        require_paths = []
-
         GemPaths.each_value do |path|
           if File.exist?(file = File.join(path, ".require_paths")) then
             paths = File.read(file).split.map do |require_path|
               File.join path, require_path
             end
 
-            require_paths.concat paths
+            GemLoadPaths.concat paths
           else
-            require_paths << file if File.exist?(file = File.join(path, "bin"))
-            require_paths << file if File.exist?(file = File.join(path, "lib"))
+            GemLoadPaths << file if File.exist?(file = File.join(path, "bin"))
+            GemLoadPaths << file if File.exist?(file = File.join(path, "lib"))
           end
         end
 
         # "tag" the first require_path inserted into the $LOAD_PATH to enable
         # indexing correctly with rubygems proper when it inserts an explicitly
         # gem version
-        unless require_paths.empty? then
-          require_paths.first.instance_variable_set(:@gem_prelude_index, true)
+        unless GemLoadPaths.empty? then
+          GemLoadPaths.first.instance_variable_set(:@gem_prelude_index, true)
         end
         # gem directories must come after -I and ENV['RUBYLIB']
-        $:[$:.index{|e|e.instance_variable_defined?(:@gem_prelude_index)}||-1,0] = require_paths
+        $:[$:.index{|e|e.instance_variable_defined?(:@gem_prelude_index)}||-1,0] = GemLoadPaths
       end
 
       def const_missing(constant)
@@ -289,7 +294,6 @@
 
   begin
     Gem.push_all_highest_version_gems_on_load_path
-    Gem::QuickLoader.fake_rubygems_as_loaded
   rescue Exception => e
     puts "Error loading gem paths on load path in gem_prelude"
     puts e
Index: ruby_1_9_2/lib/rubygems.rb
===================================================================
--- ruby_1_9_2/lib/rubygems.rb	(revision 28633)
+++ ruby_1_9_2/lib/rubygems.rb	(revision 28634)
@@ -7,6 +7,11 @@
 
 gem_disabled = !defined? Gem
 
+unless gem_disabled
+  # Nuke the Quickloader stuff
+  Gem::QuickLoader.remove
+end
+
 require 'rubygems/defaults'
 require 'thread'
 require 'etc'
@@ -579,6 +584,12 @@
     $LOAD_PATH.index { |p| p.instance_variable_defined? :@gem_prelude_index }
   end
 
+  def self.remove_prelude_paths
+    Gem::QuickLoader::GemLoadPaths.each do |path|
+      $LOAD_PATH.delete(path)
+    end
+  end
+
   ##
   # The file name and line number of the caller of the caller of this method.
 
@@ -1098,14 +1109,15 @@
 
 require 'rubygems/config_file'
 
+Gem.remove_prelude_paths
+
 ##
 # Enables the require hook for RubyGems.
 #
-# Ruby 1.9 allows --disable-gems, so we require it when we didn't detect a Gem
-# constant at rubygems.rb load time.
+# We remove the paths prelude added, so we need custom require to get
+# any gems now.
+require 'rubygems/custom_require'
 
-require 'rubygems/custom_require' if gem_disabled or RUBY_VERSION < '1.9'
-
 Gem.clear_paths
 
 Gem.load_plugins
Index: ruby_1_9_2/test/rubygems/test_gem_activation.rb
===================================================================
--- ruby_1_9_2/test/rubygems/test_gem_activation.rb	(revision 28633)
+++ ruby_1_9_2/test/rubygems/test_gem_activation.rb	(revision 28634)
@@ -18,4 +18,4 @@
     #                  /can't activate rubygems-bug-child.*already activated rubygems-bug-child-1\.1/, [],
     #                  bug3140)
   end
-end if defined?(::Gem)
+end if defined?(::Gem) and RUBY_VERSION < "1.9"

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]