You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 18 Next »

A summary of the experimental Shelving and Checkpointing feature in Svn-1.12, building on the Shelving-v2 in Svn-1.11.

(For other pages about Shelving and Checkpointing, see Shelving and Checkpointing.)

Summary

This version 3 of experimental shelving (issue SVN-3625) again completely changes the storage mechanism. It now uses a "real" WC for each shelf-version.

  • now supports all committable changes – see 'Functionality' below
  • slower than v2 -- see 'Performance' below
  • incompatible with v2 -- see 'Migrating' below

Functionality

Kinds of change that can be shelved

WC State or Change

Shelving v1 svn 1.10

Shelving v2 svn 1.11Shelving v3 svn 1.12

committable changes

file text, file delete/add, most properties

yes

yesyes

mergeinfo changes

yes

yesyes

copies and moves

no

noas copies*

directories (mkdir/rmdir/...)

no

noyes

binary files & properties

no

yesyes

uncommittable state

unresolved conflicts

no

nono

changelist assignment

no

nono

unversioned items (git stash -u/-a)

no

nono

inconsistent WC states (missing/obstructed)

no

nono

base state

WC base state (rev, URL, switched, depth)

no

nono

*on shelving, a move is converted to copy-and-delete, just like it is on commit.

Performance

Experimental Shelving v3 generally is slower and uses more disk space than v2. It uses high-level WC functionality to support all committable changes in a WC, it runs up against WC performance issues. Particular issues in this version are:

  • When shelving, an inefficient procedure is used to store a base state before the desired changes are stored on top of it.
  • When shelving or unshelving a "copy" (or "move"), it fetches the base content of the copy directly from the repository, instead of from the local WC storage. That is because no suitable API implementation was available in Subversion for extracting the base content from the local WC storage. This also means that offline shelving and unshelving is not possible with copies or moves, in its current state.

With more effort invested, these performance issues in the experimental version could be overcome. (Interested in making it so? Get in touch with the Subversion project.)

Migrating from Shelving v2

Experimental Shelving v3 cannot read or write or see the existence of earlier experimental shelves.

To migrate a v2 shelf to v3, unshelve it using svn 1.11 into a clean (or clean enough) WC, and then shelve it using svn 1.12.

Implementation

Shelves are stored in WC metadata dir '.svn/experimental/shelves/v3/'.

  • No labels