On Wed, Jan 25, 2012 at 9:52 AM, Branko Čibej <br...@xbc.nu> wrote: > On 24.01.2012 15:15, Philip Martin wrote: >> Daniel Shahaf <danie...@elego.de> writes: >> >>>> Given three files "foo", "FOO" and "Foo", one in >>>> wc.db, one on disk and one on the command line, is that the same file? >>>> >>>> My understanding is that a Windows user expects those to be the same >>>> file. So "svn st FOO", "svn st foo" and "svn st Foo" all refer to the >>>> file in wc.db and the file on disk even though the cases don't match. >>> But normal windows programs don't have the concept of "one on disk and >>> one in wc.db". And I imagine we want to have some syntax to refer to the >>> latter. >> What I meant was names rather than files. So one of foo/FOO/Foo in >> wc.db, another on disk and another on the command line. > > You are complicating the issue far more than necessary. Assuming the > owner of the repository knows that there are going to be windows > clients, the case you describe is not going to happen in the first > place. Even Unix-centric repositories will not likely or often have > names in the same directory that differ only in case. > > It's far more likely that there's foo in the wc.db, FOO on dist, and the > user types Foo. The solution to this most common case is blindingly > obvioius, but quite hard to do right because one can't really do > case-insensitive queries into the wc.db, and certainly not with the same > case folding rules that the filesystem uses (yes, especially with NTFS > which most everybody uses these days, there's no guarantee that the FS > will case-fold in the same way as the currently active locale). > > The reasonable solution would be: > > * if the name exists in the wc.db but not on disk, try to > case-normalize to the on-disk form (and, possibly, case-rename to > the wc.db form on the fly) > * if the name does /not/ exist in wc.db, still try to case-normalize > to the on-disk form, then scan the directory info in wc.db and see > if any name in there can be normalized to the same on-disk form. If > there's exactly one, use that and proceed as above. If there are > more than one, cry for help.
I'm sorry, but I think the current fix for #3865 is a much better solution, because there is no need to cry for help if there are multiple matches in wc.db (modulo case): * If there is an exact match in wc.db, use that. Forget about the disk (if there is a case-clashing item on disk, it's a different item. It's always been that way in the svn world on case-insensitive FS's) * If not, try to case-normalize to an on-disk file. Though the FS is case-insensitive, wc.db, even on Windows, is case-sensitive. It simply *has* to be, because otherwise there would be no way to do a case-only rename (or to represent two totally unrelated items which case-clash but have to be represented in wc.db at the same time, because they came in through a merge or something). So it makes no sense to pretend that items in wc.db which case-normalize to the same file are the same items. -- Johan