Bug #1366
closedPathname#relative_path_from should handle the scenario where the argument uses a different case for the Windows drive letter
Description
=begin
On Windows, the case of the drive letter can be either upper case or lower case (eg, "C:" or "c:") on the same machine at the same time in different Command Prompt Windows (see below for details). Dir.pwd will return 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 an ArgumentError when comparing Dir.pwd and FILE using Pathname#relative_path_from. This happens with version 1.9.1p0 as well. Pathname#relative_path_from should deal with the case where the case of the argument is different.
Here is the result when running from a Command Prompt which is using capital case for the drive letter as can be seen from the prompt "C:\Users\sborde".
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\test.rb
c:/Ruby/lib/ruby/1.8/pathname.rb:709:in `relative_path_from': different prefix:
"C:/" and "c:/bugs/test.rb" (ArgumentError)
from c:/bugs/test.rb:2
Here are the steps to get two Command Prompts with different cases for the drive letter:
- Create two shortcuts on the Desktop pointing to "c:\Windows\system32\cmd.exe"
- Right-click to change the properties.
- For one of the shortcuts, set the "Start in" folder to "C:" (upper case). For the other one, set it to "c:" (lower case).
- Double the click the shortcuts
- Observe that the prompt in the first one is "C:>" (upper case), and "c:" (lower case) in the second one.
- Run test.rb shown above from both Command Prompts. An ArgumentError will be thrown from the first Command Prompt with the upper case prompt.
=end
Updated by nobu (Nobuyoshi Nakada) over 15 years ago
- Category set to lib
- Status changed from Open to Assigned
- Assignee set to yugui (Yuki Sonoda)
- Target version set to 1.9.1
=begin
Already fixed in r23093, and would be backported by the next patch release.
=end