From: Shri Borde Date: 2009-04-09T02:40:27+09:00 Subject: [ruby-core:23164] [Bug #1366] Pathname#relative_path_from should handle the scenario where the argument uses a different case for the Windows drive letter Bug #1366: Pathname#relative_path_from should handle the scenario where the argument uses a different case for the Windows drive letter http://redmine.ruby-lang.org/issues/show/1366 Author: Shri Borde Status: Open, Priority: Normal ruby -v: 1.9.1p0 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: 1. Create two shortcuts on the Desktop pointing to "c:\Windows\system32\cmd.exe" 2. Right-click to change the properties. 3. For one of the shortcuts, set the "Start in" folder to "C:\" (upper case). For the other one, set it to "c:\" (lower case). 4. Double the click the shortcuts 5. Observe that the prompt in the first one is "C:\>" (upper case), and "c:\" (lower case) in the second one. 6. Run test.rb shown above from both Command Prompts. An ArgumentError will be thrown from the first Command Prompt with the upper case prompt. ---------------------------------------- http://redmine.ruby-lang.org