[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: SVN 1.7 problems with case insensitive file systems (Windows)

From: Marc Strapetz <marc.strapetz_at_syntevo.com>
Date: Mon, 12 Sep 2011 11:48:19 +0200

On 12.09.2011 11:15, Philip Martin wrote:
> Marc Strapetz <marc.strapetz_at_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
Received on 2011-09-12 11:49:32 CEST

This is an archived mail posted to the Subversion Dev mailing list.