Ben Collins-Sussman <sussman@collab.net> writes:
> Yeah, can someone submit a real patch for 'svnadmin copy'?  I'd love to
> get this into 1.0.1.
Here's my work in progress:
* subversion/libsvn_subr/io.c (svn_io_dir_walk): Make the callback for
  a directory before the callbacks for any items it contains.
Index: subversion/libsvn_subr/io.c
===================================================================
--- subversion/libsvn_subr/io.c	(revision 8659)
+++ subversion/libsvn_subr/io.c	(working copy)
@@ -1883,9 +1883,13 @@
   apr_dir_t *handle;
   apr_pool_t *subpool;
   const char *dirname_apr;
+  apr_finfo_t finfo;
 
   wanted |= APR_FINFO_TYPE | APR_FINFO_NAME;
 
+  SVN_ERR (svn_io_stat (&finfo, dirname, wanted & ~APR_FINFO_NAME, pool));
+  SVN_ERR ((*walk_func) (walk_baton, dirname, &finfo, pool));
+
   SVN_ERR (svn_path_cstring_from_utf8 (&dirname_apr, dirname, pool));
 
   apr_err = apr_dir_open (&handle, dirname_apr, pool);
@@ -1897,7 +1901,6 @@
 
   for ( ; ; svn_pool_clear (subpool))
     {
-      apr_finfo_t finfo;
       const char *name_utf8;
       const char *full_path;
 
@@ -1912,28 +1915,12 @@
 
       if (finfo.filetype == APR_DIR)
         {
-          if (finfo.name[0] == '.')
-            {
-              if (finfo.name[1] == '\0')
-                {
-                  /* current directory. pass the full directory name to
-                     the callback */
+          if (finfo.name[0] == '.'
+              && (finfo.name[1] == '\0'
+                  || (finfo.name[1] == '.' && finfo.name[2] == '\0')))
+            /* skip the "." and ".." */
+            continue;
 
-                  SVN_ERR ((*walk_func) (walk_baton,
-                                         dirname,
-                                         &finfo,
-                                         subpool));
-
-                  /* done with this entry; move to next */
-                  continue;
-                }
-              else if (finfo.name[1] == '.' && finfo.name[2] == '\0')
-                {
-                  /* skip the parent directory; move to next */
-                  continue;
-                }
-            }
-
           /* some other directory. recurse. it will be passed to the
              callback inside the recursion. */
           SVN_ERR (svn_path_cstring_to_utf8 (&name_utf8, finfo.name,
-- 
Philip Martin
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Tue Feb 17 18:02:54 2004