On 12.09.2011 11:15, Philip Martin wrote: > Marc Strapetz <marc.strap...@syntevo.com> writes: > >> There are some problems when capitalization of a file or directory name >> changes in the working copy (at least on Windows). I'm starting off with >> following tree: >> >> # svn status -v >> 1 1 Marc . >> 1 1 Marc a >> 1 1 Marc a\mu >> 1 1 Marc a\b >> 1 1 Marc a\b\lambda >> 1 1 Marc a\b\e >> 1 1 Marc a\b\e\alpha >> 1 1 Marc a\b\e\beta >> 1 1 Marc a\d >> 1 1 Marc a\d\gamma >> 1 1 Marc iota >> >> Then a/b/e will be changed to upper case a/b/E: >> >> # svn status >> ! a\b\e >> ? a\b\E >> >> This is somewhat strange as a/b/e is missing, but a/b/e/alpha and beta >> are not. > > There is an assumption in the code that when a directory is missing the > whole tree is missing, so that is the expected behaviour.
I can't confirm that. If I'm starting off with a clean working copy (without having a/b/e changed its case) and I'm removing a/b/e, I'll get: # svn status ! a\b\e ! a\b\e\alpha ! a\b\e\beta >> Adding the unversioned directory and removing the missing one >> seems to work: >> >> # svn add a/b/E >> # svn rm a/b/e >> # svn status >> ! a\b\E >> ! a\b\E\alpha >> ! a\b\E\beta >> D a\b\e >> D a\b\e\alpha >> D a\b\e\beta >> >> However, a subsequent commit fails: >> >> # svn commit -m "a/b/e moved to a/b/E" >> svn: E155010: Commit failed (details follow): >> svn: E155010: 'D:\greek-tree.svn\a\b\E' is scheduled for addition, but >> is missing > > That's odd. It looks like a case-only rename and issue 3702 claims to > be fixed: > > http://subversion.tigris.org/issues/show_bug.cgi?id=3702 > > If you start with a pristine, unmodified tree and run > > svn mv a\b\e a\b\E > > can you commit that? Yes, that works. >> When adding a\b\E now, alpha gets duplicated: >> >> # svn add a\b\E >> # svn status >> ! a\b\e >> M a\b\e\alpha >> A a\b\E >> A a\b\E\alpha >> A a\b\E\beta >> >> Removing a\b\e doesn't work: >> >> # svn rm a\b\e >> svn: E195006: Use --force to override this restriction (local >> modifications may be lost) >> svn: E195006: 'D:\greek-tree.svn\a\b\e\alpha' has local modifications -- >> commit or revert them first > > Does adding force work? Yes, that works. # svn status ! a\b\E ! a\b\E\alpha ! a\b\E\beta D a\b\e D a\b\e\alpha D a\b\e\beta However commit fails with similar error message as before: # svn commit -m "a b/e removed to a/b/E" svn: E155010: Commit failed (details follow): svn: E155010: 'D:\greek-tree\a \b\E' is scheduled for addition, but is missing That's the contents of wc.db after "svn rm -f": sqlite> select local_relpath, op_depth, presence from nodes; a|0|normal a/b|0|normal a/b/e|0|normal a/b/e/alpha|0|normal a/b/e/beta|0|normal a/b/lambda|0|normal a/d|0|normal a/d/gamma|0|normal a/mu|0|normal iota|0|normal |0|normal a/b/E|3|normal a/b/E/alpha|4|normal a/b/E/beta|4|normal a/b/e|3|base-deleted a/b/e/alpha|3|base-deleted a/b/e/beta|3|base-deleted -- Best regards, Marc Strapetz ============= syntevo GmbH http://www.syntevo.com http://blog.syntevo.com