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: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
Rubygems-developers@rubyforge.org
http://rubyforge.org/mailman/listinfo/rubygems-developers

Reply via email to