Hello,
I am trying to figure out a generic step-by-step procedure for efficient spare checkouts. There are two approaches to sparse checkouts: blacklist and whitelist.
To explain the difference, assume the following repository structure:
/trunk
/trunk/A
/trunk/B
/trunk/C
where I am not interested in checking out the folder "A".
Whitelist means "Only checkout B and C". Blacklist means "Do not checkout A". Initially, both looks the same. But when a new folder /trunk/D is added, and you updated your working copy afterwards, it shouldn't appear for whitelist, since D was not part of the whitelist, but it should appear for blacklist, since D is not part of the blacklist.
Whitelist was quite trivial to get to work:
Checkout /trunk with depth = empty
Update /trunk/B with sticky depth = infinity
Update /trunk/C with sticky depth = infinity
I can also get blacklist to work like this:
Checkout /trunk with depth = infinity
Update /trunk/A with sticky depth = exclude
But here's the problem: I wanted to exclude /trunk/A precisely because it is huge in size; I don't want to wait for it on checkout. But the above approach creates a full checkout at first, only to throw away A afterwards. Not very efficient.
Alas so far I have failed to find a different routine that avoids having to download A in its entirety. Here's what I tried:
Attempt 1:
Checkout /trunk with depth = empty
Update /trunk/A with depth = empty
Update /trunk/A with sticky depth = exclude
Update /trunk with depth = infinity
Result: trunk remains empty.
Attempt 2:
Checkout /trunk with depth = empty
Update /trunk/A with depth = empty
Update /trunk/A with sticky depth = exclude
Update /trunk with sticky depth = infinity
Result: this overrides "exclude" for A, restores it and downloads its content
Attempt 3:
Checkout /trunk with depth = children
Update /trunk/A with sticky depth = exclude
Update /trunk with depth = unknown
Result: trunk is populated, but B and C remain empty since they were checked out with depth = empty
Is there any way I can change trunk's depth to "sticky infinity" but at the same time retain A's depth = exclude?
Thank you
Chris