Julian Foad wrote on Tue, 09 Jan 2018 13:31 +0000:
> Anyway the main point here is: we have in principle a set of tree
> snapshots (no matter that each one is stored in the form of a difference
> against the base); and we use revision specifiers to refer to the
> working and base versions:
Initial implementation: http://svn.apache.org/r1820696 "On the
'shelve-checkpoint' branch: Let revision specifiers access shelves."
I think this proves the principle of using revision specifier syntax to
refer to shelves.
$ svn propset -r foo --revprop svn:log 'New log msg.'
$ svn propget -r foo --revprop svn:log
New log msg.
where 'foo' is a shelf. 'propedit' and 'proplist' and 'propdel' work
too. Only the svn:log revprop is stored in the shelf format so far; it
will be easy to extend to support all revprops.
We may well prefer some other syntax than simply "-r foo", such as "-r
shelf:foo" or "-r [foo]" or whatever, but that's not the main point.
The main point is how the rev spec is converted to an (extended)
svn_opt_revision_t object and then passed in to the libsvn_client APIs,
and to what extent we would need to modify the APIs to properly support
this. Already I found, for example, that the revprop APIs take an
svn_opt_revision_t structure as input but they also output a plain
svn_revnum_t to tell what number a date or 'head' revspec was resolved
to; with a shelved change, the output revision specifier cannot be
represented as svn_revnum_t, and I set it to -1 which causes some ugly
output:
$ svn proplist --revprop -r foo
Unversioned properties on revision -1:
svn:log
So we would want to change this to svn_opt_revision_t. This is just the
first example I have come across of a change needed; some other APIs
will likely require more extensive changes.
Only revprop access is implemented so far, as it was the easiest part to
implement. Providing unified access to a 'tree snapshot' view of the
shelved version (svn list/cat/propget (versioned properties), etc.) and
making modifications (svn add/cp/mv/rm/propset, etc.) and a 'difference'
view (svn diff/status) will be cumbersome to implement, especially with
patch file as the storage, although relatively straightforward in
principle. This could be the trigger for a change in storage form.
- Julian
Received on 2018-01-09 22:30:26 CET