Philip Martin <philip.mar...@wandisco.com> writes:

> Now I can reproduce the error.

So the problem occurs when we have a patch file with one item that adds
two levels of directories and another item that deletes a file:

Index: wc/A/B/f
===================================================================
--- wc/A/B/f    (revision 0)
+++ wc/A/B/f    (working copy)
@@ -0,0 +1 @@
+foo
Index: wc/f
===================================================================
--- wc/f        (revision 1)
+++ wc/f        (working copy)
@@ -1 +0,0 @@
-5

$ svn patch --dry-run --strip 1 x.x wc
A         wc/A
A         wc/A/B
A         wc/A/B/f
D         wc/f
svn: E155010: The node '/home/pm/sw/subversion/obj/wc/A' was not found.


The following appears to work:

Index: subversion/libsvn_client/patch.c
===================================================================
--- subversion/libsvn_client/patch.c    (revision 1231875)
+++ subversion/libsvn_client/patch.c    (working copy)
@@ -2718,7 +2718,7 @@
   empty_dirs = apr_hash_make(scratch_pool);
   non_empty_dirs = apr_hash_make(scratch_pool);
   iterpool = svn_pool_create(scratch_pool);
-  for (i = 0; i < targets_info->nelts; i++)
+  for (i = 0; i < deleted_targets->nelts; i++)
     {
       svn_boolean_t parent_empty;
       patch_target_info_t *target_info;
@@ -2729,7 +2729,7 @@
       if (ctx->cancel_func)
         SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
 
-      target_info = APR_ARRAY_IDX(targets_info, i, patch_target_info_t *);
+      target_info = APR_ARRAY_IDX(deleted_targets, i, patch_target_info_t *);
 
       parent = svn_dirent_dirname(target_info->local_abspath, iterpool);
 
-- 
uberSVN: Apache Subversion Made Easy
http://www.uberSVN.com

Reply via email to