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

Sparse working copy in 1.8.0 causes problems for others' merges; 1.7.x didn't complain

From: Bob Cardillo <bob.cardillo_at_gmail.com>
Date: Mon, 13 May 2013 21:58:03 -0400

I'm running Subversion 1.8.0-dev on Windows 7 Pro SP1.

The following steps went through without error on 1.7.x, but they fail with
an error on the last step when run on 1.8.0 (see below for full
reproducible recipe):
 1. make a copy (branch) of your trunk
 2. Harry checks out the branch in full
 3. Sally sparsely checks out the branch with just a subset of subtrees
 4. someone adds something in trunk under one of the subtrees that Sally
has excluded
 5. someone removes something from trunk under the subtree added in step 4
 6. Sally merges trunk into the branch (remember she has the sparse working
copy)
 7. Harry merges trunk into the branch
BAM! Harry can't commit the merge because:
svn: E155011: Commit failed (details follow):
svn: E155011: Directory 'C:\testbranch1_userX\B\B1\B1a' is out of date
svn: E160028: '/branches/branch1/B/B1/B1a' is out of date

I suspect this has something to do with one or both of these two issues,
completed in 1.8.0:
 - http://subversion.tigris.org/issues/show_bug.cgi?id=4305
 - http://subversion.tigris.org/issues/show_bug.cgi?id=4169

Can someone confirm?

Is this a new bug introduced in 1.8.0 or a correction of an oversight in
1.7.x? Either way, what is the workaround? It seems to me that a merge into
a sparse working copy either shouldn't be allowed, or it should work
correctly. In other words, this recipe should either fail on step 6 above
(instead of 7) or it should go all the way through correctly, including
step 7.

Here's the complete recipe for Windows (it creates the repository from
scratch, so the only assumption is that you have a C: drive):
 cd /d C:\
 svnadmin create test_repo

 svn checkout file:///C:/test_repo svntestrepo

 cd svntestrepo
 md trunk
 cd trunk
 md B
 md C
 cd ..
 md branches
 svn add branches
 svn add trunk
 svn commit -m ""
 svn copy "^/trunk" "^/branches/branch1" -m ""

 svn checkout "^/branches/branch1" ..\testbranch1_userX

 svn checkout --depth empty "^/branches/branch1" ..\testbranch1_userY
 cd ..\testbranch1_userY
 svn update --set-depth infinity C

 svn checkout "^/trunk" ..\testtrunk

 cd ..\testtrunk\B
 md B1
 cd B1
 echo B1 test > test.txt
 md B1a
 cd B1a
 echo B1a test > test.txt
 cd ..\..
 svn add B1
 cd ..
 svn commit -m ""

 cd C
 md C1
 cd C1
 echo C1 test > test.txt
 cd ..
 svn add C1
 cd ..
 svn commit -m ""

 cd B\B1
 svn delete B1a
 cd ..\..
 svn commit -m ""

 cd ..\testbranch1_userY
 svn merge "^/trunk"
 svn commit -m ""

 cd ..\testbranch1_userX
 svn update
 svn merge "^/trunk"
 svn commit -m ""

Thanks!
Received on 2013-05-14 03:58:36 CEST

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