Karl Fogel wrote:
> The parent information should not be recorded in dag_node_t. A
> dag_node_t represents a node in the dag filesystem, and may have
> multiple parents (even in one revision tree).
Yes, but during the lifetime of a trail -- that is, within one
"tree.c"-level operation -- we're interested only in the path we used to
reach the node.
> The information you're trying to preserve isn't information the dag
> filesystem knows or cares about -- parent information is important
> only to the "virtual filesystem", uh, perhaps better called the
> "versioning filesystem". (Whichever it is, I'll call it the vfs from
> now on).
>
> A dag_node_t is currently something we can retrieve by key (see
> svn_fs_id_t). The value associated with that key knows nothing about
> parent information. So if dag_node_t had a parent fields, then when
> we retrieve a dag_node_t it would have to be incomplete.
O.K., that's reasonable. I'm mixing the layers again.
> Remember svn_fs_node_t? Tracking this kind of information was one of
> the main reasons we had it. Svn_fs_node_t was a superset of
> dag_node_t; it held the dag node and also the metadata needed to
> differentiate two nodes in the vfs even if they shared the same
> underlying dag node.
>
> So maybe the real question is: should we still have svn_fs_node_t or
> something like it, at least to preserve the
> path-by-which-we-got-to-this-dag-node and any other information
> layered on top of dag nodes?
We do. Otherwise we can't clone a whole path. Remember that we /do/ need
to clone a (sub) path in every FS operation that modifies a node. We can
only do that if we have a list of dag nodes that corresponds to the path.
Actually, we need a list of (node, name) pairs, where each "name" is a
path component. That's because we have to modify the dir entry called
"name" when we clone a node's child.
open_node can create this list (it has all the bits at its fingertips).
Maybe we should have something like this:
struct named_node {
const char *name;
dag_node_t *node;
};
svn_error_t *open_path (apr_array_header_t **named_nodes,
svn_fs_root_t *root,
const char *path,
trail_t *trail);
--
Brane �ibej
home: <brane_at_xbc.nu> http://www.xbc.nu/brane/
work: <branko.cibej_at_hermes.si> http://www.hermes-softlab.com/
ACM: <brane_at_acm.org> http://www.acm.org/
Received on Sat Oct 21 14:36:22 2006