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. -- Brane