[#29233] [Bug #3085] Time dumping/loading using Psych — Tomo Kazahaya <redmine@...>
Bug #3085: Time dumping/loading using Psych
Issue #3085 has been updated by Aaron Patterson.
2010/4/4 Aaron Patterson <redmine@ruby-lang.org>:
[#29247] [Bug:trunk] matrix test failures — Tanaka Akira <akr@...>
matrix test fails as follows.
[#29255] [Bug #3092] IO Broken with Latest Windows — Charlie Savage <redmine@...>
Bug #3092: IO Broken with Latest Windows
[#29270] Proposal: Module#thunk_method — Charles Oliver Nutter <headius@...>
Many people use define_method solely so they can define a new method
On Apr 5, 2010, at 5:42 PM, Charles Oliver Nutter wrote:
Joshua Ballanco wrote:
Because often the pattern is to do the calculation and then define a
On Apr 6, 2010, at 4:17 PM, Charles Oliver Nutter wrote:
[#29287] [Bug #3102] Rubygems should avoid deprecated yaml api — Aaron Patterson <redmine@...>
Bug #3102: Rubygems should avoid deprecated yaml api
[#29291] [Bug #3104] Random: seeding issues — Marc-Andre Lafortune <redmine@...>
Bug #3104: Random: seeding issues
[#29293] URI.(un)escape deprecated? — Marc-Andre Lafortune <ruby-core-mailing-list@...>
Hi.
2010/4/7 Marc-Andre Lafortune <ruby-core-mailing-list@marc-andre.ca>:
On Thu, Apr 8, 2010 at 5:22 PM, Tanaka Akira <akr@fsij.org> wrote:
> So, Yui, could you please tell us what motivated this change and what
2010/4/9 NARUSE, Yui <naruse@airemix.jp>:
On Thu, Apr 8, 2010 at 10:31 PM, Tanaka Akira <akr@fsij.org> wrote:
2010/4/9 Austin Ziegler <halostatue@gmail.com>:
Hi,
[#29295] [Bug #3105] seg faults and bus errors with ruby 1.8.7 p249 — Greg Ferguson <redmine@...>
Bug #3105: seg faults and bus errors with ruby 1.8.7 p249
[#29313] [Bug #3112] require "yaml" doesn't use psych as default — Usaku NAKAMURA <redmine@...>
Bug #3112: require "yaml" doesn't use psych as default
Issue #3112 has been updated by Yui NARUSE.
On Thu, Apr 08, 2010 at 02:06:55PM +0900, Yui NARUSE wrote:
On 4/8/10, Aaron Patterson <aaron@tenderlovemaking.com> wrote:
First of all, people want compatibility.
I found Aaron added YAML.quick_emit to Psych, thank.
On Sat, Apr 10, 2010 at 07:11:28PM +0900, NARUSE, Yui wrote:
(2010/04/11 8:48), Aaron Patterson wrote:
On Sun, Apr 11, 2010 at 09:20:15AM +0900, NARUSE, Yui wrote:
Issue #3112 has been updated by Anshul Khandelwal.
[#29427] [Bug #3124] SocketError on SnowLeopard (during make test-all) — Aaron Patterson <redmine@...>
Bug #3124: SocketError on SnowLeopard (during make test-all)
[#29447] [RubySpec #3128] Randomness specs — Marc-Andre Lafortune <redmine@...>
RubySpec #3128: Randomness specs
[#29462] [Feature #3131] add Kernel#Hash() method like Kernel#Array() — Suraj Kurapati <redmine@...>
Feature #3131: add Kernel#Hash() method like Kernel#Array()
[#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
[#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
Issue #3140 has been updated by Aaron Patterson.
Hi,
We are about to ship a version of Ruby with a built in package manager with
On Fri, Jul 2, 2010 at 6:19 PM, Yehuda Katz <wycats@gmail.com> wrote:
On Sat, Jul 03, 2010 at 07:48:04AM +0900, Luis Lavena wrote:
After a brief discussion with Eric Hodel about this, there are a few questions before we can figure out how to solve this:
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.
I wrote this original code in gem_prelude.
Hi,
See comment on patch below. Other than my comments, I'm fine with this.
Since no one has responded, nobu, can you go ahead and commit it?
Issue #3140 has been updated by Yusuke Endoh.
Issue #3140 has been updated by Yusuke Endoh.
> I've commited the patch to trunk.
Hi,
> Roger, could you re-try to build from scratch? ould you apply
> I'll try with 1_9_2 next.
2010/7/14 Roger Pack <rogerdpack2@gmail.com>:
On Sun, Jul 11, 2010 at 10:23 AM, Yusuke ENDOH <mame@tsg.ne.jp> wrote:
Hi,
Uh-oh, rc2 has been released.
On Sun, Jul 11, 2010 at 12:26 PM, Yusuke ENDOH <mame@tsg.ne.jp> wrote:
Hi,
Issue #3140 has been updated by Yehuda Katz.
Hi,
Hi,
> If you 'gem install mongrel' on 1.9, it will fail (for a valid reason). The directory is not removed because that would prevent users from debugging the build process by reading 'gem_make.out' that is left there for this purpose.
[#29528] [Bug #3150] net/https peer verification doesn't do anything — Hongli Lai <redmine@...>
Bug #3150: net/https peer verification doesn't do anything
[#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
Issue #3163 has been updated by caleb clausen.
On 18 April 2010 02:06, caleb clausen <redmine@ruby-lang.org> wrote:
On 4/17/10, Benoit Daloze <eregontp@gmail.com> wrote:
On 18.04.10 04:34, Caleb Clausen wrote:
On 4/17/10, Kornelius Kalnbach <murphy@rubychan.de> wrote:
On 17.04.10 20:26, Benoit Daloze wrote:
>as in a ? b : c.
On 18.04.10 16:10, Benoit Daloze wrote:
[#29601] [Bug #3167] RDoc issues in interactive mode — Benoit Daloze <redmine@...>
Bug #3167: RDoc issues in interactive mode
[#29608] [Bug #3169] RDoc crossref confused by instance and class methods having same name — Marc-Andre Lafortune <redmine@...>
Bug #3169: RDoc crossref confused by instance and class methods having same name
Issue #3169 has been updated by Eric Hodel.
On 19.04.10 05:36, Eric Hodel wrote:
On Apr 18, 2010, at 21:28, Kornelius Kalnbach wrote:
[#29641] [Feature #3176] Thread#priority= should actually do something — caleb clausen <redmine@...>
Feature #3176: Thread#priority= should actually do something
Issue #3176 has been updated by Yusuke Endoh.
> Issue #3176 has been updated by Yusuke Endoh.
On 5/15/10, KOSAKI Motohiro <kosaki.motohiro@gmail.com> wrote:
Issue #3176 has been updated by caleb clausen.
> I tried to make it use pthread_setschedparam on linux. That would seem to be
Issue #3176 has been updated by caleb clausen.
Issue #3176 has been updated by caleb clausen.
[#29670] "include X; include Y" vs "include X, Y" — Daniel Berger <djberg96@...>
Hi,
[#29677] anonymous Module#name returns nil in 1.9 — Ryan Davis <ryand-ruby@...>
Is this intentional?
[#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
Issue #3185 has been updated by Brian Ford.
[#29745] [Bug #3191] imap exits on login with invalid credentials — Karl Baum <redmine@...>
Bug #3191: imap exits on login with invalid credentials
[#29812] identifying process of show stoppers for 1.9.2 release — Yusuke ENDOH <mame@...>
Hi, all
Yusuke ENDOH wrote:
[#29835] [Bug #3212] ConditionVariable may become inconsistent for interrupted threads — Sylvain Joyeux <redmine@...>
Bug #3212: ConditionVariable may become inconsistent for interrupted threads
Issue #3212 has been updated by Sylvain Joyeux.
Hi,
On 5/5/10, Yusuke ENDOH <mame@tsg.ne.jp> wrote:
Hi,
On 5/6/10, Yusuke ENDOH <mame@tsg.ne.jp> wrote:
Hi,
[#29845] [Bug #3215] Windows: IO.popen returns "handle is invalid" — Christian Höltje <redmine@...>
Bug #3215: Windows: IO.popen returns "handle is invalid"
[#29863] [Bug #3216] #join in thwait.rb only waits for first thread — Roger Pack <redmine@...>
Bug #3216: #join in thwait.rb only waits for first thread
[#29868] [Bug:trunk] assert now passes non-boolean result — Nobuyoshi Nakada <nobu@...>
Hi,
Issue #3219 has been updated by caleb clausen.
[#29874] [Bug #3220] bug in gc.c — Aaron Patterson <redmine@...>
Bug #3220: bug in gc.c
[ruby-core:29537] Re: [Bug #3140] gem activation has changed between 1.8 and 1.9
On Apr 14, 2010, at 8:36 PM, Rich Kilmer wrote: > I wrote this original code in gem_prelude. > > The intent of this was threefold: > > 1) Make RubyGems packaged files accessible with require/load in 1.9 > without having to require 'rubygems' > 2) Minimize startup time (don't load the full rubygems library if its > not going to be used) > 3) Load rubygems proper if need be. > <snip> > I would prefer C. I know we don't have a lot of time before 1.9.2 but > if we get our ducks in a row we can make this work...it does need to > be fixed. I've gone ahead and implemented an option D, which is very similar to the original suggestion made for RubyGems back in 2007 (blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/12792). 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. This isn't as nice as Rich's suggestions, but it's possible to do easily without changes load.c. I've attached the patch for comment. Thanks! - Evan
Attachments (1)
Index: gem_prelude.rb
===================================================================
--- gem_prelude.rb (revision 27351)
+++ gem_prelude.rb (working copy)
@@ -1,23 +1,15 @@
-# depends on: array.rb dir.rb env.rb file.rb hash.rb module.rb regexp.rb
# vim: filetype=ruby
+# WARN
# NOTICE: Ruby is during initialization here.
# * Encoding.default_external does not reflects -E.
# * Should not expect Encoding.default_internal.
# * Locale encoding is available.
+# The implementation must define the Gem module before loading this prelude
+# to indicate that it wants the prelude to introduce rubygems functionality.
if defined?(Gem) then
- # :stopdoc:
-
- module Kernel
-
- def gem(gem_name, *version_requirements)
- Gem.push_gem_version_on_load_path(gem_name, *version_requirements)
- end
- private :gem
- end
-
module Gem
ConfigMap = {
@@ -66,8 +58,8 @@
end
def self.set_home(home)
- home = home.dup.force_encoding(Encoding.find('filesystem'))
- home.gsub!(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
+ home = home.dup.force_encoding Encoding.find('filesystem')
+ home.gsub! File::ALT_SEPARATOR, File::SEPARATOR if File::ALT_SEPARATOR
@gem_home = home
end
@@ -88,11 +80,12 @@
end
@gem_path.uniq!
- @gem_path.map!{|x|x.force_encoding(Encoding.find('filesystem'))}
+ @gem_path.map! { |dir| dir.force_encoding Encoding.find('filesystem') }
end
def self.user_home
- @user_home ||= File.expand_path("~").force_encoding(Encoding.find('filesystem'))
+ @user_home ||= File.expand_path("~").force_encoding \
+ Encoding.find('filesystem')
rescue
if File::ALT_SEPARATOR then
"C:/"
@@ -106,7 +99,6 @@
require 'lib/rubygems/defaults.rb'
# end rubygems/defaults
-
##
# Methods before this line will be removed when QuickLoader is replaced
# with the real RubyGems
@@ -135,6 +127,7 @@
module QuickLoader
@loaded_full_rubygems_library = false
+ @loading_full_rubygems = false
def self.load_full_rubygems_library
return if @loaded_full_rubygems_library
@@ -154,120 +147,52 @@
end
$".delete path_to_full_rubygems_library
+
$".each do |path|
- if /#{Regexp.escape File::SEPARATOR}rubygems\.rb\z/ =~ path
+ if /#{Regexp.escape File::SEPARATOR}rubygems\.rb\z/ =~ path then
raise LoadError, "another rubygems is already loaded from #{path}"
end
end
+
+ @loading_full_rubygems = true
require 'rubygems'
+ @loading_full_rubygems = false
end
def self.fake_rubygems_as_loaded
path = path_to_full_rubygems_library
- $" << path unless $".include?(path)
+ $" << 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')
+ installed_path = File.join(Gem::ConfigMap[:rubylibprefix],
+ Gem::ConfigMap[:ruby_version])
+
+ if $:.include? installed_path then
+ 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
+ path = File.join(dir, 'rubygems.rb')
+ return path if File.exist?(path)
end
+
raise LoadError, 'rubygems.rb'
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
+ QuickLoader.load_full_rubygems_library
+ gem gem_name, *version_requirements
+ 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
-
+ def self.try_require(path)
+ unless @loaded_full_rubygems_library
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
+ return false if @loading_full_rubygems
- 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
+ Gem.try_require(path)
end
def const_missing(constant)
@@ -291,8 +216,53 @@
end
+ # :stopdoc:
+
+ module Kernel
+
+ def gem(gem_name, *version_requirements)
+ Gem.push_gem_version_on_load_path(gem_name, *version_requirements)
+ end
+
+ private :gem
+
+ ##
+ # The Kernel#require from before RubyGems was loaded.
+
+ alias gem_original_require require
+
+ ##
+ # When RubyGems is required, Kernel#require is replaced with our own which
+ # is capable of loading gems on demand.
+ #
+ # When you call <tt>require 'x'</tt>, this is what happens:
+ # * If the file can be loaded from the existing Ruby loadpath, it
+ # is.
+ # * Otherwise, installed gems are searched for a file that matches.
+ # If it's found in gem 'y', that gem is activated (added to the
+ # loadpath).
+ #
+ # The normal <tt>require</tt> functionality of returning false if
+ # that file has already been loaded is preserved.
+
+ def require(path) # :doc:
+ gem_original_require path
+ rescue LoadError => load_error
+ if load_error.message =~ /#{Regexp.escape path}\z/ then
+ unless Gem::QuickLoader.try_require(path)
+ raise load_error
+ end
+ end
+
+ raise load_error
+ end
+
+ private :require
+ private :gem_original_require
+
+ end
+
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"
Index: lib/rubygems/custom_require.rb
===================================================================
--- lib/rubygems/custom_require.rb (revision 27351)
+++ lib/rubygems/custom_require.rb (working copy)
@@ -6,6 +6,27 @@
require 'rubygems'
+if defined? Gem::QuickLoader
+
+module Gem
+
+ ##
+ #
+ # Called from the gem_prelude to attempt to activate +path+
+
+ def self.try_require(path) # :doc:
+ spec = Gem.searcher.find(path)
+ return false unless spec
+
+ Gem.activate(spec.name, "= #{spec.version}")
+ gem_original_require path
+
+ return true
+ end
+end
+
+else
+
module Kernel
##
@@ -44,3 +65,4 @@
end
+end
Index: lib/rubygems.rb
===================================================================
--- lib/rubygems.rb (revision 27351)
+++ lib/rubygems.rb (working copy)
@@ -1063,6 +1063,7 @@
end
require 'rubygems/config_file'
+require 'rubygems/custom_require'
Gem.clear_paths