(resend as plaintext to fix formatting)
 
(I did some searching for an answer here and elsewhere, and didn't find it; 
sorry if I missed it.)

The project I'm dealing with has the SVN repository arranged like so:

proj/top1/branches/
proj/top1/tags/
proj/top1/trunk/
proj/top2/common/branches/
proj/top2/common/tags/
proj/top2/common/trunk/
proj/top2/thingA/branches/
proj/top2/thingA/tags/
proj/top2/thingA/trunk/
proj/top2/thingB/branches/
proj/top2/thingB/tags/
proj/top2/thingB/trunk/
proj/top2/deploy/common/branches/
proj/top2/deploy/common/tags/
proj/top2/deploy/common/trunk/
proj/top2/deploy/thingA/env1/branches/
proj/top2/deploy/thingA/env1/tags/
proj/top2/deploy/thingA/env1/trunk/
proj/top2/deploy/thingA/env2/branches/
proj/top2/deploy/thingA/env2/tags/
proj/top2/deploy/thingA/env2/trunk/
proj/top2/deploy/thingB/env1/branches/
proj/top2/deploy/thingB/env1/tags/
proj/top2/deploy/thingB/env1/trunk/
(etc)

First, I completely agree that this organization has issues.  Changing is isn't 
an option.  I'll spare you the details.  :-/

My question is:  how to checkout and update at the proj/ level without getting 
the content of all the tags/ and branches/ directories?

The "Sparse Directories" features of SVN (--depth and --set-depth) sounded good:
http://svnbook.red-bean.com/en/1.5/svn.advanced.sparsedirs.html

But those features are not sufficient.  In order to do a fresh checkout of the 
above and avoid the massive on-disk redundancy that would occur due to the 
content of tags/ and branches/, each trunk/ directory must be checked out 
individually.  Other than creating a brittle script that lists each trunk/ 
directory, I don't see a solution.  Even then, each branches/ and tags/ 
directory needs to be marked with --set-depth as well.

I also discovered that "svn co URL/proj/top1 --depth immediates" can take a 
very long time for a tree with tons of content.  Seems like a bug (using 
SlikSvn 1.6.15).  Similarly, something like "svn update URL/proj/top1/tags 
-depth immediates" would be handy at times to get just the empty 
subdirectories, named after each branch or tag.  Updating just one of those 
subdirectories would allow mass-diffs between the trunk or another branch/tag.  
I don't see why a depth-limited operation like that should take so much time.

I though about using 'svn list http://.../proj/'; and grep'ing the result for 
"/trunk", but that one command takes over 10 minutes - not feasible.  A 
checkout of all the trunk/ directory contents only takes 2.5 minutes.

So: has anyone found a clean way to handle checkouts and updates when 
branches/tags/trunk directories are strewn all over a tree?  Thanks.

Reply via email to