All pastes #44246 Raw Edit

Mine

public text v1 · immutable
#44246 ·published 2006-03-02 18:28 UTC
rendered paste body
Index: subversion/include/svn_error_codes.h
===================================================================
--- subversion/include/svn_error_codes.h	(revision 18687)
+++ subversion/include/svn_error_codes.h	(working copy)
@@ -859,6 +859,10 @@
              SVN_ERR_APMOD_CATEGORY_START + 4,
              "Input/output error")
 
+  SVN_ERRDEF (SVN_ERR_APMOD_DIRECTORY_EXISTS,
+              SVN_ERR_APMOD_CATEGORY_START + 5,
+              "Directory already exists")
+
   /* libsvn_client errors */
 
   SVN_ERRDEF(SVN_ERR_CLIENT_VERSIONED_PATH_REQUIRED,
Index: subversion/mod_dav_svn/repos.c
===================================================================
--- subversion/mod_dav_svn/repos.c	(revision 18687)
+++ subversion/mod_dav_svn/repos.c	(working copy)
@@ -2896,6 +2896,41 @@
   svn_error_t *serr;
   dav_error *err;
 
+  /* This message
+   * 
+   *    http://subversion.tigris.org/servlets/ReadMsg?list=dev&msgNo=111295
+   *    From: Kamesh Jayachandran <kamesh@collab.net>
+   *    To: dev@subversion.tigris.org
+   *    Subject: Re: [PATCH][Issue 2295]"svn mkdir URL" gives \
+   *             poor error message when
+   *    directory exists
+   *    Date: Mon, 30 Jan 2006 19:40:38 +0530
+   *    Message-ID: <43DE1E5E.4020307@collab.net>
+   *    References: <43DCD9E2.1070408@collab.net>
+   *                <85mzheod6n.fsf@newton.ch.collab.net>
+   *                <43DDD7AE.7090000@collab.net>
+   *                <43DE1A67.9000602@btopenworld.com>
+   *
+   * explains how this method of detecting an attempt to create a
+   * directory ("collection") where one already exists is based on
+   * code in httpd-2.0.55/modules/dav/main/mod_dav.c, saying:
+   * 
+   *    "In case get_resource returns a resource with *exists* member
+   *    being true, apache dav does not call create collection hook
+   *    and error out with HTTP_METHOD_NOT_ALLOWED."
+   *
+   * That message is a response to someone else asking whether doing
+   * this check in dav_svn_get_resource() is really appropriate (see
+   * http://subversion.tigris.org/servlets/ReadMsg?list=dev&msgNo=111293).
+   * IGNORE MOST OF THE ABOVE COMMENT, GARRETT, IT DATES FROM PREV PATCH
+   */
+  if (resource->exists)
+    {
+      return dav_new_error(resource->pool, HTTP_CONFLICT,
+                           SVN_ERR_APMOD_DIRECTORY_EXISTS,
+                           "Directory already exists");
+    }
+
   if (resource->type != DAV_RESOURCE_TYPE_WORKING
       && resource->type != DAV_RESOURCE_TYPE_REGULAR)
     {
Index: subversion/tests/cmdline/basic_tests.py
===================================================================
--- subversion/tests/cmdline/basic_tests.py	(revision 18687)
+++ subversion/tests/cmdline/basic_tests.py	(working copy)
@@ -1714,6 +1714,27 @@
                                      None, ".*has no committed revision.*",
                                      'cat', '-rPREV', f_path)
 
+#----------------------------------------------------------------------
+# Issue #2295.
+def duplicate_mkdir_over_dav_url(sbox):
+  "useful error on 'mkdir URL_TO_EXISTING_DIR'"
+  
+
+  sbox.build()
+  url = svntest.main.current_repo_url
+  scheme = url[:string.find(url, ":")]
+  if scheme == 'http' or scheme == 'https':
+    duplicate_url_path = url + '/duplicate'
+
+    svntest.actions.run_and_verify_svn("mkdir DAV_URL/DUPLICATE",
+                                       ["\n", "Committed revision 2.\n"], [],
+                                       'mkdir', '-m', 'log_msg', 
+                                       duplicate_url_path)
+
+    svntest.actions.run_and_verify_svn("mkdir DAV_URL/DUPLICATE",
+                                       [], '.*409 Directory already exists.*',
+                                       'mkdir', '-m', 'log_msg', 
+                                       duplicate_url_path)
 ########################################################################
 # Run the tests
 
Index: subversion/tests/cmdline/commit_tests.py
===================================================================
--- subversion/tests/cmdline/commit_tests.py	(revision 18687)
+++ subversion/tests/cmdline/commit_tests.py	(working copy)
@@ -1990,6 +1990,28 @@
                                       'ci', '-m', 'log msg', iota_path)
 
 
+#----------------------------------------------------------------------
+# Issue #2295.
+def duplicate_mkdir_over_dav_url(sbox):
+  "useful error on 'mkdir DAV_URL_TO_EXISTING_DIR'"
+
+  sbox.build()
+  url = svntest.main.current_repo_url
+  scheme = url[:string.find(url, ":")]
+  if scheme == 'http' or scheme == 'https':
+    duplicate_url_path = url + '/duplicate'
+
+    svntest.actions.run_and_verify_svn("mkdir DAV_URL/DUPLICATE",
+                                       ["\n", "Committed revision 2.\n"], [],
+                                       'mkdir', '-m', 'log_msg', 
+                                       duplicate_url_path)
+
+    svntest.actions.run_and_verify_svn("mkdir DAV_URL/DUPLICATE",
+                                       [], '.*Directory already exists.*',
+                                       'mkdir', '-m', 'log_msg', 
+                                       duplicate_url_path)
+
+
 ########################################################################
 # Run the tests
 
@@ -2029,7 +2051,8 @@
               mods_in_schedule_delete,
               Skip(tab_test, (os.name != 'posix' or sys.platform == 'cygwin')),
               local_mods_are_not_commits,
-              post_commit_hook_test
+              post_commit_hook_test,
+              duplicate_mkdir_over_dav_url,
              ]
 
 if __name__ == '__main__':