[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: wc-ng base/working nodes in a copied tree

From: neels <neeels_at_gmail.com>
Date: Tue, 23 Mar 2010 22:19:42 +0100

On 23 March 2010 09:11, Greg Stein <gstein_at_gmail.com> wrote:
> On Mon, Mar 22, 2010 at 17:59, Philip Martin <philip.martin_at_wandisco.com> wrote:
>>   $ svn cp $url/A wc
>>   $ svn add wc/A/Y
>>
>> Suppose $url/A contains $url/A/X.  How do I distinguish between a
>> copied child, like wc/A/X, and an added node like wc/A/Y?  Neither has
>> copyfrom set.  How do I know that A/X inherits from it's parent A
>> while A/Y does not?
>
> Yes, you brought up this hole in the design a while back, and we've
> had some discussion on ways to solve it. As Bert points out, you can
> use changed_* to detect the local-add, rather than local-copies.
>
> We may introduce a special copyfrom_* value to indicate "local-add"
> rather than "copy-from". Or maybe rely on changed_*. It is unclear on
> what is the best approach right now.

May I suggest to use the WORKING node's 'presence', as we already do
with subpath deletions inside copied trees. A presence of
'not-present' currently indicates that a subpath of a recursive copy
is excluded from the copy, IOW that it is the root of a delete
operation inside a copy. A new value called 'not-related' could
indicate that a path is the root of an *add* operation that is not
related to the add operation of its parent. (Copies inside copies
would also have this presence. And we'd have a new svn_wc__db_status_t
value.)

subversion/libsvn_wc/wc-metadata.sql
[[[
 CREATE TABLE WORKING_NODE (
...
/* Is this node "present" or has it been excluded for some reason?
     Only allowed values: normal, not-present, incomplete, base-deleted.
     (the others do not make sense for the WORKING tree)

     normal: this node has been added/copied/moved-here. There may be an
       underlying BASE node at this location, implying this is a replace.
       Scan upwards from here looking for copyfrom or moved_here values
       to detect the type of operation constructing this node.

     not-present: the node (or parent) was originally copied or moved-here.
[Note: only makes sense when a *parent* was originally copied here!]
       A subtree of that source has since been deleted. There may be
       underlying BASE node to replace. For a move-here or copy-here, the
       records are simply removed rather than switched to not-present.
       Note this reflects a deletion only. It is not possible move-away
       nodes from the WORKING tree. The purported destination would receive
       a copy from the original source of a copy-here/move-here, or if the
       nodes were plain adds, those nodes would be shifted to that target
       for addition.

     incomplete: nodes are being added into the WORKING tree, and the full
       information about this node is not (yet) present.

     base-deleted: the underlying BASE node has been marked for deletion due
       to a delete or a move-away (see the moved_to column to determine
       which), and has not been replaced. */
  presence TEXT NOT NULL,
...
]]]

~Neels
Received on 2010-03-23 22:20:31 CET

This is an archived mail posted to the Subversion Dev mailing list.