Bugs item #25882, was opened at 2009-05-12 05:01
You can respond by visiting:
http://rubyforge.org/tracker/?func=detail&atid=575&aid=25882&group_id=126
Category: `gem install` command
Group: v1.3.x
Status: Open
Resolution: None
Priority: 3
Submitted By: Lars Christensen (larsch)
Assigned to: Nobody (None)
Summary: Handling of Windows paths broken in 1.3.3
Initial Comment:
Installing gems from local drives other than the current is broken on Windows.
RubyGems strips the drive letter (through using the URI class for something
which isn't an URI).
C:\> gem install p:\path\to\mygem-2.1.18.gem
ERROR: While executing gem ... (Errno::ENOENT)
No such file or directory - /path/to/mygem-2.1.18.gem
Then I tried to pass a valid URI:
C:\> gem install file:///p:/path/to/mygem-2.1.18.gem
But that doesn't work either;
ERROR: could not find gem file:///p:/path/to/mygem-2.1.18.gem locally or in a
repository
I believe this is because URI#path returns "/p:/path/to/mygem..." (with leading
slash), which is not a valid path on Windows.
Finally, I attempted to hack RubyGems to prefix file:/// itself, but I don't
understand the reason for this line of code in remote_fetcher.rb:
remote_gem_path = File.join(path, 'gems', gem_file_name)
That causes this error instead:
ERROR: While executing gem ... (Errno::ENOENT)
No such file or directory - p:/path/to/gems/mygem-2.1.18.gem
Notice the extra /gems/ path.
----------------------------------------------------------------------
>Comment By: Daniel Berger (djberg96)
Date: 2009-05-12 06:46
Message:
Looks like a bug in line 142 of remote_fetcher.rb related to the URI class and
the fact that we're stripping the scheme off of Windows paths.
It works for "C:" because, iirc, certain Ruby core File methods assume "C:" if
no drive is found. We'll have to fix this.
Regards,
Dan
----------------------------------------------------------------------
Comment By: Daniel Berger (djberg96)
Date: 2009-05-12 06:22
Message:
Well, this is odd. I tried installing from an explicit path using "C:\Documents
and Settings\djberge". That worked fine. But, when I tried to install from a
drive other than "C:", things went bad:
C:\Documents and Settings\djberge>gem install "z:\djberge on my
mac\documents\workspace\ptools\ptools-1.1.7.gem" --verbose --debug
Exception `NameError' at
C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:161 - uninitialized
constant Gem::Commands::InstallCommand
Exception `IOError' at C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/format.rb:50 -
closed stream
Installing gem ptools-1.1.7
Exception `Errno::ENOENT' at C:/Ruby/lib/ruby/1.8/fileutils.rb:1200 - No such
file or directory - /djberge on my
mac/documents/workspace/ptools/ptools-1.1.7.gem
ERROR: While executing gem ... (Errno::ENOENT)
No such file or directory - /djberge on my
mac/documents/workspace/ptools/ptools-1.1.7.gem
C:/Ruby/lib/ruby/1.8/fileutils.rb:1200:in `stat'
C:/Ruby/lib/ruby/1.8/fileutils.rb:1200:in `lstat'
C:/Ruby/lib/ruby/1.8/fileutils.rb:1178:in `stat'
C:/Ruby/lib/ruby/1.8/fileutils.rb:1260:in `copy_file'
C:/Ruby/lib/ruby/1.8/fileutils.rb:463:in `copy_file'
C:/Ruby/lib/ruby/1.8/fileutils.rb:383:in `cp'
C:/Ruby/lib/ruby/1.8/fileutils.rb:1395:in `fu_each_src_dest'
C:/Ruby/lib/ruby/1.8/fileutils.rb:1411:in `fu_each_src_dest0'
C:/Ruby/lib/ruby/1.8/fileutils.rb:1393:in `fu_each_src_dest'
C:/Ruby/lib/ruby/1.8/fileutils.rb:382:in `cp'
C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/remote_fetcher.rb:142:in
`download'
C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/dependency_installer.rb:232:in
`install'
C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/dependency_installer.rb:222:in
`each'
C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/dependency_installer.rb:222:in
`install'
C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/commands/install_command.rb:78:in
`execute'
C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/commands/install_command.rb:75:in `each'
C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/commands/install_command.rb:75:in
`execute'
C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/command.rb:254:in `invoke'
C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:132:in
`process_args'
C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/command_manager.rb:102:in `run'
C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/gem_runner.rb:58:in `run'
C:/Ruby/bin/gem:21
I'll have to investigate further to determine if this is a bug in rubygems or
fileutils.
Regards,
Dan
----------------------------------------------------------------------
Comment By: Daniel Berger (djberg96)
Date: 2009-05-12 05:20
Message:
The use of file urls is meant for use with the --source flag (i.e. from a local
repository), which is why the method includes the 'gems' directory.
However, the "gem install p:\path\to\mygem-2.1.18.gem" should work. I'll take a
look.
Regards,
Dan
----------------------------------------------------------------------
You can respond by visiting:
http://rubyforge.org/tracker/?func=detail&atid=575&aid=25882&group_id=126
_______________________________________________
Rubygems-developers mailing list
http://rubyforge.org/projects/rubygems
[email protected]
http://rubyforge.org/mailman/listinfo/rubygems-developers