On the 'shelving-v3' branch:

* shelving uses a separate 'real' WC to store each shelf

* copying local modifications between the (main) WC and a shelf is, at last, 
done the Right Way using an Editor API:
    - "open(user's WC).replay_local_mods()" piped to 
"open(shelf-storage-wc).local_mods_editor()".

Benefits:

* every kind of committable change will be supported

* no shelf-specific code for storing and manipulating changes, just high level 
glue code

Problems:

* bug in reverting shelved changes from the main WC after shelving them:
    - added nodes don't get deleted from disk, even with 'svn revert 
--remove-added'
    - https://issues.apache.org/jira/browse/SVN-4798
    - causing XFAIL in shelf_tests 18 "shelve mkdir" and 20 "shelve replace dir"

* unshelve doesn't attempt to merge
    - assumes it's writing to a WC that matches the shelf base state
    - causing XFAIL in shelf_tests for merge and conflict tests (25, 26, 27, 
28, 30)

* copying the WC base state is crude, space-inefficient
    - currently using a simple recursive copy of the entire WC dir including 
'.svn' metadata
    - currently puts shelves outside the main WC, in a sibling dir named, 
"<wc-dir>.shelves";
      that's just to avoid infinite recursion when doing the recursive dir 
copy, and could be
      changed to "<wc-dir>/.svn/experimental/shelves/v3" with a little tweak.

The only reason this is committed to a branch rather than trunk is that it is 
writing to a directory outside the WC. It would be worth tweaking that back 
inside ".svn" as soon as possible, in order to move the development back onto 
trunk.


Julian Foad wrote on 2019-02-01:
[...]
> Baby steps, in order:
>   (1) Shelve committable changes, with very simple capture of WC base 
> state (maybe assumes single-revision, for example): a good enough first 
> step.

Yay, working!

>   (2) Better capture of base state.
>   (3) Better replay of "copy" operations, reading WC local storage to 
> fetch their base rather than contacting the repo.
>   (4) Support some uncommittable changes such as "local move".
[...]


-- 
- Julian

Reply via email to