As you may have noticed, I started implementing support for multiple WC
formats on the better-pristines branch, as a prelude to adding support
for compressed pristines without forcing users to upgrade all their
working copies. There's an overview in the branch readme file, but the
basic idea is this:
* the client will support more than one WC format
* when working copies are created or upgraded, the default is always
the latest supported format
* 'svn checkout' and 'svn upgrade' accept a --compatible-version
option that says which format of WC to create/upgrade to (the option
name and semantics are the same as svnadmin's)
* when update/switch create new externals working copies, they will
use the parent's format.
The implementation of 'svn upgrade' is fairly straight-forward, but I've
still run into a bit of a conundrum; the question is this: since 'svn
upgrade' can theoretically be performed on an external WC, should we
support working copies with different formats in the top level and the
externals? I haven't checked if we currently do, though obviously, as
things stand now, upgrading only a subtree doesn't make much sense,
since the top-level format would still not be supported.
The other question that's popped up is more technical: how to
communicate the WC format down the library stack (for creating externals
working copies) during checkout/upgrade/switch. The only structure that
currently holds the format number is svn_wc__wcroot_t, which is strictly
private to libsvn_wc and not exposed anywhere else. The obvious solution
of recording the format in svn_wc_context_t seems like a bit of a
layering violation to me, but on the other hand it's the only bit of
context that's available to libsvn_client.
Any ideas will be most welcome.
Received on 2017-09-14 06:01:38 CEST