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. */