Author: pburba
Date: Thu Aug  4 17:28:51 2011
New Revision: 1153942

URL: http://svn.apache.org/viewvc?rev=1153942&view=rev
Log:
On the issue-3975 branch: Sync with ^/subversion/trunk.

Modified:
    subversion/branches/issue-3975/   (props changed)
    subversion/branches/issue-3975/build/ac-macros/neon.m4
    subversion/branches/issue-3975/subversion/bindings/javahl/native/SVNBase.cpp
    
subversion/branches/issue-3975/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
    subversion/branches/issue-3975/subversion/libsvn_client/externals.c
    subversion/branches/issue-3975/subversion/libsvn_ra_serf/commit.c
    subversion/branches/issue-3975/subversion/libsvn_ra_serf/update.c
    subversion/branches/issue-3975/subversion/libsvn_repos/log.c
    subversion/branches/issue-3975/subversion/libsvn_repos/repos.c
    subversion/branches/issue-3975/subversion/libsvn_subr/io.c
    subversion/branches/issue-3975/subversion/libsvn_wc/copy.c
    subversion/branches/issue-3975/subversion/libsvn_wc/status.c
    subversion/branches/issue-3975/subversion/libsvn_wc/wc.h
    subversion/branches/issue-3975/subversion/libsvn_wc/wc_db.c
    subversion/branches/issue-3975/subversion/tests/cmdline/externals_tests.py
    subversion/branches/issue-3975/subversion/tests/libsvn_client/client-test.c
    subversion/branches/issue-3975/subversion/tests/libsvn_wc/op-depth-test.c
    subversion/branches/issue-3975/subversion/tests/svn_test.h
    subversion/branches/issue-3975/subversion/tests/svn_test_fs.c
    subversion/branches/issue-3975/subversion/tests/svn_test_fs.h

Propchange: subversion/branches/issue-3975/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Aug  4 17:28:51 2011
@@ -54,3 +54,4 @@
 /subversion/branches/tree-conflicts:868291-873154
 /subversion/branches/tree-conflicts-notify:873926-874008
 /subversion/branches/uris-as-urls:1060426-1064427
+/subversion/trunk:1152931-1153938

Modified: subversion/branches/issue-3975/build/ac-macros/neon.m4
URL: 
http://svn.apache.org/viewvc/subversion/branches/issue-3975/build/ac-macros/neon.m4?rev=1153942&r1=1153941&r2=1153942&view=diff
==============================================================================
--- subversion/branches/issue-3975/build/ac-macros/neon.m4 (original)
+++ subversion/branches/issue-3975/build/ac-macros/neon.m4 Thu Aug  4 17:28:51 
2011
@@ -121,7 +121,8 @@ int main()
               if test "$shared_linking" = "no"; then
                 NEON_LIBS=`$PKG_CONFIG neon --libs --static`
                 LIBS="$LIBS $NEON_LIBS"
-                AC_LINK_IFELSE([AC_LANG_SOURCE([[$neon_test_code]])], , 
AC_MSG_ERROR([cannot find Neon]))
+                AC_LINK_IFELSE([AC_LANG_SOURCE([[$neon_test_code]])], ,
+                               AC_MSG_ERROR([cannot find a usable Neon 
library]))
               fi
               CFLAGS="$old_CFLAGS"
               LIBS="$old_LIBS"

Modified: 
subversion/branches/issue-3975/subversion/bindings/javahl/native/SVNBase.cpp
URL: 
http://svn.apache.org/viewvc/subversion/branches/issue-3975/subversion/bindings/javahl/native/SVNBase.cpp?rev=1153942&r1=1153941&r2=1153942&view=diff
==============================================================================
--- 
subversion/branches/issue-3975/subversion/bindings/javahl/native/SVNBase.cpp 
(original)
+++ 
subversion/branches/issue-3975/subversion/bindings/javahl/native/SVNBase.cpp 
Thu Aug  4 17:28:51 2011
@@ -57,14 +57,17 @@ jlong SVNBase::findCppAddrForJObject(job
       if (JNIUtil::isJavaExceptionThrown())
         return 0;
 
-      /* jthis is not guaranteed to be the same between JNI invocations, so
-         we do a little dance here and store the updated version in our
-         object for this invocation.
-
-         findCppAddrForJObject() is, by necessity, called before any other
-         methods on the C++ object, so by doing this we can guarantee a valid
-         jthis pointer for subsequent uses. */
-      (reinterpret_cast<SVNBase *> (cppAddr))->jthis = jthis;
+      if (cppAddr)
+        {
+          /* jthis is not guaranteed to be the same between JNI invocations, so
+             we do a little dance here and store the updated version in our
+             object for this invocation.
+
+             findCppAddrForJObject() is, by necessity, called before any other
+             methods on the C++ object, so by doing this we can guarantee a
+             valid jthis pointer for subsequent uses. */
+          (reinterpret_cast<SVNBase *> (cppAddr))->jthis = jthis;
+        }
       return cppAddr;
     }
 }

Modified: 
subversion/branches/issue-3975/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
URL: 
http://svn.apache.org/viewvc/subversion/branches/issue-3975/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java?rev=1153942&r1=1153941&r2=1153942&view=diff
==============================================================================
--- 
subversion/branches/issue-3975/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
 (original)
+++ 
subversion/branches/issue-3975/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
 Thu Aug  4 17:28:51 2011
@@ -3343,6 +3343,16 @@ public class BasicTests extends SVNTests
     }
 
     /**
+     * Test an explicit expose of SVNClient.
+     * (This used to cause a fatal exception in the Java Runtime)
+     */
+    public void testDispose() throws Throwable
+    {
+      SVNClient cl = new SVNClient();
+      cl.dispose();
+    }
+
+    /**
      * @return <code>file</code> converted into a -- possibly
      * <code>canonical</code>-ized -- Subversion-internal path
      * representation.

Modified: subversion/branches/issue-3975/subversion/libsvn_client/externals.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/issue-3975/subversion/libsvn_client/externals.c?rev=1153942&r1=1153941&r2=1153942&view=diff
==============================================================================
--- subversion/branches/issue-3975/subversion/libsvn_client/externals.c 
(original)
+++ subversion/branches/issue-3975/subversion/libsvn_client/externals.c Thu Aug 
 4 17:28:51 2011
@@ -898,6 +898,11 @@ handle_external_item_change(const struct
                    scratch_pool));
           break;
         case svn_node_file:
+          if (strcmp(eb->repos_root_url, ra_cache.repos_root_url))
+            return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+                      _("Unsupported external: "
+                        "url of file external '%s' is not in repository '%s'"),
+                      new_url, eb->repos_root_url);
           SVN_ERR(switch_file_external(local_abspath,
                                        new_url,
                                        &new_item->peg_revision,
@@ -947,6 +952,11 @@ handle_external_item_change(const struct
                                       scratch_pool));
           break;
         case svn_node_file:
+          if (strcmp(eb->repos_root_url, ra_cache.repos_root_url))
+            return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+                      _("Unsupported external: "
+                        "url of file external '%s' is not in repository '%s'"),
+                      new_url, eb->repos_root_url);
           SVN_ERR(switch_file_external(local_abspath,
                                        new_url,
                                        &new_item->peg_revision,

Modified: subversion/branches/issue-3975/subversion/libsvn_ra_serf/commit.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/issue-3975/subversion/libsvn_ra_serf/commit.c?rev=1153942&r1=1153941&r2=1153942&view=diff
==============================================================================
--- subversion/branches/issue-3975/subversion/libsvn_ra_serf/commit.c (original)
+++ subversion/branches/issue-3975/subversion/libsvn_ra_serf/commit.c Thu Aug  
4 17:28:51 2011
@@ -355,19 +355,18 @@ checkout_dir(dir_context_t *dir)
   checkout_context_t *checkout_ctx;
   svn_ra_serf__handler_t *handler;
   svn_error_t *err;
-  dir_context_t *parent_dir = dir->parent_dir;
+  dir_context_t *p_dir = dir;
 
   if (dir->checkout)
     {
       return SVN_NO_ERROR;
     }
 
-  /* Is one of our parent dirs newly added?  If so, we're already
-   * implicitly checked out.
-   */
-  while (parent_dir)
+  /* Is this directory or one of our parent dirs newly added? 
+   * If so, we're already implicitly checked out. */
+  while (p_dir)
     {
-      if (parent_dir->added)
+      if (p_dir->added)
         {
           /* Implicitly checkout this dir now. */
           dir->checkout = apr_pcalloc(dir->pool, sizeof(*dir->checkout));
@@ -381,7 +380,7 @@ checkout_dir(dir_context_t *dir)
 
           return SVN_NO_ERROR;
         }
-      parent_dir = parent_dir->parent_dir;
+      p_dir = p_dir->parent_dir;
     }
 
   /* Checkout our directory into the activity URL now. */

Modified: subversion/branches/issue-3975/subversion/libsvn_ra_serf/update.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/issue-3975/subversion/libsvn_ra_serf/update.c?rev=1153942&r1=1153941&r2=1153942&view=diff
==============================================================================
--- subversion/branches/issue-3975/subversion/libsvn_ra_serf/update.c (original)
+++ subversion/branches/issue-3975/subversion/libsvn_ra_serf/update.c Thu Aug  
4 17:28:51 2011
@@ -118,7 +118,7 @@ typedef struct report_dir_t
   /* the canonical url for this directory after updating. (received) */
   const char *url;
 
-  /* The original repos_relpath of this url (from the workingcopy)
+  /* The original repos_relpath of this url (from the working copy)
      or NULL if the repos_relpath can be calculated from the edit root. */
   const char *repos_relpath;
 

Modified: subversion/branches/issue-3975/subversion/libsvn_repos/log.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/issue-3975/subversion/libsvn_repos/log.c?rev=1153942&r1=1153941&r2=1153942&view=diff
==============================================================================
--- subversion/branches/issue-3975/subversion/libsvn_repos/log.c (original)
+++ subversion/branches/issue-3975/subversion/libsvn_repos/log.c Thu Aug  4 
17:28:51 2011
@@ -1771,7 +1771,7 @@ store_search(svn_mergeinfo_t processed,
    do_logs()/send_logs()/handle_merge_revisions() recursions, see also the
    argument of the same name in send_logs().
 
-   If PROCESSED is a mergeinfo hash that represents the paths and
+   PROCESSED is a mergeinfo hash that represents the paths and
    revisions that have already been searched.  Allocated like
    NESTED_MERGES above.
 

Modified: subversion/branches/issue-3975/subversion/libsvn_repos/repos.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/issue-3975/subversion/libsvn_repos/repos.c?rev=1153942&r1=1153941&r2=1153942&view=diff
==============================================================================
--- subversion/branches/issue-3975/subversion/libsvn_repos/repos.c (original)
+++ subversion/branches/issue-3975/subversion/libsvn_repos/repos.c Thu Aug  4 
17:28:51 2011
@@ -364,6 +364,8 @@ PREWRITTEN_HOOKS_TEXT
 
     SVN_ERR_W(svn_io_file_create(this_path, contents, pool),
               _("Creating start-commit hook"));
+
+    SVN_ERR(svn_io_set_file_executable(this_path, TRUE, FALSE, pool));
   }  /* end start-commit hook */
 
   /* Pre-commit hook. */
@@ -454,6 +456,8 @@ PREWRITTEN_HOOKS_TEXT
 
     SVN_ERR_W(svn_io_file_create(this_path, contents, pool),
               _("Creating pre-commit hook"));
+
+    SVN_ERR(svn_io_set_file_executable(this_path, TRUE, FALSE, pool));
   }  /* end pre-commit hook */
 
 
@@ -530,6 +534,8 @@ PREWRITTEN_HOOKS_TEXT
 
     SVN_ERR_W(svn_io_file_create(this_path, contents, pool),
               _("Creating pre-revprop-change hook"));
+
+    SVN_ERR(svn_io_set_file_executable(this_path, TRUE, FALSE, pool));
   }  /* end pre-revprop-change hook */
 
 
@@ -620,6 +626,8 @@ PREWRITTEN_HOOKS_TEXT
 
     SVN_ERR_W(svn_io_file_create(this_path, contents, pool),
               "Creating pre-lock hook");
+
+    SVN_ERR(svn_io_set_file_executable(this_path, TRUE, FALSE, pool));
   }  /* end pre-lock hook */
 
 
@@ -702,6 +710,8 @@ PREWRITTEN_HOOKS_TEXT
 
     SVN_ERR_W(svn_io_file_create(this_path, contents, pool),
               "Creating pre-unlock hook");
+
+    SVN_ERR(svn_io_set_file_executable(this_path, TRUE, FALSE, pool));
   }  /* end pre-unlock hook */
 
 
@@ -762,6 +772,8 @@ PREWRITTEN_HOOKS_TEXT
 
     SVN_ERR_W(svn_io_file_create(this_path, contents, pool),
               _("Creating post-commit hook"));
+
+    SVN_ERR(svn_io_set_file_executable(this_path, TRUE, FALSE, pool));
   } /* end post-commit hook */
 
 
@@ -823,6 +835,8 @@ PREWRITTEN_HOOKS_TEXT
 
     SVN_ERR_W(svn_io_file_create(this_path, contents, pool),
               "Creating post-lock hook");
+
+    SVN_ERR(svn_io_set_file_executable(this_path, TRUE, FALSE, pool));
   } /* end post-lock hook */
 
 
@@ -882,6 +896,8 @@ PREWRITTEN_HOOKS_TEXT
 
     SVN_ERR_W(svn_io_file_create(this_path, contents, pool),
               "Creating post-unlock hook");
+
+    SVN_ERR(svn_io_set_file_executable(this_path, TRUE, FALSE, pool));
   } /* end post-unlock hook */
 
 
@@ -948,6 +964,8 @@ PREWRITTEN_HOOKS_TEXT
 
     SVN_ERR_W(svn_io_file_create(this_path, contents, pool),
               _("Creating post-revprop-change hook"));
+
+    SVN_ERR(svn_io_set_file_executable(this_path, TRUE, FALSE, pool));
   } /* end post-revprop-change hook */
 
   return SVN_NO_ERROR;

Modified: subversion/branches/issue-3975/subversion/libsvn_subr/io.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/issue-3975/subversion/libsvn_subr/io.c?rev=1153942&r1=1153941&r2=1153942&view=diff
==============================================================================
--- subversion/branches/issue-3975/subversion/libsvn_subr/io.c (original)
+++ subversion/branches/issue-3975/subversion/libsvn_subr/io.c Thu Aug  4 
17:28:51 2011
@@ -2118,12 +2118,6 @@ svn_io_remove_file2(const char *path,
   apr_status_t apr_err;
   const char *path_apr;
 
-#if defined(WIN32) || defined(__OS2__)
-  /* Set the file writable but only on Windows & OS/2, because Windows and OS/2
-     will not allow us to remove files that are read-only. */
-  SVN_ERR(svn_io_set_file_read_write(path, TRUE, scratch_pool));
-#endif /* WIN32 */
-
   SVN_ERR(cstring_from_utf8(&path_apr, path, scratch_pool));
 
   apr_err = apr_file_remove(path_apr, scratch_pool);
@@ -2132,6 +2126,19 @@ svn_io_remove_file2(const char *path,
     return SVN_NO_ERROR;
 
 #ifdef WIN32
+  /* If the target is read only NTFS reports EACCESS and FAT/FAT32
+     reports EEXIST */
+  if (APR_STATUS_IS_EACCES(apr_err) || APR_STATUS_IS_EEXIST(apr_err))
+    {
+      /* Set the destination file writable because Windows will not
+         allow us to delete when path is read-only */
+      SVN_ERR(svn_io_set_file_read_write(path, ignore_enoent, scratch_pool));
+      apr_err = apr_file_remove(path_apr, scratch_pool);
+
+      if (!apr_err)
+        return SVN_NO_ERROR;
+    }
+
     {
       apr_status_t os_err = APR_TO_OS_ERROR(apr_err);
       /* Check to make sure we aren't trying to delete a directory */

Modified: subversion/branches/issue-3975/subversion/libsvn_wc/copy.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/issue-3975/subversion/libsvn_wc/copy.c?rev=1153942&r1=1153941&r2=1153942&view=diff
==============================================================================
--- subversion/branches/issue-3975/subversion/libsvn_wc/copy.c (original)
+++ subversion/branches/issue-3975/subversion/libsvn_wc/copy.c Thu Aug  4 
17:28:51 2011
@@ -642,6 +642,8 @@ copy_or_move(svn_wc_context_t *wc_ctx,
                                    _("The node '%s' was not found."),
                                    svn_dirent_local_style(src_abspath,
                                                           scratch_pool));
+        default:
+          break;
       }
 
     SVN_ERR(svn_wc__db_read_info(&dstdir_status, NULL, NULL, NULL,

Modified: subversion/branches/issue-3975/subversion/libsvn_wc/status.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/issue-3975/subversion/libsvn_wc/status.c?rev=1153942&r1=1153941&r2=1153942&view=diff
==============================================================================
--- subversion/branches/issue-3975/subversion/libsvn_wc/status.c (original)
+++ subversion/branches/issue-3975/subversion/libsvn_wc/status.c Thu Aug  4 
17:28:51 2011
@@ -2464,21 +2464,24 @@ internal_status(svn_wc_status3_t **statu
                              db, local_abspath,
                              scratch_pool, scratch_pool);
 
-  if ((err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
-      || node_status == svn_wc__db_status_not_present
-      || node_status == svn_wc__db_status_server_excluded
-      || node_status == svn_wc__db_status_excluded)
+  if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
     {
       svn_error_clear(err);
       node_kind = svn_wc__db_kind_unknown;
-
       /* Ensure conflicted is always set, but don't hide tree conflicts
          on 'hidden' nodes. */
-      if (err)
-        conflicted = FALSE;
+      conflicted = FALSE;
+    }
+  else if (err)
+    {
+        return svn_error_trace(err);
+    }
+  else if (node_status == svn_wc__db_status_not_present
+           || node_status == svn_wc__db_status_server_excluded
+           || node_status == svn_wc__db_status_excluded)
+    {
+      node_kind = svn_wc__db_kind_unknown;
     }
-  else
-    SVN_ERR(err);
 
   if (node_kind == svn_wc__db_kind_unknown)
     return svn_error_trace(assemble_unversioned(status,

Modified: subversion/branches/issue-3975/subversion/libsvn_wc/wc.h
URL: 
http://svn.apache.org/viewvc/subversion/branches/issue-3975/subversion/libsvn_wc/wc.h?rev=1153942&r1=1153941&r2=1153942&view=diff
==============================================================================
--- subversion/branches/issue-3975/subversion/libsvn_wc/wc.h (original)
+++ subversion/branches/issue-3975/subversion/libsvn_wc/wc.h Thu Aug  4 
17:28:51 2011
@@ -402,7 +402,7 @@ svn_wc__internal_file_modified_p(svn_boo
    conflict resolver as older_version and their_version.
 
    ## TODO: We should store the information in LEFT_VERSION and RIGHT_VERSION
-            in the workingcopy for future retrieval via svn info.
+            in the working copy for future retrieval via svn info.
 
    WRI_ABSPATH describes in which working copy information should be
    retrieved. (Interesting for merging file externals).

Modified: subversion/branches/issue-3975/subversion/libsvn_wc/wc_db.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/issue-3975/subversion/libsvn_wc/wc_db.c?rev=1153942&r1=1153941&r2=1153942&view=diff
==============================================================================
--- subversion/branches/issue-3975/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/branches/issue-3975/subversion/libsvn_wc/wc_db.c Thu Aug  4 
17:28:51 2011
@@ -1547,7 +1547,7 @@ svn_wc__db_get_wcroot(const char **wcroo
 
   if (wcroot == NULL)
     return svn_error_createf(SVN_ERR_WC_NOT_WORKING_COPY, NULL,
-                             _("The node '%s' is not in a workingcopy."),
+                             _("The node '%s' is not in a working copy."),
                              svn_dirent_local_style(wri_abspath,
                                                     scratch_pool));
 

Modified: 
subversion/branches/issue-3975/subversion/tests/cmdline/externals_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/issue-3975/subversion/tests/cmdline/externals_tests.py?rev=1153942&r1=1153941&r2=1153942&view=diff
==============================================================================
--- subversion/branches/issue-3975/subversion/tests/cmdline/externals_tests.py 
(original)
+++ subversion/branches/issue-3975/subversion/tests/cmdline/externals_tests.py 
Thu Aug  4 17:28:51 2011
@@ -28,6 +28,7 @@
 import sys
 import os
 import re
+import shutil
 
 # Our testing module
 import svntest
@@ -1876,6 +1877,51 @@ def exclude_externals(sbox):
                                         None, None, None, None, False,
                                         '--set-depth', 'infinity', wc_dir)
 
+def file_externals_different_repos(sbox):
+  "update file externals via different url"
+
+  sbox.build()
+
+  wc_dir = sbox.wc_dir
+  r1_url = sbox.repo_url
+
+  r2_dir, r2_url = sbox.add_repo_path('2')
+  shutil.copytree(sbox.repo_dir, r2_dir)
+
+
+  sbox.simple_propset('svn:externals',
+                      'r1-e-1   ' + r1_url + '/iota\n' +
+                      r1_url + '/iota  r1-e-2\n' +
+                      'r2-e-1   ' + r2_url + '/iota\n' +
+                      r2_url + '/iota  r2-e-2\n' +
+                      '^/iota  rr-e-1\n', '')
+
+  expected_output = svntest.wc.State(wc_dir, {
+    'r1-e-1'            : Item(status='A '),
+    'r1-e-2'            : Item(status='A '),
+    'rr-e-1'            : Item(status='A '),
+  })
+
+  # The externals from r2 should fail, but currently pass.
+  # This creates a wc.db inconsistency
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output, None, None,
+                                        'svn: warning: W200007: Unsupported.*')
+
+  svntest.actions.run_and_verify_svn(None, None, [],
+                                     'relocate', r1_url, r2_url, wc_dir)
+
+
+  expected_output = svntest.wc.State(wc_dir, {
+    'r2-e-1'            : Item(status='A '),
+    'r2-e-2'            : Item(status='A '),
+  })
+
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output, None, None,
+                                        'svn: warning: W200007: Unsupported.*')
+
+
 ########################################################################
 # Run the tests
 
@@ -1914,6 +1960,7 @@ test_list = [ None,
               incoming_file_on_file_external,
               incoming_file_external_on_file,
               exclude_externals,
+              file_externals_different_repos,
              ]
 
 if __name__ == '__main__':

Modified: 
subversion/branches/issue-3975/subversion/tests/libsvn_client/client-test.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/issue-3975/subversion/tests/libsvn_client/client-test.c?rev=1153942&r1=1153941&r2=1153942&view=diff
==============================================================================
--- subversion/branches/issue-3975/subversion/tests/libsvn_client/client-test.c 
(original)
+++ subversion/branches/issue-3975/subversion/tests/libsvn_client/client-test.c 
Thu Aug  4 17:28:51 2011
@@ -36,6 +36,40 @@
 #include "../svn_test.h"
 #include "../svn_test_fs.h"
 
+
+/* Create a repository with a filesystem based on OPTS in a subdir NAME,
+ * commit the standard Greek tree as revision 1, and set *REPOS_URL to
+ * the URL we will use to access it.
+ *
+ * ### This always returns a file: URL. We should upgrade this to use the
+ *     test suite's specified URL scheme instead. */
+static svn_error_t *
+create_greek_repos(const char **repos_url,
+                   const char *name,
+                   const svn_test_opts_t *opts,
+                   apr_pool_t *pool)
+{
+  svn_repos_t *repos;
+  svn_revnum_t committed_rev;
+  svn_fs_txn_t *txn;
+  svn_fs_root_t *txn_root;
+
+  /* Create a filesytem and repository. */
+  SVN_ERR(svn_test__create_repos(&repos, name, opts, pool));
+
+  /* Prepare and commit a txn containing the Greek tree. */
+  SVN_ERR(svn_fs_begin_txn2(&txn, svn_repos_fs(repos), 0 /* rev */,
+                            0 /* flags */, pool));
+  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+  SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
+  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &committed_rev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(committed_rev));
+
+  SVN_ERR(svn_uri_get_file_url_from_dirent(repos_url, name, pool));
+  return SVN_NO_ERROR;
+}
+
+
 typedef struct mergeinfo_catalog_item {
   const char *path;
   const char *unparsed_mergeinfo;
@@ -291,14 +325,9 @@ static svn_error_t *
 test_patch(const svn_test_opts_t *opts,
            apr_pool_t *pool)
 {
-  svn_repos_t *repos;
-  svn_fs_t *fs;
-  svn_fs_txn_t *txn;
-  svn_fs_root_t *txn_root;
   const char *repos_url;
   const char *wc_path;
   const char *cwd;
-  svn_revnum_t committed_rev;
   svn_opt_revision_t rev;
   svn_opt_revision_t peg_rev;
   svn_client_ctx_t *ctx;
@@ -333,22 +362,11 @@ test_patch(const svn_test_opts_t *opts,
     "+It is really the file 'gamma'."
   };
 
-  /* Create a filesytem and repository. */
-  SVN_ERR(svn_test__create_repos(&repos, "test-patch-repos",
-                                 opts, pool));
-  fs = svn_repos_fs(repos);
-
-  /* Prepare a txn to receive the greek tree. */
-  SVN_ERR(svn_fs_begin_txn2(&txn, fs, 0, 0, pool));
-  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
-  SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
-  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &committed_rev, txn, pool));
-  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(committed_rev));
+  /* Create a filesytem and repository containing the Greek tree. */
+  SVN_ERR(create_greek_repos(&repos_url, "test-patch-repos", opts, pool));
 
   /* Check out the HEAD revision */
   SVN_ERR(svn_dirent_get_absolute(&cwd, "", pool));
-  SVN_ERR(svn_uri_get_file_url_from_dirent(&repos_url, "test-patch-repos",
-                                           pool));
 
   /* Put wc inside an unversioned directory.  Checking out a 1.7 wc
      directly inside a 1.6 wc doesn't work reliably, an intervening
@@ -409,10 +427,6 @@ static svn_error_t *
 test_wc_add_scenarios(const svn_test_opts_t *opts,
                       apr_pool_t *pool)
 {
-  svn_repos_t *repos;
-  svn_fs_t *fs;
-  svn_fs_txn_t *txn;
-  svn_fs_root_t *txn_root;
   const char *repos_url;
   const char *wc_path;
   svn_revnum_t committed_rev;
@@ -423,20 +437,9 @@ test_wc_add_scenarios(const svn_test_opt
   const char *ex_dir_path;
   const char *ex2_dir_path;
 
-  /* Create a filesytem and repository. */
-  SVN_ERR(svn_test__create_repos(&repos, "test-wc-add-repos",
-                                 opts, pool));
-  fs = svn_repos_fs(repos);
-
-  /* Prepare a txn to receive the greek tree. */
-  SVN_ERR(svn_fs_begin_txn2(&txn, fs, 0, 0, pool));
-  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
-  SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
-  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &committed_rev, txn, pool));
-  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(committed_rev));
-
-  SVN_ERR(svn_uri_get_file_url_from_dirent(&repos_url, "test-wc-add-repos",
-                                           pool));
+  /* Create a filesytem and repository containing the Greek tree. */
+  SVN_ERR(create_greek_repos(&repos_url, "test-wc-add-repos", opts, pool));
+  committed_rev = 1;
 
   SVN_ERR(svn_dirent_get_absolute(&wc_path, "test-wc-add", pool));
 
@@ -556,32 +559,15 @@ static svn_error_t *
 test_copy_crash(const svn_test_opts_t *opts,
                 apr_pool_t *pool)
 {
-  svn_repos_t *repos;
-  svn_fs_t *fs;
-  svn_fs_txn_t *txn;
-  svn_fs_root_t *txn_root;
   apr_array_header_t *sources;
-  svn_revnum_t committed_rev;
   svn_opt_revision_t rev;
   svn_client_copy_source_t source;
   svn_client_ctx_t *ctx;
   const char *dest;
   const char *repos_url;
 
-  /* Create a filesytem and repository. */
-  SVN_ERR(svn_test__create_repos(&repos, "test-copy-crash",
-                                 opts, pool));
-  fs = svn_repos_fs(repos);
-
-  /* Prepare a txn to receive the greek tree. */
-  SVN_ERR(svn_fs_begin_txn2(&txn, fs, 0, 0, pool));
-  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
-  SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
-  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &committed_rev, txn, pool));
-  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(committed_rev));
-
-  SVN_ERR(svn_uri_get_file_url_from_dirent(&repos_url, "test-copy-crash",
-                                           pool));
+  /* Create a filesytem and repository containing the Greek tree. */
+  SVN_ERR(create_greek_repos(&repos_url, "test-copy-crash", opts, pool));
 
   svn_client_create_context(&ctx, pool);
 
@@ -605,11 +591,6 @@ static svn_error_t *
 test_16k_add(const svn_test_opts_t *opts,
                 apr_pool_t *pool)
 {
-  svn_repos_t *repos;
-  svn_fs_t *fs;
-  svn_fs_txn_t *txn;
-  svn_fs_root_t *txn_root;
-  svn_revnum_t committed_rev;
   svn_opt_revision_t rev;
   svn_client_ctx_t *ctx;
   const char *repos_url;
@@ -619,22 +600,11 @@ test_16k_add(const svn_test_opts_t *opts
   apr_pool_t *iterpool = svn_pool_create(pool);
   int i;
 
-  /* Create a filesytem and repository. */
-  SVN_ERR(svn_test__create_repos(&repos, "test-16k-repos",
-                                 opts, pool));
-  fs = svn_repos_fs(repos);
-
-  /* Prepare a txn to receive the greek tree. */
-  SVN_ERR(svn_fs_begin_txn2(&txn, fs, 0, 0, pool));
-  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
-  SVN_ERR(svn_test__create_greek_tree(txn_root, pool));
-  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &committed_rev, txn, pool));
-  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(committed_rev));
+  /* Create a filesytem and repository containing the Greek tree. */
+  SVN_ERR(create_greek_repos(&repos_url, "test-16k-repos", opts, pool));
 
   /* Check out the HEAD revision */
   SVN_ERR(svn_dirent_get_absolute(&cwd, "", pool));
-  SVN_ERR(svn_uri_get_file_url_from_dirent(&repos_url, "test-16k-repos",
-                                           pool));
 
   /* Put wc inside an unversioned directory.  Checking out a 1.7 wc
      directly inside a 1.6 wc doesn't work reliably, an intervening

Modified: 
subversion/branches/issue-3975/subversion/tests/libsvn_wc/op-depth-test.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/issue-3975/subversion/tests/libsvn_wc/op-depth-test.c?rev=1153942&r1=1153941&r2=1153942&view=diff
==============================================================================
--- subversion/branches/issue-3975/subversion/tests/libsvn_wc/op-depth-test.c 
(original)
+++ subversion/branches/issue-3975/subversion/tests/libsvn_wc/op-depth-test.c 
Thu Aug  4 17:28:51 2011
@@ -268,41 +268,19 @@ wc_move(svn_test__sandbox_t *b, const ch
 static svn_error_t *
 add_and_commit_greek_tree(svn_test__sandbox_t *b)
 {
-  const char *greek_tree_dirs[8] =
-  {
-    "A",
-    "A/B",
-    "A/B/E",
-    "A/B/F",
-    "A/C",
-    "A/D",
-    "A/D/G",
-    "A/D/H"
-  };
-  const char *greek_tree_files[12][2] =
-  {
-    { "iota",         "This is the file 'iota'.\n" },
-    { "A/mu",         "This is the file 'mu'.\n" },
-    { "A/B/lambda",   "This is the file 'lambda'.\n" },
-    { "A/B/E/alpha",  "This is the file 'alpha'.\n" },
-    { "A/B/E/beta",   "This is the file 'beta'.\n" },
-    { "A/D/gamma",    "This is the file 'gamma'.\n" },
-    { "A/D/G/pi",     "This is the file 'pi'.\n" },
-    { "A/D/G/rho",    "This is the file 'rho'.\n" },
-    { "A/D/G/tau",    "This is the file 'tau'.\n" },
-    { "A/D/H/chi",    "This is the file 'chi'.\n" },
-    { "A/D/H/psi",    "This is the file 'psi'.\n" },
-    { "A/D/H/omega",  "This is the file 'omega'.\n" }
-  };
-  int i;
-
-  for (i = 0; i < 8; i++)
-    SVN_ERR(wc_mkdir(b, greek_tree_dirs[i]));
+  const struct svn_test__tree_entry_t *node;
 
-  for (i = 0; i < 12; i++)
+  for (node = svn_test__greek_tree_nodes; node->path; node++)
     {
-      file_write(b, greek_tree_files[i][0], greek_tree_files[i][1]);
-      SVN_ERR(wc_add(b, greek_tree_files[i][0]));
+      if (node->contents)
+        {
+          file_write(b, node->path, node->contents);
+          SVN_ERR(wc_add(b, node->path));
+        }
+      else
+        {
+          SVN_ERR(wc_mkdir(b, node->path));
+        }
     }
 
   SVN_ERR(wc_commit(b, ""));

Modified: subversion/branches/issue-3975/subversion/tests/svn_test.h
URL: 
http://svn.apache.org/viewvc/subversion/branches/issue-3975/subversion/tests/svn_test.h?rev=1153942&r1=1153941&r2=1153942&view=diff
==============================================================================
--- subversion/branches/issue-3975/subversion/tests/svn_test.h (original)
+++ subversion/branches/issue-3975/subversion/tests/svn_test.h Thu Aug  4 
17:28:51 2011
@@ -177,6 +177,27 @@ apr_uint32_t svn_test_rand(apr_uint32_t 
 void svn_test_add_dir_cleanup(const char *path);
 
 
+/* A simple representation for a tree node. */
+typedef struct svn_test__tree_entry_t
+{
+  const char *path;     /* relpath of this node */
+  const char *contents; /* text contents, or NULL for a directory */
+}
+svn_test__tree_entry_t;
+
+/* Wrapper for an array of svn_test__tree_entry_t's. */
+typedef struct svn_test__tree_t
+{
+  svn_test__tree_entry_t *entries;
+  int num_entries;
+}
+svn_test__tree_t;
+
+
+/* The standard Greek tree, terminated by a node with path=NULL. */
+extern const svn_test__tree_entry_t svn_test__greek_tree_nodes[21];
+
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/issue-3975/subversion/tests/svn_test_fs.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/issue-3975/subversion/tests/svn_test_fs.c?rev=1153942&r1=1153941&r2=1153942&view=diff
==============================================================================
--- subversion/branches/issue-3975/subversion/tests/svn_test_fs.c (original)
+++ subversion/branches/issue-3975/subversion/tests/svn_test_fs.c Thu Aug  4 
17:28:51 2011
@@ -135,6 +135,9 @@ create_fs(svn_fs_t **fs_p,
   return SVN_NO_ERROR;
 }
 
+/* If OPTS specifies a filesystem type of 'fsfs' and provides a config file,
+ * copy that file into the filesystem FS and set *MUST_REOPEN to TRUE, else
+ * set *MUST_REOPEN to FALSE. */
 static svn_error_t *
 maybe_install_fsfs_conf(svn_fs_t *fs,
                         const svn_test_opts_t *opts,
@@ -149,7 +152,7 @@ maybe_install_fsfs_conf(svn_fs_t *fs,
   return svn_io_copy_file(opts->config_file,
                           svn_path_join(svn_fs_path(fs, pool),
                                         "fsfs.conf", pool),
-                          FALSE,
+                          FALSE /* copy_perms */,
                           pool);
 }
 
@@ -569,6 +572,30 @@ svn_test__txn_script_exec(svn_fs_root_t 
 }
 
 
+const struct svn_test__tree_entry_t svn_test__greek_tree_nodes[21] = {
+  { "iota",         "This is the file 'iota'.\n" },
+  { "A",            NULL },
+  { "A/mu",         "This is the file 'mu'.\n" },
+  { "A/B",          NULL },
+  { "A/B/lambda",   "This is the file 'lambda'.\n" },
+  { "A/B/E",        NULL },
+  { "A/B/E/alpha",  "This is the file 'alpha'.\n" },
+  { "A/B/E/beta",   "This is the file 'beta'.\n" },
+  { "A/B/F",        NULL },
+  { "A/C",          NULL },
+  { "A/D",          NULL },
+  { "A/D/gamma",    "This is the file 'gamma'.\n" },
+  { "A/D/G",        NULL },
+  { "A/D/G/pi",     "This is the file 'pi'.\n" },
+  { "A/D/G/rho",    "This is the file 'rho'.\n" },
+  { "A/D/G/tau",    "This is the file 'tau'.\n" },
+  { "A/D/H",        NULL },
+  { "A/D/H/chi",    "This is the file 'chi'.\n" },
+  { "A/D/H/psi",    "This is the file 'psi'.\n" },
+  { "A/D/H/omega",  "This is the file 'omega'.\n" },
+  { NULL,           NULL },
+};
+
 svn_error_t *
 svn_test__check_greek_tree(svn_fs_root_t *root,
                            apr_pool_t *pool)
@@ -576,115 +603,47 @@ svn_test__check_greek_tree(svn_fs_root_t
   svn_stream_t *rstream;
   svn_stringbuf_t *rstring;
   svn_stringbuf_t *content;
-  int i;
-
-  const char *file_contents[12][2] =
-  {
-    { "iota", "This is the file 'iota'.\n" },
-    { "A/mu", "This is the file 'mu'.\n" },
-    { "A/B/lambda", "This is the file 'lambda'.\n" },
-    { "A/B/E/alpha", "This is the file 'alpha'.\n" },
-    { "A/B/E/beta", "This is the file 'beta'.\n" },
-    { "A/D/gamma", "This is the file 'gamma'.\n" },
-    { "A/D/G/pi", "This is the file 'pi'.\n" },
-    { "A/D/G/rho", "This is the file 'rho'.\n" },
-    { "A/D/G/tau", "This is the file 'tau'.\n" },
-    { "A/D/H/chi", "This is the file 'chi'.\n" },
-    { "A/D/H/psi", "This is the file 'psi'.\n" },
-    { "A/D/H/omega", "This is the file 'omega'.\n" }
-  };
+  const struct svn_test__tree_entry_t *node;
 
   /* Loop through the list of files, checking for matching content. */
-  for (i = 0; i < 12; i++)
+  for (node = svn_test__greek_tree_nodes; node->path; node++)
     {
-      SVN_ERR(svn_fs_file_contents(&rstream, root,
-                                   file_contents[i][0], pool));
-      SVN_ERR(svn_test__stream_to_string(&rstring, rstream, pool));
-      content = svn_stringbuf_create(file_contents[i][1], pool);
-      if (! svn_stringbuf_compare(rstring, content))
-        return svn_error_createf(SVN_ERR_FS_GENERAL, NULL,
-                                 "data read != data written in file '%s'.",
-                                 file_contents[i][0]);
+      if (node->contents)
+        {
+          SVN_ERR(svn_fs_file_contents(&rstream, root, node->path, pool));
+          SVN_ERR(svn_test__stream_to_string(&rstring, rstream, pool));
+          content = svn_stringbuf_create(node->contents, pool);
+          if (! svn_stringbuf_compare(rstring, content))
+            return svn_error_createf(SVN_ERR_FS_GENERAL, NULL,
+                                     "data read != data written in file '%s'.",
+                                     node->path);
+        }
     }
   return SVN_NO_ERROR;
 }
 
-/**
- * Loads the greek tree in a directory at ROOT_DIR under transaction TXN_ROOT.
- * ROOT_DIR should be created by the caller.
- *
- * Note: this function will not commit the transaction.
- */
 svn_error_t *
 svn_test__create_greek_tree_at(svn_fs_root_t *txn_root,
                                const char *root_dir,
                                apr_pool_t *pool)
 {
-  char *iota =     svn_relpath_join(root_dir, "iota", pool);
-  char *A =        svn_relpath_join(root_dir, "A", pool);
-  char *Amu =      svn_relpath_join(root_dir, "A/mu", pool);
-  char *AB =       svn_relpath_join(root_dir, "A/B", pool);
-  char *ABlambda = svn_relpath_join(root_dir, "A/B/lambda", pool);
-  char *ABE =      svn_relpath_join(root_dir, "A/B/E", pool);
-  char *ABEalpha = svn_relpath_join(root_dir, "A/B/E/alpha", pool);
-  char *ABEbeta =  svn_relpath_join(root_dir, "A/B/E/beta", pool);
-  char *ABF =      svn_relpath_join(root_dir, "A/B/F", pool);
-  char *AC =       svn_relpath_join(root_dir, "A/C", pool);
-  char *AD =       svn_relpath_join(root_dir, "A/D", pool);
-  char *ADgamma =  svn_relpath_join(root_dir, "A/D/gamma", pool);
-  char *ADG =      svn_relpath_join(root_dir, "A/D/G", pool);
-  char *ADGpi =    svn_relpath_join(root_dir, "A/D/G/pi", pool);
-  char *ADGrho =   svn_relpath_join(root_dir, "A/D/G/rho", pool);
-  char *ADGtau =   svn_relpath_join(root_dir, "A/D/G/tau", pool);
-  char *ADH =      svn_relpath_join(root_dir, "A/D/H", pool);
-  char *ADHchi =   svn_relpath_join(root_dir, "A/D/H/chi", pool);
-  char *ADHpsi =   svn_relpath_join(root_dir, "A/D/H/psi", pool);
-  char *ADHomega = svn_relpath_join(root_dir, "A/D/H/omega", pool);
-
-  SVN_ERR(svn_fs_make_file(txn_root, iota, pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, iota, "This is the file 'iota'.\n", pool));
-  SVN_ERR(svn_fs_make_dir  (txn_root, A, pool));
-  SVN_ERR(svn_fs_make_file(txn_root, Amu, pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, Amu, "This is the file 'mu'.\n", pool));
-  SVN_ERR(svn_fs_make_dir  (txn_root, AB, pool));
-  SVN_ERR(svn_fs_make_file(txn_root, ABlambda, pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, ABlambda, "This is the file 'lambda'.\n", pool));
-  SVN_ERR(svn_fs_make_dir  (txn_root, ABE, pool));
-  SVN_ERR(svn_fs_make_file(txn_root, ABEalpha, pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, ABEalpha, "This is the file 'alpha'.\n", pool));
-  SVN_ERR(svn_fs_make_file(txn_root, ABEbeta, pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, ABEbeta, "This is the file 'beta'.\n", pool));
-  SVN_ERR(svn_fs_make_dir  (txn_root, ABF, pool));
-  SVN_ERR(svn_fs_make_dir  (txn_root, AC, pool));
-  SVN_ERR(svn_fs_make_dir  (txn_root, AD, pool));
-  SVN_ERR(svn_fs_make_file(txn_root, ADgamma, pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, ADgamma, "This is the file 'gamma'.\n", pool));
-  SVN_ERR(svn_fs_make_dir  (txn_root, ADG, pool));
-  SVN_ERR(svn_fs_make_file(txn_root, ADGpi, pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, ADGpi, "This is the file 'pi'.\n", pool));
-  SVN_ERR(svn_fs_make_file(txn_root, ADGrho, pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, ADGrho, "This is the file 'rho'.\n", pool));
-  SVN_ERR(svn_fs_make_file(txn_root, ADGtau, pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, ADGtau, "This is the file 'tau'.\n", pool));
-  SVN_ERR(svn_fs_make_dir  (txn_root, ADH, pool));
-  SVN_ERR(svn_fs_make_file(txn_root, ADHchi, pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, ADHchi, "This is the file 'chi'.\n", pool));
-  SVN_ERR(svn_fs_make_file(txn_root, ADHpsi, pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, ADHpsi, "This is the file 'psi'.\n", pool));
-  SVN_ERR(svn_fs_make_file(txn_root, ADHomega, pool));
-  SVN_ERR(svn_test__set_file_contents
-          (txn_root, ADHomega, "This is the file 'omega'.\n", pool));
+  const struct svn_test__tree_entry_t *node;
+
+  for (node = svn_test__greek_tree_nodes; node->path; node++)
+    {
+      const char *path = svn_relpath_join(root_dir, node->path, pool);
+
+      if (node->contents)
+        {
+          SVN_ERR(svn_fs_make_file(txn_root, path, pool));
+          SVN_ERR(svn_test__set_file_contents(txn_root, path, node->contents,
+                                              pool));
+        }
+      else
+        {
+          SVN_ERR(svn_fs_make_dir(txn_root, path, pool));
+        }
+    }
   return SVN_NO_ERROR;
 }
 

Modified: subversion/branches/issue-3975/subversion/tests/svn_test_fs.h
URL: 
http://svn.apache.org/viewvc/subversion/branches/issue-3975/subversion/tests/svn_test_fs.h?rev=1153942&r1=1153941&r2=1153942&view=diff
==============================================================================
--- subversion/branches/issue-3975/subversion/tests/svn_test_fs.h (original)
+++ subversion/branches/issue-3975/subversion/tests/svn_test_fs.h Thu Aug  4 
17:28:51 2011
@@ -102,25 +102,6 @@ svn_test__get_file_contents(svn_fs_root_
 
 /* The Helper Functions to End All Helper Functions */
 
-/* Structure used for testing integrity of the filesystem's revision
-   using validate_tree(). */
-typedef struct svn_test__tree_entry_t
-{
-  const char *path;     /* full path of this node */
-  const char *contents; /* text contents (NULL for directories) */
-}
-svn_test__tree_entry_t;
-
-
-/* Wrapper for an array of the above svn_test__tree_entry_t's.  */
-typedef struct svn_test__tree_t
-{
-  svn_test__tree_entry_t *entries;
-  int num_entries;
-}
-svn_test__tree_t;
-
-
 /* Given a transaction or revision root (ROOT), check to see if the
    tree that grows from that root has all the path entries, and only
    those entries, passed in the array ENTRIES (which is an array of
@@ -168,7 +149,10 @@ svn_error_t *
 svn_test__create_greek_tree(svn_fs_root_t *txn_root,
                             apr_pool_t *pool);
 
-/* Create the Greek Tree under TXN_ROOT at dir ROOT_DIR.  */
+/* Create the Greek Tree under TXN_ROOT at dir ROOT_DIR.
+ * ROOT_DIR should be created by the caller.
+ *
+ * Note: this function will not commit the transaction.  */
 svn_error_t *
 svn_test__create_greek_tree_at(svn_fs_root_t *txn_root,
                                const char *root_dir,


Reply via email to