Forum: IronRuby Case of drive letter

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Shri B. (Guest)
on 2009-04-07 22:50
(Received via mailing list)
Using MRI on Windows, Dir.pwd can use either lower-case or upper-case
for the drive letter ("C:/" or "c:/") depending on the Command Prompt it
is run from. However, __FILE__ always uses lower-case drive letter. This
can cause problems when comparing Dir.pwd and __FILE__. For eg,
Pathname#relative_path_from<http://ruby-doc.org/core/classes/Pathname.html#M001745>
raises an ArgumentError if the arguments use different cases for the
drive letter.

C:\Users\sborde> cat c:\bugs\rb1.rb
require 'pathname'
Pathname.new(Dir.pwd).relative_path_from(Pathname.new(__FILE__))

C:\Users\sborde> c:\Ruby\bin\ruby.exe c:\bugs\rb1.rb
c:/Ruby/lib/ruby/1.8/pathname.rb:709:in `relative_path_from': different
prefix:
"C:/" and "c:/bugs/rb1.rb" (ArgumentError)
        from c:/bugs/rb1.rb:2

I did not find any good documentation on which case is used by Command
Prompt, but https://lists.ubuntu.com/archives/bazaar/2006q2/013921.html
refers to the issue. I can create Command Prompts with either case by
creating a shortcut on the desktop, and specifying a "Start in" folder
property for the shortcut. Command Prompt will use the case specified
for the "Start in" folder.

Does anyone have experience dealing with this issue? What is the
recommended solution? I would rather not check the case of the drive
letter manually. I looked for APIs which would convert the drive letter
to lower-case, but could not find anything.

Thanks,
Shri
Jimmy S. (Guest)
on 2009-04-21 22:00
(Received via mailing list)
(Responding late ... hopefully this is still useful)

>>> __FILE__ always uses lower-case drive letter

__FILE__ is just the value you gave to require/load. __FILE__ and
$PROGRAM_NAME only get munged with when running ruby.exe, but it doesn't
touch casing, only changes all directory separators to '/'.

# c:\dev\foo.rb
module Foo
  def self.file
    __FILE__
  end
end
puts Foo.file

c:\dev\ironruby>irb
irb(main):001:0> load 'C:\dev\foo.rb'
"C:\\dev\\foo.rb"
=> true

c:\dev\ironruby>irb
irb(main):001:0> load 'c:\dev\foo.rb'
"c:\\dev\\foo.rb"
=> true

c:\dev\ironruby>ruby c:\dev\foo.rb
c:/dev/foo.rb

c:\dev\ironruby>ruby C:\dev\foo.rb
C:/dev/foo.rb

My recent __FILE__ changes made IronRuby work identically to MRI, but
that only changes the path separator, does nothing with casing. IronRuby
behaves the same as this.

~js

From: removed_email_address@domain.invalid
[mailto:removed_email_address@domain.invalid] On Behalf Of Shri B.
Sent: Tuesday, April 07, 2009 11:36 AM
To: removed_email_address@domain.invalid
Subject: [Ironruby-core] Case of drive letter

Using MRI on Windows, Dir.pwd can use either lower-case or upper-case
for the drive letter ("C:/" or "c:/") depending on the Command Prompt it
is run from. However, __FILE__ always uses lower-case drive letter. This
can cause problems when comparing Dir.pwd and __FILE__. For eg,
Pathname#relative_path_from<http://ruby-doc.org/core/classes/Pathname.html#M001745>
raises an ArgumentError if the arguments use different cases for the
drive letter.

C:\Users\sborde> cat c:\bugs\rb1.rb
require 'pathname'
Pathname.new(Dir.pwd).relative_path_from(Pathname.new(__FILE__))

C:\Users\sborde> c:\Ruby\bin\ruby.exe c:\bugs\rb1.rb
c:/Ruby/lib/ruby/1.8/pathname.rb:709:in `relative_path_from': different
prefix:
"C:/" and "c:/bugs/rb1.rb" (ArgumentError)
        from c:/bugs/rb1.rb:2

I did not find any good documentation on which case is used by Command
Prompt, but https://lists.ubuntu.com/archives/bazaar/2006q2/013921.html
refers to the issue. I can create Command Prompts with either case by
creating a shortcut on the desktop, and specifying a "Start in" folder
property for the shortcut. Command Prompt will use the case specified
for the "Start in" folder.

Does anyone have experience dealing with this issue? What is the
recommended solution? I would rather not check the case of the drive
letter manually. I looked for APIs which would convert the drive letter
to lower-case, but could not find anything.

Thanks,
Shri
Shri B. (Guest)
on 2009-04-21 22:27
(Received via mailing list)
The case issue is tracked by the following MRI bug  -
http://redmine.ruby-lang.org/issues/show/1266. It will be fixed in some
future version of MRI.

From: removed_email_address@domain.invalid
[mailto:removed_email_address@domain.invalid] On Behalf Of Jimmy
Schementi
Sent: Tuesday, April 21, 2009 10:59 AM
To: removed_email_address@domain.invalid
Subject: Re: [Ironruby-core] Case of drive letter

(Responding late ... hopefully this is still useful)

>>> __FILE__ always uses lower-case drive letter

__FILE__ is just the value you gave to require/load. __FILE__ and
$PROGRAM_NAME only get munged with when running ruby.exe, but it doesn't
touch casing, only changes all directory separators to '/'.

# c:\dev\foo.rb
module Foo
  def self.file
    __FILE__
  end
end
puts Foo.file

c:\dev\ironruby>irb
irb(main):001:0> load 'C:\dev\foo.rb'
"C:\\dev\\foo.rb"
=> true

c:\dev\ironruby>irb
irb(main):001:0> load 'c:\dev\foo.rb'
"c:\\dev\\foo.rb"
=> true

c:\dev\ironruby>ruby c:\dev\foo.rb
c:/dev/foo.rb

c:\dev\ironruby>ruby C:\dev\foo.rb
C:/dev/foo.rb

My recent __FILE__ changes made IronRuby work identically to MRI, but
that only changes the path separator, does nothing with casing. IronRuby
behaves the same as this.

~js

From: removed_email_address@domain.invalid
[mailto:removed_email_address@domain.invalid] On Behalf Of Shri B.
Sent: Tuesday, April 07, 2009 11:36 AM
To: removed_email_address@domain.invalid
Subject: [Ironruby-core] Case of drive letter

Using MRI on Windows, Dir.pwd can use either lower-case or upper-case
for the drive letter ("C:/" or "c:/") depending on the Command Prompt it
is run from. However, __FILE__ always uses lower-case drive letter. This
can cause problems when comparing Dir.pwd and __FILE__. For eg,
Pathname#relative_path_from<http://ruby-doc.org/core/classes/Pathname.html#M001745>
raises an ArgumentError if the arguments use different cases for the
drive letter.

C:\Users\sborde> cat c:\bugs\rb1.rb
require 'pathname'
Pathname.new(Dir.pwd).relative_path_from(Pathname.new(__FILE__))

C:\Users\sborde> c:\Ruby\bin\ruby.exe c:\bugs\rb1.rb
c:/Ruby/lib/ruby/1.8/pathname.rb:709:in `relative_path_from': different
prefix:
"C:/" and "c:/bugs/rb1.rb" (ArgumentError)
        from c:/bugs/rb1.rb:2

I did not find any good documentation on which case is used by Command
Prompt, but https://lists.ubuntu.com/archives/bazaar/2006q2/013921.html
refers to the issue. I can create Command Prompts with either case by
creating a shortcut on the desktop, and specifying a "Start in" folder
property for the shortcut. Command Prompt will use the case specified
for the "Start in" folder.

Does anyone have experience dealing with this issue? What is the
recommended solution? I would rather not check the case of the drive
letter manually. I looked for APIs which would convert the drive letter
to lower-case, but could not find anything.

Thanks,
Shri
This topic is locked and can not be replied to.