On Thu, Sep 2, 2010 at 18:39, Julian Foad <julian.f...@wandisco.com> wrote: >... >> Comments? Fears? Enhancements? > > +1. > > It would be useful if you could post the latest version of the > description of the new format. Here's a bit of introductory text I > wrote, starting with a paragraph of yours from wc-metadata.sql: > > /* The NODE_DATA table describes the way working nodes are layered on top of > base nodes and on top of other working nodes, due to nested tree structure > changes. The layers are modelled using the "op_depth" column. > > An "operation depth" refers to the number of directory levels down from > the WC root at which a tree-change operation (delete, add, copy, move, > replace) was performed. It does NOT refer to the number of path
There is no "replace" operation. There are deletes and then an add/copy/move. >... > As for the three columns holding cached values, it seems a bit impure > but pragmatically OK to move them into NODES, and certainly it would be > unhelpful to keep the existing BASE_NODE and WORKING_NODE tables with > their present names and only those columns in them. translated_size and last_mod_time would nominally go into ACTUAL_NODE. Hyrum and I decided against that, however, because it meant we would have to always create ACTUAL_NODE rows. With the values in *_NODE, we can defer creating rows in ACTUAL_NODE until something comes up. > We need to describe how the layering works for copies, deletes, and > adds. In particular I'm recalling something about how local adds aren't > recursive, unlike copies, so an additional change within an added dir > doesn't work the same way with regard to op_depth as it would inside a > copied dir. Adds within other adds don't layer. You're simply adding more nodes at the parent's op_depth. Deleting an ancestor of a deleted node also does not create an additional layer. Instead, we establish the new op_depth and relabel all of the deleted children with that new op_depth so that it looks like one big happy delete operation. Copies/moves always introduce a new layer. Cheers, -g