On Thu, 2008-01-17 at 14:37 +0000, Ross Burton wrote:
> Attached is a patch, adapted from the upstream bug fix, which should
> work.  Annoyingly it compiles but the swig generation later fails so it
> is, at present, untested.

Damnit, wrong patch. :/

Attached is the real patch.

Ross
-- 
Ross Burton                                 mail: [EMAIL PROTECTED]
                                          jabber: [EMAIL PROTECTED]
                                     www: http://www.burtonini.com./
 PGP Fingerprint: 1A21 F5B0 D8D0 CFE3 81D4 E25A 2D09 E447 D0B4 33DF

diff -u subversion-1.4.4dfsg1/debian/control subversion-1.4.4dfsg1/debian/control
--- subversion-1.4.4dfsg1/debian/control
+++ subversion-1.4.4dfsg1/debian/control
@@ -4,7 +4,7 @@
 Maintainer: Peter Samuelson <[EMAIL PROTECTED]>
 Uploaders:  Troy Heber <[EMAIL PROTECTED]>, Guilherme de S. Pastore <[EMAIL PROTECTED]>
 Build-Depends: debhelper (>= 5.0.37.1), libneon26-dev, zlib1g-dev,
-               libapr1-dev, libaprutil1-dev (>= 1.2.7+dfsg-2), libdb4.4-dev,
+               libapr1-dev, libaprutil1-dev (>= 1.2.7+dfsg-2), libdb4.6-dev,
                apache2-threaded-dev (>= 2.2), patch, dpatch, doxygen,
                autotools-dev, autoconf, libtool, swig,
                python, python-dev, python-support (>= 0.4),
diff -u subversion-1.4.4dfsg1/debian/changelog subversion-1.4.4dfsg1/debian/changelog
--- subversion-1.4.4dfsg1/debian/changelog
+++ subversion-1.4.4dfsg1/debian/changelog
@@ -1,3 +1,9 @@
+subversion (1.4.4dfsg1-1.1) unstable; urgency=low
+
+  * Add patch to fix export with externals
+
+ -- Ross Burton <[EMAIL PROTECTED]>  Thu, 17 Jan 2008 11:54:00 +0000
+
 subversion (1.4.4dfsg1-1) unstable; urgency=low
 
   * New upstream version.
only in patch2:
unchanged:
--- subversion-1.4.4dfsg1.orig/subversion/tests/cmdline/externals_tests.py
+++ subversion-1.4.4dfsg1/subversion/tests/cmdline/externals_tests.py
@@ -750,6 +749,49 @@
     raise svntest.Failure("Unexpected contents for rev 1 of " +
                           exdir_H_omega_path)
 
+#----------------------------------------------------------------------
+
+# Test for issue #2429
+def export_wc_with_externals(sbox):
+  "test exports from working copies with externals"
+
+  externals_test_setup(sbox)
+
+  wc_dir         = sbox.wc_dir
+  repo_url       = sbox.repo_url
+  export_target = sbox.add_wc_path('export')
+
+  # Create a working copy.
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'checkout',
+                                     '--username', svntest.main.wc_author,
+                                     '--password', svntest.main.wc_passwd,
+                                     repo_url, wc_dir)
+  # Export the working copy.
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'export', wc_dir, export_target)
+
+  paths = [
+    os.path.join(export_target, "A", "C", "exdir_G"),
+    os.path.join(export_target, "A", "C", "exdir_G", "pi"),
+    os.path.join(export_target, "A", "C", "exdir_H"),
+    os.path.join(export_target, "A", "C", "exdir_H", "omega"),
+    os.path.join(export_target, "A", "D", "x"),
+    os.path.join(export_target, "A", "D", "x", "y"),
+    os.path.join(export_target, "A", "D", "x", "y", "z"),
+    os.path.join(export_target, "A", "D", "x", "y", "z", "blah"),
+    os.path.join(export_target, "A", "D", "x", "y", "z", "blah", "E", "alpha"),
+    os.path.join(export_target, "A", "D", "x", "y", "z", "blah", "E", "beta"),
+    ]
+  probe_paths_exist(paths)
+
+  svntest.main.safe_rmtree(export_target)
+
+  # Export it again, without externals.
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'export', '--ignore-externals',
+                                     wc_dir, export_target)
+  probe_paths_missing(paths)
 
 
 ########################################################################
@@ -767,6 +809,7 @@
               modify_and_update_receive_new_external,
               disallow_dot_or_dotdot_directory_reference,
               export_with_externals,
+              export_wc_with_externals,
              ]
 
 if __name__ == '__main__':
only in patch2:
unchanged:
--- subversion-1.4.4dfsg1.orig/subversion/libsvn_client/export.c
+++ subversion-1.4.4dfsg1/subversion/libsvn_client/export.c
@@ -213,6 +213,7 @@
                      const char *to,
                      svn_opt_revision_t *revision,
                      svn_boolean_t force,
+                     svn_boolean_t ignore_externals,
                      svn_boolean_t recurse,
                      const char *native_eol,
                      svn_client_ctx_t *ctx,
@@ -312,7 +313,7 @@
                       const char *new_to = svn_path_join(to, item, iterpool);
                   
                       SVN_ERR(copy_versioned_files(new_from, new_to, 
-                                                   revision, force, recurse,
+                                                   revision, force, ignore_externals, recurse,
                                                    native_eol, ctx,
                                                    iterpool));
                     }
@@ -328,6 +329,52 @@
                                               iterpool));
             }
         }
+
+      /* Handle externals. */
+      if (! ignore_externals && recurse)
+        {
+          apr_array_header_t *ext_items;
+          const svn_string_t *prop_val;
+
+          SVN_ERR(svn_wc_prop_get(&prop_val, SVN_PROP_EXTERNALS,
+                                  from, adm_access, pool));
+          if (prop_val != NULL)
+            {
+              int i;
+
+              SVN_ERR(svn_wc_parse_externals_description2(&ext_items, from,
+                                                          prop_val->data,
+                                                          pool));
+              for (i = 0; i < ext_items->nelts; ++i)
+                {
+                  svn_wc_external_item_t *ext_item;
+                  const char *new_from, *new_to;
+
+                  svn_pool_clear(iterpool);
+
+                  ext_item = APR_ARRAY_IDX(ext_items, i,
+                                           svn_wc_external_item_t *);
+                  new_from = svn_path_join(from, ext_item->target_dir,
+                                           iterpool);
+                  new_to = svn_path_join(to, ext_item->target_dir,
+                                         iterpool);
+
+                   /* The target dir might have multiple components.  Guarantee
+                      the path leading down to the last component. */
+                  if (svn_path_component_count(ext_item->target_dir) > 1)
+                    {
+                      const char *parent = svn_path_dirname(new_to, iterpool);
+                      SVN_ERR(svn_io_make_dir_recursively(parent, iterpool));
+                    }
+
+                  SVN_ERR(copy_versioned_files(new_from, new_to, 
+                                               revision, force, FALSE,
+                                               TRUE, native_eol,
+                                               ctx, iterpool));
+                }
+            }
+        }
+
       svn_pool_destroy(iterpool);
     }
   else if (entry->kind == svn_node_file)
@@ -909,7 +956,7 @@
       
       /* just copy the contents of the working copy into the target path. */
       SVN_ERR(copy_versioned_files(from, to, &working_revision, overwrite, 
-                                   recurse, native_eol, ctx, pool));
+                                   ignore_externals, recurse, native_eol, ctx, pool));
     }
   
 

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to