subversion-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Philip Martin <philip.mar...@wandisco.com>
Subject 1.6 compatibility copied=TRUE and deletes
Date Wed, 08 Dec 2010 10:54:30 GMT
In 1.6 svn_wc_entry_t had a 'copied' field that was used to distinguish
copies from adds.  In 1.7 we have compatibility code that constructs
1.6-like entries from the 1.7 metadata, so it has to set the copied
flag.  In 1.6 this flag gets set on all the entries in a copied tree, so
1.7 does the same.  However if nodes in the copied tree are deleted 1.7
clears the copied flag for those nodes.  There are comments scattered
about:

entries_tests.py:237

  # case (1) of the DELETED nodes COPIED handling (see comment in
  # read_entries). we are a deletion of a copied subtree. thus, extra
  # work at commit time. thus, not COPIED.
  # oh, and this sucker has a URL, too

entries.c:340

     Not so fast. Back to the general concept of "an ancestor
     operation took care of me." Further consider two possibilities:

     1) this node is scheduled for deletion from the copied subtree,
     so at commit time, we copy then delete

     2) this node is scheduled for deletion because a subtree was
     deleted and then a copied subtree was added (causing a
     replacement). at commit time, we delete a subtree, and then
     copy a subtree. we do not need to specifically touch this
     node -- all operations occur on ancestors.

     Given the "ancestor operation" concept, then in case (1) we
     must *clear* the COPIED flag since we'll have more work to do.
     In case (2), we *set* the COPIED flag to indicate that no
     real work is going to happen on this node.

The problem I have is that 1.6 does not behave this way.  In 1.6 the
copied flag is set on deletes within a copy.  I don't understand why 1.7
is doing it differently.  My guess is that at some point in the past the
copied flag was used internally by the WCNG code.  However these days
the compatibility code is just a read-only view of the metadata for
clients that want to use the 1.6 interface, setting/clearing it has no
effect on 1.7 operations.

Can anyone recall why 1.7 is different?

-- 
Philip

Mime
View raw message