mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* ext/purelib.rb: translates a fake path to rubygems in $" into
an alternative in $: so that Kernel.#require does not load more rubygems.rb. Resolves many failures in test/rubygems/*. * gem_prelude.rb (Gem.load_full_rubygems_library): supports case the rubygems to load is not in $(rubylibprefix). (Gem.path_to_full_rubygems_library): new method for the changes in purelib.rb and Gem.load_full_rubygems_library. (Gem.fake_rubygems_as_loaded): new method. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24117 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									dc1327a6f2
								
							
						
					
					
						commit
						618cb2cab0
					
				
					 3 changed files with 49 additions and 6 deletions
				
			
		| 
						 | 
				
			
			@ -235,18 +235,42 @@ if defined?(Gem) then
 | 
			
		|||
          Gem::GEM_PRELUDE_METHODS.each do |method_name|
 | 
			
		||||
            undef_method method_name
 | 
			
		||||
          end
 | 
			
		||||
          undef_method :const_missing
 | 
			
		||||
          undef_method :method_missing
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        Kernel.module_eval do
 | 
			
		||||
          undef_method :gem if method_defined? :gem
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        $".delete File.join(Gem::ConfigMap[:rubylibprefix],
 | 
			
		||||
                            Gem::ConfigMap[:ruby_version], 'rubygems.rb')
 | 
			
		||||
 | 
			
		||||
        $".delete path_to_full_rubygems_library
 | 
			
		||||
        $".each do |path|
 | 
			
		||||
          if /#{Regexp.escape File::SEPARATOR}rubygems\.rb\z/ =~ path
 | 
			
		||||
            raise LoadError, "another rubygems is already loaded from #{path}"
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
        require 'rubygems'
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def self.fake_rubygems_as_loaded
 | 
			
		||||
        path = path_to_full_rubygems_library
 | 
			
		||||
        $" << path unless $".include?(path)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def self.path_to_full_rubygems_library
 | 
			
		||||
        installed_path = File.join(Gem::ConfigMap[:rubylibprefix], Gem::ConfigMap[:ruby_version])
 | 
			
		||||
        if $:.include?(installed_path)
 | 
			
		||||
          return File.join(installed_path, 'rubygems.rb')
 | 
			
		||||
        else # e.g., on test-all
 | 
			
		||||
          $:.each do |dir|
 | 
			
		||||
            if File.exist?( path = File.join(dir, 'rubygems.rb') )
 | 
			
		||||
              return path
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
          raise LoadError, 'rubygems.rb'
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      GemPaths = {}
 | 
			
		||||
      GemVersions = {}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -367,8 +391,7 @@ if defined?(Gem) then
 | 
			
		|||
 | 
			
		||||
  begin
 | 
			
		||||
    Gem.push_all_highest_version_gems_on_load_path
 | 
			
		||||
    $" << File.join(Gem::ConfigMap[:rubylibprefix],
 | 
			
		||||
                    Gem::ConfigMap[:ruby_version], "rubygems.rb")
 | 
			
		||||
    Gem::QuickLoader.fake_rubygems_as_loaded
 | 
			
		||||
  rescue Exception => e
 | 
			
		||||
    puts "Error loading gem paths on load path in gem_prelude"
 | 
			
		||||
    puts e
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue