[prev in list] [next in list] [prev in thread] [next in thread] 

List:       subversion-issues
Subject:    [Issue 3468] New - children of replaced directories cannot be
From:       Stefan Sperling <stsp () elego ! de>
Date:       2009-08-25 13:35:16
Message-ID: iz3468 () subversion ! tigris ! org
[Download RAW message or body]

http://subversion.tigris.org/issues/show_bug.cgi?id=3468
                 Issue #|3468
                 Summary|children of replaced directories cannot be deleted pos
                        |t-replace
               Component|subversion
                 Version|trunk
                Platform|All
                     URL|
              OS/Version|All
                  Status|NEW
       Status whiteboard|
                Keywords|
              Resolution|
              Issue type|DEFECT
                Priority|P3
            Subcomponent|unknown
             Assigned to|issues@subversion
             Reported by|stsp






------- Additional comments from stsp@tigris.org Tue Aug 25 06:35:15 -0700 2009 -------
The following comment was added in r38927:

/* Issue #3281.
 *
 * Skip schedule-delete children inside of schedule-replace
 * directories. They cause an out-of-date error upon commit,
 * and prevent replaced directories from being committed.
 *
 * The out-of-date error happens because we recursively delete the
 * replaced directory in the transaction, then copy the replacing
 * directory in its place, and then try to delete nodes inside
 * the directory which existed only in its pre-replaced state.
 * The attempt to delete non-existent nodes from the transaction
 * (with node kind "none") is prevented by libsvn_repos/commit.c:
 * delete_entry() which sends the out-of-date error.
 *
 * ### We should not skip deletions which happened post-replace.
 * ###
 * ### This is not possible in wc-1 right now, because post-replace
 * ### deletions are not represented in working copy meta data.
 * ### Such nodes simply have NO entry at all in wc-1. The entry
 * ### gets blown away as part of deleting the apparently "locally
 * ### added" node, instead of changing the entry's schedule to
 * ### "delete". Note that replaced directories can only happen as
 * ### part of a set of local changes, either made manually or by a
 * ### merge. That's why nodes inside of replaced dirs are always
 * ### considered "locally added". The subtleties of the
 * ### locally-added-inside-of-a-replaced-parent-directory case are
 * ### wrongfully ignored during entry deletion.
 * ###
 * ### On top of that, libsvn_repos/commit.c:add_directory() will
 * ### always do server-side copies for directories added with
 * ### history, instead of copying the directory state verbatim
 * ### from the WC. This causes nodes which the user meant to delete
 * ### post-replace to show up in the commit transaction regardless.
 * ### This is not a problem in itself, but because there is no
 * ### entry for a post-replace deleted node, we cannot send a
 * ### separate deletion to remove the post-replace deleted node
 * ### from the transaction after the directory was copied on the
 * ### server.
 * ### Worse, the entry comes back only after an update which
 * ### explicitly targets the node which is now locally missing
 * ### but present on the server, in a revision the WC thinks it
 * ### has the entire state of! By not handling the
 * ### locally-added-inside-of-a-replaced-parent-directory entry
 * ### removal case properly, the client corrupts the WC meta data
 * ### without realising the mess it just made.
 * ###
 * ### So our ignorance about post-replace deleted nodes here is
 * ### just a side-effect of a much bigger problem, which has existed
 * ### for some time (at least since 1.5.x, probably much longer).
 * ###
 * ### WC-NG should fix all of this before 1.7 release.
 * ### Note that, in trunk, the entry of post-replace deleted nodes
 * ### does not get blown away, so trunk is one step ahead of 1.6.x
 * ### already. */

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=463&dsMessageId=2387081

To unsubscribe from this discussion, e-mail: [issues-unsubscribe@subversion.tigris.org].
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic