Bug #7496

incorrect base_dir for default gemspecs

Added by Jeremy Kemper over 1 year ago. Updated over 1 year ago.

[ruby-core:50475]
Status:Closed
Priority:Normal
Assignee:Eric Hodel
Category:lib
Target version:2.0.0
ruby -v:ruby 2.0.0dev (2012-12-01 trunk 38126) [x86_64-darwin12.2.0] Backport:

Description

gemspecs for default gems have incorrect path since they're installed in a subdirectory of the normal specifications path. The basedir is dirname(dirname(loadedfrom)), so using an additional subdir results in a base_dir that's "off by one." Example:

Find the gemspec for the default rake gem:

spec = Gem::Specification.findbyname('rake')
=> #
spec.defaultgem?
=> true
spec.loaded
from
=> "/Users/jeremy/.rbenv/versions/2.0.0-preview2/lib/ruby/gems/2.0.0/specifications/default/rake-0.9.5.gemspec"

The spec.base_dir should be "/Users/jeremy/.rbenv/versions/2.0.0-preview2/lib/ruby/gems/2.0.0"

spec.base_dir
=> "/Users/jeremy/.rbenv/versions/2.0.0-preview2/lib/ruby/gems/2.0.0/specifications"

This means Gem.bin_path lookups in bin/rake, etc result in incorrect executable paths:

spec.bin_file('rake')
=> "/Users/jeremy/.rbenv/versions/2.0.0-preview2/lib/ruby/gems/2.0.0/specifications/gems/rake-0.9.5/bin/rake"
File.file? _
=> false

Associated revisions

Revision 38229
Added by Eric Hodel over 1 year ago

  • lib/rubygems/package.rb: Set rubygems_version before validation. Fixes issue with bundler.
  • test/rubygems/testgempackage.rb: Test for above.

  • lib/rubygems/remote_fetcher.rb: Only update the cache when we have
    permission. [ruby-trunk - Bug #7509]

  • lib/rubygems/source.rb (class Gem): ditto

  • test/rubygems/testgemremote_fetcher.rb: Test for above.

  • lib/rubygems/test_utilities.rb: ditto

  • lib/rubygems/specification.rb: Derive base_dir properly for default
    gems. [ruby-trunk - Bug #7496]

  • test/rubygems/testgemspecification.rb: Test for above.

  • lib/rubygems.rb: Untaint Dir.pwd when searching for gemdeps files
    for operation under $SAFE=1

History

#1 Updated by Luis Lavena over 1 year ago

  • Status changed from Open to Assigned
  • Assignee set to Eric Hodel

#2 Updated by Eric Hodel over 1 year ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r38229.
Jeremy, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


  • lib/rubygems/package.rb: Set rubygems_version before validation. Fixes issue with bundler.
  • test/rubygems/testgempackage.rb: Test for above.

  • lib/rubygems/remote_fetcher.rb: Only update the cache when we have
    permission. [ruby-trunk - Bug #7509]

  • lib/rubygems/source.rb (class Gem): ditto

  • test/rubygems/testgemremote_fetcher.rb: Test for above.

  • lib/rubygems/test_utilities.rb: ditto

  • lib/rubygems/specification.rb: Derive base_dir properly for default
    gems. [ruby-trunk - Bug #7496]

  • test/rubygems/testgemspecification.rb: Test for above.

  • lib/rubygems.rb: Untaint Dir.pwd when searching for gemdeps files
    for operation under $SAFE=1

#3 Updated by Jeremy Kemper over 1 year ago

Thank you!

Also available in: Atom PDF