[#29270] Proposal: Module#thunk_method — Charles Oliver Nutter <headius@...>

Many people use define_method solely so they can define a new method

13 messages 2010/04/06

[#29293] URI.(un)escape deprecated? — Marc-Andre Lafortune <ruby-core-mailing-list@...>

Hi.

16 messages 2010/04/07
[#29366] Re: URI.(un)escape deprecated? — Tanaka Akira <akr@...> 2010/04/08

2010/4/7 Marc-Andre Lafortune <ruby-core-mailing-list@marc-andre.ca>:

[#29313] [Bug #3112] require "yaml" doesn't use psych as default — Usaku NAKAMURA <redmine@...>

Bug #3112: require "yaml" doesn't use psych as default

28 messages 2010/04/08
[#29315] [Bug #3112] require "yaml" doesn't use psych as default — Yui NARUSE <redmine@...> 2010/04/08

Issue #3112 has been updated by Yui NARUSE.

[#29336] Re: [Bug #3112] require "yaml" doesn't use psych as default — Aaron Patterson <aaron@...> 2010/04/08

On Thu, Apr 08, 2010 at 02:06:55PM +0900, Yui NARUSE wrote:

[#29395] [Bug #3119] [Patch] "IOError (closed stream)" error with tempfile unlink then close usage — Simon Nicholls <redmine@...>

Bug #3119: [Patch] "IOError (closed stream)" error with tempfile unlink then close usage

9 messages 2010/04/09

[#29427] [Bug #3124] SocketError on SnowLeopard (during make test-all) — Aaron Patterson <redmine@...>

Bug #3124: SocketError on SnowLeopard (during make test-all)

10 messages 2010/04/11

[#29462] [Feature #3131] add Kernel#Hash() method like Kernel#Array() — Suraj Kurapati <redmine@...>

Feature #3131: add Kernel#Hash() method like Kernel#Array()

10 messages 2010/04/11

[#29464] [Bug #3132] …/nokogiri-1.4.1/ext/nokogiri/nokogiri.bundle: [BUG] Bus Error — Ashley Williams <redmine@...>

Bug #3132: …/nokogiri-1.4.1/ext/nokogiri/nokogiri.bundle: [BUG] Bus Error

8 messages 2010/04/12

[#29486] [Bug #3140] gem activation has changed between 1.8 and 1.9 — Aaron Patterson <redmine@...>

Bug #3140: gem activation has changed between 1.8 and 1.9

102 messages 2010/04/13
[#31002] [Bug #3140] gem activation has changed between 1.8 and 1.9 — Aaron Patterson <redmine@...> 2010/07/02

Issue #3140 has been updated by Aaron Patterson.

[#31003] Re: [Bug #3140] gem activation has changed between 1.8 and 1.9 — Yusuke ENDOH <mame@...> 2010/07/02

Hi,

[#31005] Re: [Bug #3140] gem activation has changed between 1.8 and 1.9 — Yehuda Katz <wycats@...> 2010/07/02

We are about to ship a version of Ruby with a built in package manager with

[#29489] Re: [Bug #3140] gem activation has changed between 1.8 and 1.9 — Evan Phoenix <evan@...> 2010/04/13

After a brief discussion with Eric Hodel about this, there are a few questions before we can figure out how to solve this:

[#29513] Re: [Bug #3140] gem activation has changed between 1.8 and 1.9 — Evan Phoenix <evan@...> 2010/04/14

Is there any comment on this? This is a big bug in 1.9.2 that we'd like to get fixed as soon as we can, but I need some input on it.

[#29526] Re: [Bug #3140] gem activation has changed between 1.8 and 1.9 — Rich Kilmer <rich.kilmer@...> 2010/04/15

I wrote this original code in gem_prelude.

[#31104] [Bug #3140] gem activation has changed between 1.8 and 1.9 — Yusuke Endoh <redmine@...> 2010/07/07

Issue #3140 has been updated by Yusuke Endoh.

[#31108] Re: [Bug #3140] gem activation has changed between 1.8 and 1.9 — Roger Pack <rogerdpack2@...> 2010/07/07

> I've commited the patch to trunk.

[#31193] Re: [Bug #3140] gem activation has changed between 1.8 and 1.9 — Yusuke ENDOH <mame@...> 2010/07/11

Hi,

[#31223] Re: [Bug #3140] gem activation has changed between 1.8 and 1.9 — Roger Pack <rogerdpack2@...> 2010/07/12

> Roger, could you re-try to build from scratch? ould you apply

[#31215] [Bug #3140] gem activation has changed between 1.8 and 1.9 — Yehuda Katz <redmine@...> 2010/07/12

Issue #3140 has been updated by Yehuda Katz.

[#31218] Re: [Bug #3140] gem activation has changed between 1.8 and 1.9 — Yukihiro Matsumoto <matz@...> 2010/07/12

Hi,

[#29528] [Bug #3150] net/https peer verification doesn't do anything — Hongli Lai <redmine@...>

Bug #3150: net/https peer verification doesn't do anything

11 messages 2010/04/15

[#29578] [Bug #3163] SyntaxError when using variable which is also a method in current scope with a Symbol argument — Benoit Daloze <redmine@...>

Bug #3163: SyntaxError when using variable which is also a method in current scope with a Symbol argument

17 messages 2010/04/17
[#29583] [Bug #3163] SyntaxError when using variable which is also a method in current scope with a Symbol argument — caleb clausen <redmine@...> 2010/04/18

Issue #3163 has been updated by caleb clausen.

[#29641] [Feature #3176] Thread#priority= should actually do something — caleb clausen <redmine@...>

Feature #3176: Thread#priority= should actually do something

28 messages 2010/04/19

[#29710] [Bug #3185] File.expand_path repeats forward slashes at the beginning of the path — Brian Ford <redmine@...>

Bug #3185: File.expand_path repeats forward slashes at the beginning of the path

10 messages 2010/04/21

[#29835] [Bug #3212] ConditionVariable may become inconsistent for interrupted threads — Sylvain Joyeux <redmine@...>

Bug #3212: ConditionVariable may become inconsistent for interrupted threads

24 messages 2010/04/28

[#29868] [Bug:trunk] assert now passes non-boolean result — Nobuyoshi Nakada <nobu@...>

Hi,

15 messages 2010/04/29

[ruby-core:29789] Re: [Bug #3140] gem activation has changed between 1.8 and 1.9

From: Evan Phoenix <evan@...>
Date: 2010-04-26 02:16:25 UTC
List: ruby-core #29789
See comment on patch below. Other than my comments, I'm fine with this.

Eric / Rich, could you weigh in?

 - Evan

On Apr 25, 2010, at 11:11 AM, Nobuyoshi Nakada wrote:

> Hi,
> 
> At Fri, 16 Apr 2010 03:08:27 +0900,
> Evan Phoenix wrote in [ruby-core:29537]:
>> This moves the RubyGem custom require into the prelude and
>> triggers the full loading of RubyGems itself if the normal
>> require raises a LoadError. It fixes the problem because the
>> highest version gems are no longer pushed on $LOAD_PATH,
>> allowing RubyGems to activate gems and the proper
>> dependencies.
> 
> I don't like the duplication, so changed to keep #require
> staying in custom_require.rb and introduce Gem.try_activate.
> 
> 
> diff --git c/common.mk i/common.mk
> index 36174c3..30b31c8 100644
> --- c/common.mk
> +++ i/common.mk
> @@ -733,7 +733,9 @@ known_errors.inc: $(srcdir)/template/known_errors.inc.tmpl $(srcdir)/defs/known_
> miniprelude.c: $(srcdir)/tool/compile_prelude.rb $(srcdir)/prelude.rb
> 	$(BASERUBY) -I$(srcdir) $(srcdir)/tool/compile_prelude.rb $(srcdir)/prelude.rb $@
> 
> -prelude.c: $(srcdir)/tool/compile_prelude.rb $(RBCONFIG) $(srcdir)/lib/rubygems/defaults.rb $(PRELUDE_SCRIPTS) $(PREP)
> +prelude.c: $(srcdir)/tool/compile_prelude.rb $(RBCONFIG) \
> +	   $(srcdir)/lib/rubygems/defaults.rb $(srcdir)/lib/rubygems/custom_require.rb \
> +	   $(PRELUDE_SCRIPTS) $(PREP)
> 	$(COMPILE_PRELUDE) $(PRELUDE_SCRIPTS) $@
> 
> golf_prelude.c: $(srcdir)/tool/compile_prelude.rb $(RBCONFIG) $(srcdir)/prelude.rb $(srcdir)/golf_prelude.rb $(PREP)
> diff --git c/gem_prelude.rb i/gem_prelude.rb
> index 71f30bd..09b8f3a 100644
> --- c/gem_prelude.rb
> +++ i/gem_prelude.rb
> @@ -1,4 +1,3 @@
> -# depends on: array.rb dir.rb env.rb file.rb hash.rb module.rb regexp.rb
> # vim: filetype=ruby
> 
> # NOTICE: Ruby is during initialization here.
> @@ -13,7 +12,8 @@ if defined?(Gem) then
>   module Kernel
> 
>     def gem(gem_name, *version_requirements)
> -      Gem.push_gem_version_on_load_path(gem_name, *version_requirements)
> +      Gem::QuickLoader.load_full_rubygems_library
> +      gem gem_name, *version_requirements
>     end
>     private :gem
>   end
> @@ -133,29 +133,27 @@ if defined?(Gem) then
>     end
> 
>     module QuickLoader
> -
> -      @loaded_full_rubygems_library = false
> -
>       def self.load_full_rubygems_library
> -        return if @loaded_full_rubygems_library
> +        return @loaded_full_rubygems_library if defined?(@loaded_full_rubygems_library)
> 
> -        @loaded_full_rubygems_library = true
> +        @loaded_full_rubygems_library = false
> 
>         class << Gem
>           undef_method(*Gem::GEM_PRELUDE_METHODS)
> -          undef_method :const_missing
> -          undef_method :method_missing
> -        end
> -
> -        Kernel.module_eval do
> -          undef_method :gem if method_defined? :gem
>         end
> 
>         $".delete path_to_full_rubygems_library
>         if $".any? {|path| path.end_with?('/rubygems.rb')}
>           raise LoadError, "another rubygems is already loaded from #{path}"
>         end
> +
> +        verbose, debug = $VERBOSE, $DEBUG
> +        $VERBOSE = $DEBUG = nil
> +
>         require 'rubygems'
> +        @loaded_full_rubygems_library = true
> +      ensure
> +        $VERBOSE, $DEBUG = verbose, debug
>       end
> 
>       def self.fake_rubygems_as_loaded
> @@ -177,95 +175,6 @@ if defined?(Gem) then
>         end
>       end
> 
> -      GemPaths = {}
> -      GemVersions = {}
> -
> -      def push_gem_version_on_load_path(gem_name, *version_requirements)
> -        if version_requirements.empty?
> -          unless GemPaths.has_key?(gem_name) then
> -            raise Gem::LoadError, "Could not find RubyGem #{gem_name} (>= 0)\n"
> -          end
> -
> -          # highest version gems already active
> -          return false
> -        else
> -          if version_requirements.length > 1 then
> -            QuickLoader.load_full_rubygems_library
> -            return gem(gem_name, *version_requirements)
> -          end
> -
> -          requirement, version = version_requirements[0].split
> -          requirement.strip!
> -
> -          if loaded_version = GemVersions[gem_name] then
> -            case requirement
> -            when ">", ">=" then
> -              return false if
> -                (loaded_version <=> Gem.integers_for(version)) >= 0
> -            when "~>" then
> -              required_version = Gem.integers_for version
> -
> -              return false if loaded_version.first == required_version.first
> -            end
> -          end
> -
> -          QuickLoader.load_full_rubygems_library
> -          gem gem_name, *version_requirements
> -        end
> -      end
> -
> -      def integers_for(gem_version)
> -        numbers = gem_version.split(".").collect {|n| n.to_i}
> -        numbers.pop while numbers.last == 0
> -        numbers << 0 if numbers.empty?
> -        numbers
> -      end
> -
> -      def push_all_highest_version_gems_on_load_path
> -        Gem.path.each do |path|
> -          gems_directory = File.join(path, "gems")
> -
> -          if File.exist?(gems_directory) then
> -            Dir.entries(gems_directory).each do |gem_directory_name|
> -              next if gem_directory_name == "." || gem_directory_name == ".."
> -
> -              next unless gem_name = gem_directory_name[/(.*)-(.*)/, 1]
> -              new_version = integers_for($2)
> -              current_version = GemVersions[gem_name]
> -
> -              if !current_version or (current_version <=> new_version) < 0 then
> -                GemVersions[gem_name] = new_version
> -                GemPaths[gem_name] = File.join(gems_directory, gem_directory_name)
> -              end
> -            end
> -          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
> -          else
> -            require_paths << file if File.exist?(file = File.join(path, "bin"))
> -            require_paths << 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)
> -        end
> -        # gem directories must come after -I and ENV['RUBYLIB']
> -        $:[$:.index{|e|e.instance_variable_defined?(:@gem_prelude_index)}||-1,0] = require_paths
> -      end
> -
>       def const_missing(constant)
>         QuickLoader.load_full_rubygems_library
> 
> @@ -285,10 +194,15 @@ if defined?(Gem) then
> 
>     extend QuickLoader
> 
> +    def self.try_activate(path) # :nodoc:
> +      QuickLoader.load_full_rubygems_library
> +    end
> +
>   end

Doesn't the try_activate in prelude need to load full rubygems, then call try_activate again so that the proper version is called the first time try_activate is used?

> 
>   begin
> -    Gem.push_all_highest_version_gems_on_load_path
> +    require 'lib/rubygems/custom_require.rb'
> +
>     Gem::QuickLoader.fake_rubygems_as_loaded
>   rescue Exception => e
>     puts "Error loading gem paths on load path in gem_prelude"
> diff --git c/lib/rubygems.rb i/lib/rubygems.rb
> index d2214f6..29dd815 100644
> --- c/lib/rubygems.rb
> +++ i/lib/rubygems.rb
> @@ -1020,8 +1020,6 @@ end
> 
> module Kernel
> 
> -  undef gem if respond_to? :gem # defined in gem_prelude.rb on 1.9
> -
>   ##
>   # Use Kernel#gem to activate a specific version of +gem_name+.
>   #
> @@ -1098,13 +1096,34 @@ end
> 
> require 'rubygems/config_file'
> 
> +class << Gem
> +  verbose, debug = $VERBOSE, $DEBUG
> +  $VERBOSE = $DEBUG = nil

Why is setting $VERBOSE and $DEBUG needed?

> +
> +  ##
> +  #
> +  # Called from the custom_require to attempt to activate +path+
> +  # Internal use only.
> +
> +  def try_activate(path) # :doc:
> +    spec = Gem.searcher.find(path)
> +    return false unless spec
> +
> +    Gem.activate(spec.name, "= #{spec.version}")
> +    return true
> +  end
> +
> +ensure
> +  $VERBOSE, $DEBUG = verbose, debug
> +end
> +
> ##
> # 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.
> 
> -require 'rubygems/custom_require' if gem_disabled or RUBY_VERSION < '1.9'
> +require 'rubygems/custom_require'
> 
> Gem.clear_paths
> 
> diff --git c/lib/rubygems/custom_require.rb i/lib/rubygems/custom_require.rb
> index 43b3136..343ad31 100644
> --- c/lib/rubygems/custom_require.rb
> +++ i/lib/rubygems/custom_require.rb
> @@ -4,8 +4,6 @@
> # See LICENSE.txt for permissions.
> #++
> 
> -require 'rubygems'
> -
> module Kernel
> 
>   ##
> @@ -31,8 +29,7 @@ module Kernel
>     gem_original_require path
>   rescue LoadError => load_error
>     if load_error.message.end_with?(path) and
> -       spec = Gem.searcher.find(path) then
> -      Gem.activate(spec.name, "= #{spec.version}")
> +       Gem.try_activate(path) then
>       gem_original_require path
>     else
>       raise load_error
> @@ -42,5 +39,5 @@ module Kernel
>   private :require
>   private :gem_original_require
> 
> -end
> +end unless Kernel.private_method_defined?(:gem_original_require)
> 
> 
> 
> -- 
> Nobu Nakada
> 
> 


In This Thread