2011/3/24 Branko Čibej <br...@e-reka.si>: > On 24.03.2011 15:22, Philip Martin wrote: >> Johan Corveleyn <jcor...@gmail.com> writes: >> >>> I'm looking at issue #3702 ("svn ren TODO todo" not work on windows). >> It's a bit tricky :) Consider a mixed-case node "Foo". It's seems >> obvious that >> >> svn mv Foo foo >> >> is a case-only rename. But what about >> >> svn mv FOO foo >> >> or >> svn mv foo foo >> >> It's possible to do a case-only rename whenever the destination doesn't >> match the disk, but should we require the source to match? > > Clearly not ... case-only rename on a case-inseneitive file-system > assumes that the file-system is case-insensitive. :) > >> The node "Foo" might contain a child "Zig", is >> >> svn mv Foo/Zig foo/Zig > > That's a no-op. You've not renamed Zig. > >> a case-only rename? If that is a case-only rename what about >> >> svn mv Foo/Zig foo/zig > > That's a case-only rename of Foo/Zig to Foo/zig. > >> is that two renames? Suppose there are two children "Zig" and "Zag", >> if >> >> svn mv Foo/Zig foo/Zig >> >> is a case-only rename it would affect "Foo/Zag". > > You're really piling it on here, starting from wrong premises. :) > A rename affects the last component of a path, nothing more. I've never > heard of a system when you can case-only rename a directory in the > middle of a path. > > In short, things aren't /that/ tricky as far as renames go. They're a > lot trickier during update and commit, if the editor hits a local file > that has the wrong case on-disk, but is otherwise versioned (I've known > brain-dead tools to case-only rename the files they'd worked on).
Philip, Brane, Thanks for thinking this through. I hadn't actually thought that far. I think Brane is right: - The source path should handled case-insensitively. If it matches case-insensitively with the source path, that's the path that will be affected by the move. The case of the target path is then taken "as is" for the rename/move. - Rename only affects the last component of a path I think this is the correct behavior on Windows, because that's the way the native "move" command behaves: [[[ C:\Temp\test>echo test > TODO C:\Temp\test>dir /B TODO C:\Temp\test>move toDo ToDo C:\Temp\test>dir /B ToDo C:\Temp\test>move todo todo C:\Temp\test>dir /B todo C:\Temp\test>cd .. C:\Temp>move TEST\TOdo tEsT\toDO C:\Temp>dir /B test C:\Temp>dir /B test toDO ]]] Cheers, -- Johan