- now supports all committable changes – see 'Functionality' below
- is slower than v2 -- see 'Performance' below
- is incompatible with v2 -- see 'Migrating' below
The main effort since v2 was on creating APIs in the svn client that allowed changes to be:
- 'exported' from the WC in the same manner as they are sent to the server in a commit, but instead to an arbitrary receiver (in this case, a shelf);
- 'imported' to the WC from an arbitrary sender of changes (in this case, a shelf)
and then re-implementing shelves as 'hidden WCs' and wiring up the high level 'glue' logic that connects 'export changes from a shelf-WC' to 'import changes to main-WC' and the other way around.
This lays the foundation for more powerful management of shelved changes. The previous experimental version of shelving code had to have their own implementations of all the mechanics of transferring and storing each kind of change, and that was unmaintainable. This version shares all of that functionality with the 'main' WC.
The emphasis of shelving v3 is making that architectural change. To make it also fast and use minimal space, more work will be required: see 'Performance' below.
Kinds of change that can be shelved