Modified: subversion/branches/svn_mutex/subversion/libsvn_wc/wc-queries.sql
URL: 
http://svn.apache.org/viewvc/subversion/branches/svn_mutex/subversion/libsvn_wc/wc-queries.sql?rev=1182027&r1=1182026&r2=1182027&view=diff
==============================================================================
--- subversion/branches/svn_mutex/subversion/libsvn_wc/wc-queries.sql (original)
+++ subversion/branches/svn_mutex/subversion/libsvn_wc/wc-queries.sql Tue Oct 
11 19:08:23 2011
@@ -581,7 +581,10 @@ WHERE wc_id = ?1 AND local_relpath = ?2
 
 -- STMT_DELETE_ACTUAL_NODE_RECURSIVE
 DELETE FROM actual_node
-WHERE wc_id = ?1 AND (local_relpath = ?2 OR local_relpath LIKE ?3 ESCAPE '#')
+WHERE wc_id = ?1
+  AND (?2 = ''
+       OR local_relpath = ?2
+       OR (local_relpath > ?2 || '/' AND local_relpath < ?2 || '0'))
 
 -- STMT_DELETE_ACTUAL_NODE_WITHOUT_CONFLICT
 DELETE FROM actual_node
@@ -590,21 +593,23 @@ WHERE wc_id = ?1 AND local_relpath = ?2
 
 -- STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST
 DELETE FROM actual_node
-WHERE wc_id = ?1 AND local_relpath = ?2
-      AND (changelist IS NULL
-           OR local_relpath NOT IN (SELECT local_relpath FROM nodes_current
-                                     WHERE wc_id  = ?1 AND local_relpath = ?2
-                                       AND kind = 'file'))
+WHERE wc_id = ?1
+  AND local_relpath = ?2
+  AND (changelist IS NULL
+       OR NOT EXISTS (SELECT 1 FROM nodes_current c
+                      WHERE c.wc_id = ?1 AND c.local_relpath = local_relpath
+                        AND kind = 'file'))
 
 -- STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE
 DELETE FROM actual_node
-WHERE wc_id = ?1 AND (local_relpath = ?2 OR local_relpath LIKE ?3 ESCAPE '#')
-      AND (changelist IS NULL
-           OR local_relpath NOT IN (SELECT local_relpath FROM nodes_current
-                                    WHERE wc_id = ?1
-                                      AND (local_relpath = ?2
-                                           OR local_relpath LIKE ?3 ESCAPE '#')
-                                      AND kind = 'file'))
+WHERE wc_id = ?1
+  AND (?2 = ''
+       OR local_relpath = ?2
+       OR (local_relpath > ?2 || '/' AND local_relpath < ?2 || '0'))
+  AND (changelist IS NULL
+       OR NOT EXISTS (SELECT 1 FROM nodes_current c
+                      WHERE c.wc_id = ?1 AND c.local_relpath = local_relpath
+                        AND kind = 'file'))
 
 -- STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST
 UPDATE actual_node
@@ -632,7 +637,10 @@ SET properties = NULL,
     older_checksum = NULL,
     left_checksum = NULL,
     right_checksum = NULL
-WHERE wc_id = ?1 AND (local_relpath = ?2 OR local_relpath LIKE ?3 ESCAPE '#')
+WHERE wc_id = ?1
+  AND (?2 = ''
+       OR local_relpath = ?2
+       OR (local_relpath > ?2 || '/' AND local_relpath < ?2 || '0'))
 
 -- STMT_UPDATE_NODE_BASE_DEPTH
 UPDATE nodes SET depth = ?3
@@ -762,10 +770,12 @@ AND NOT EXISTS (SELECT 1 FROM nodes
 -- STMT_DELETE_WC_LOCK_ORPHAN_RECURSIVE
 DELETE FROM wc_lock
 WHERE wc_id = ?1
-AND (local_dir_relpath = ?2 OR local_dir_relpath LIKE ?3 ESCAPE '#')
-AND NOT EXISTS (SELECT 1 FROM nodes
-                 WHERE nodes.wc_id = ?1
-                   AND nodes.local_relpath = wc_lock.local_dir_relpath)
+  AND (?2 = ''
+       OR local_dir_relpath = ?2
+       OR (local_dir_relpath > ?2 || '/' AND local_dir_relpath < ?2 || '0'))
+  AND NOT EXISTS (SELECT 1 FROM nodes
+                   WHERE nodes.wc_id = ?1
+                     AND nodes.local_relpath = wc_lock.local_dir_relpath)
 
 -- STMT_APPLY_CHANGES_TO_BASE_NODE
 /* translated_size and last_mod_time are not mentioned here because they will
@@ -823,7 +833,10 @@ WHERE wc_id = ?1 AND local_relpath = ?2 
 
 -- STMT_UPDATE_OP_DEPTH_INCREASE_RECURSIVE
 UPDATE nodes SET op_depth = ?3 + 1
-WHERE wc_id = ?1 AND local_relpath LIKE ?2 ESCAPE '#' AND op_depth = ?3
+WHERE wc_id = ?1
+  AND (?2 = ''
+       OR (local_relpath > ?2 || '/' AND local_relpath < ?2 || '0'))
+ AND op_depth = ?3
 
 -- STMT_DOES_NODE_EXIST
 SELECT 1 FROM nodes WHERE wc_id = ?1 AND local_relpath = ?2
@@ -831,14 +844,22 @@ LIMIT 1
 
 -- STMT_HAS_ABSENT_NODES
 SELECT local_relpath FROM nodes
-WHERE wc_id = ?1 AND (local_relpath = ?2 OR local_relpath LIKE ?3 ESCAPE '#')
-  AND op_depth = 0 AND presence = 'absent' LIMIT 1
+WHERE wc_id = ?1
+  AND (?2 = ''
+       OR local_relpath = ?2
+       OR (local_relpath > ?2 || '/' AND local_relpath < ?2 || '0'))
+  AND op_depth = 0 AND presence = 'absent'
+LIMIT 1
 
 /* ### Select all absent nodes. */
 -- STMT_SELECT_ALL_ABSENT_NODES
 SELECT local_relpath FROM nodes
-WHERE wc_id = ?1 AND (local_relpath = ?2 OR local_relpath LIKE ?3 ESCAPE '#')
-  AND op_depth = 0 AND presence = 'absent'
+WHERE wc_id = ?1
+  AND (?2 = ''
+       OR local_relpath = ?2
+       OR (local_relpath > ?2 || '/' AND local_relpath < ?2 || '0'))
+  AND op_depth = 0
+  AND presence = 'absent'
 
 -- STMT_INSERT_WORKING_NODE_COPY_FROM_BASE
 INSERT OR REPLACE INTO nodes (
@@ -1177,14 +1198,19 @@ DROP TABLE IF EXISTS delete_list
 SELECT MIN(revision), MAX(revision),
        MIN(changed_revision), MAX(changed_revision) FROM nodes
   WHERE wc_id = ?1
-  AND (local_relpath = ?2 OR local_relpath LIKE ?3 ESCAPE '#')
-  AND presence IN ('normal', 'incomplete')
-  AND file_external IS NULL
-  AND op_depth = 0
+    AND (?2 = ''
+       OR local_relpath = ?2
+       OR (local_relpath > ?2 || '/' AND local_relpath < ?2 || '0'))
+    AND presence IN ('normal', 'incomplete')
+    AND file_external IS NULL
+    AND op_depth = 0
 
 -- STMT_HAS_SPARSE_NODES
 SELECT 1 FROM nodes
-WHERE wc_id = ?1 AND (local_relpath = ?2 OR local_relpath LIKE ?3 ESCAPE '#')
+WHERE wc_id = ?1
+  AND (?2 = ''
+       OR local_relpath = ?2
+       OR (local_relpath > ?2 || '/' AND local_relpath < ?2 || '0'))
   AND op_depth = 0
   AND (presence IN ('absent', 'excluded')
         OR depth NOT IN ('infinity', 'unknown'))
@@ -1193,13 +1219,19 @@ LIMIT 1
 
 -- STMT_SUBTREE_HAS_TREE_MODIFICATIONS
 SELECT 1 FROM nodes
-WHERE wc_id = ?1 AND (local_relpath = ?2 OR local_relpath LIKE ?3 ESCAPE '#')
+WHERE wc_id = ?1
+  AND (?2 = ''
+       OR local_relpath = ?2
+       OR (local_relpath > ?2 || '/' AND local_relpath < ?2 || '0'))
   AND op_depth > 0
 LIMIT 1
 
 -- STMT_SUBTREE_HAS_PROP_MODIFICATIONS
 SELECT 1 FROM actual_node
-WHERE wc_id = ?1 AND (local_relpath = ?2 OR local_relpath LIKE ?3 ESCAPE '#')
+WHERE wc_id = ?1
+  AND (?2 = ''
+       OR local_relpath = ?2
+       OR (local_relpath > ?2 || '/' AND local_relpath < ?2 || '0'))
   AND properties IS NOT NULL
 LIMIT 1
 
@@ -1275,7 +1307,9 @@ LIMIT 1
 -- STMT_SELECT_BASE_FILES_RECURSIVE
 SELECT local_relpath, translated_size, last_mod_time FROM nodes AS n
 WHERE wc_id = ?1
-  AND (local_relpath = ?2 OR local_relpath LIKE ?3 ESCAPE '#')
+  AND (?2 = ''
+       OR local_relpath = ?2
+       OR (local_relpath > ?2 || '/' AND local_relpath < ?2 || '0'))
   AND op_depth = 0
   AND kind='file'
   AND presence='normal'

Modified: subversion/branches/svn_mutex/subversion/libsvn_wc/wc_db.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/svn_mutex/subversion/libsvn_wc/wc_db.c?rev=1182027&r1=1182026&r2=1182027&view=diff
==============================================================================
--- subversion/branches/svn_mutex/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/branches/svn_mutex/subversion/libsvn_wc/wc_db.c Tue Oct 11 
19:08:23 2011
@@ -1212,17 +1212,17 @@ gather_repo_children(const apr_array_hea
 }
 
 
-/* Return TRUE if CHILD_ABSPATH is an immediate child of PARENT_ABSPATH
- * which has PARENT_COMPONENT_COUNT path components.
+/* Return TRUE if CHILD_ABSPATH is an immediate child of PARENT_ABSPATH.
  * Else, return FALSE. */
 static svn_boolean_t
-is_immediate_child_path(const char *parent_abspath,
-                        apr_size_t parent_component_count,
-                        const char *child_abspath)
-{
-  return (svn_dirent_is_ancestor(parent_abspath, child_abspath) &&
-            parent_component_count ==
-            svn_path_component_count(child_abspath) - 1);
+is_immediate_child_path(const char *parent_abspath, const char *child_abspath)
+{
+  const char *local_relpath = svn_dirent_skip_ancestor(parent_abspath,
+                                                       child_abspath);
+
+  /* To be an immediate child local_relpath should have one (not empty)
+     component */
+  return local_relpath && *local_relpath && !strchr(local_relpath, '/');
 }
 
 
@@ -1263,7 +1263,6 @@ flush_entries(svn_wc__db_wcroot_t *wcroo
   if (depth > svn_depth_empty)
     {
       apr_hash_index_t *hi;
-      apr_size_t component_count = svn_path_component_count(local_abspath);
 
       /* Flush access batons of children within the specified depth. */
       for (hi = apr_hash_first(scratch_pool, wcroot->access_cache);
@@ -1273,8 +1272,7 @@ flush_entries(svn_wc__db_wcroot_t *wcroo
           const char *item_abspath = svn__apr_hash_index_key(hi);
 
           if ((depth == svn_depth_files || depth == svn_depth_immediates) &&
-              is_immediate_child_path(local_abspath, component_count,
-                                      item_abspath))
+              is_immediate_child_path(local_abspath, item_abspath))
             {
               remove_from_access_cache(wcroot->access_cache, item_abspath);
             }
@@ -4035,11 +4033,9 @@ catch_copy_of_absent(svn_wc__db_wcroot_t
 
   SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
                                     STMT_HAS_ABSENT_NODES));
-  SVN_ERR(svn_sqlite__bindf(stmt, "iss",
+  SVN_ERR(svn_sqlite__bindf(stmt, "is",
                             wcroot->wc_id,
-                            local_relpath,
-                            construct_like_arg(local_relpath,
-                                               scratch_pool)));
+                            local_relpath));
   SVN_ERR(svn_sqlite__step(&have_row, stmt));
   if (have_row)
     absent_relpath = svn_sqlite__column_text(stmt, 0, scratch_pool);
@@ -5243,8 +5239,7 @@ op_revert_txn(void *baton,
       SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
                                      STMT_UPDATE_OP_DEPTH_INCREASE_RECURSIVE));
       SVN_ERR(svn_sqlite__bindf(stmt, "isi", wcroot->wc_id,
-                                construct_like_arg(local_relpath,
-                                                   scratch_pool),
+                                local_relpath,
                                 op_depth));
       SVN_ERR(svn_sqlite__step_done(stmt));
 
@@ -5287,7 +5282,6 @@ op_revert_recursive_txn(void *baton,
   svn_boolean_t have_row;
   apr_int64_t op_depth;
   int affected_rows;
-  const char *like_arg = construct_like_arg(local_relpath, scratch_pool);
 
   /* ### Similar structure to op_revert_txn, should they be
          combined? */
@@ -5302,8 +5296,8 @@ op_revert_recursive_txn(void *baton,
 
       SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
                                         STMT_DELETE_ACTUAL_NODE_RECURSIVE));
-      SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id,
-                                local_relpath, like_arg));
+      SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id,
+                                local_relpath));
       SVN_ERR(svn_sqlite__step(&affected_rows, stmt));
 
       if (affected_rows)
@@ -5338,21 +5332,21 @@ op_revert_recursive_txn(void *baton,
 
   SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
                         STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE));
-  SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id,
-                            local_relpath, like_arg));
+  SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id,
+                            local_relpath));
   SVN_ERR(svn_sqlite__step_done(stmt));
 
   SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
                         STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE));
-  SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id,
-                            local_relpath, like_arg));
+  SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id,
+                            local_relpath));
   SVN_ERR(svn_sqlite__step_done(stmt));
 
   /* ### This removes the locks, but what about the access batons? */
   SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
                                     STMT_DELETE_WC_LOCK_ORPHAN_RECURSIVE));
-  SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id,
-                            local_relpath, like_arg));
+  SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id,
+                            local_relpath));
   SVN_ERR(svn_sqlite__step_done(stmt));
 
   return SVN_NO_ERROR;
@@ -5741,8 +5735,6 @@ remove_node_txn(void *baton,
   apr_int64_t repos_id;
   const char *repos_relpath;
 
-  const char *like_arg = construct_like_arg(local_relpath, scratch_pool);
-
   SVN_ERR_ASSERT(*local_relpath != '\0'); /* Never on a wcroot */
 
   /* Need info for not_present node? */
@@ -5765,9 +5757,8 @@ remove_node_txn(void *baton,
                                     STMT_DELETE_ACTUAL_NODE_RECURSIVE));
 
   /* Delete all actual nodes at or below local_relpath */
-  SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id,
-                                         local_relpath,
-                                         like_arg));
+  SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id,
+                                         local_relpath));
   SVN_ERR(svn_sqlite__step_done(stmt));
 
   /* Should we leave a not-present node? */
@@ -6041,7 +6032,6 @@ op_delete_txn(void *baton,
   svn_boolean_t have_row, op_root;
   svn_boolean_t add_work = FALSE;
   svn_sqlite__stmt_t *stmt;
-  const char *like_arg;
   apr_int64_t select_depth; /* Depth of what is to be deleted */
   svn_boolean_t refetch_depth = FALSE;
 
@@ -6059,12 +6049,10 @@ op_delete_txn(void *baton,
       || status == svn_wc__db_status_not_present)
     return SVN_NO_ERROR;
 
-  like_arg = construct_like_arg(local_relpath, scratch_pool);
-
   SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
                                     STMT_HAS_ABSENT_NODES));
-  SVN_ERR(svn_sqlite__bindf(stmt, "iss",
-                            wcroot->wc_id, local_relpath, like_arg));
+  SVN_ERR(svn_sqlite__bindf(stmt, "is",
+                            wcroot->wc_id, local_relpath));
   SVN_ERR(svn_sqlite__step(&have_row, stmt));
   if (have_row)
     {
@@ -6126,20 +6114,20 @@ op_delete_txn(void *baton,
      and a NODES row. */
   SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
                          
STMT_DELETE_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE));
-  SVN_ERR(svn_sqlite__bindf(stmt, "iss",
-                            wcroot->wc_id, local_relpath, like_arg));
+  SVN_ERR(svn_sqlite__bindf(stmt, "is",
+                            wcroot->wc_id, local_relpath));
   SVN_ERR(svn_sqlite__step_done(stmt));
 
   SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
                          STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST_RECURSIVE));
-  SVN_ERR(svn_sqlite__bindf(stmt, "iss",
-                            wcroot->wc_id, local_relpath, like_arg));
+  SVN_ERR(svn_sqlite__bindf(stmt, "is",
+                            wcroot->wc_id, local_relpath));
   SVN_ERR(svn_sqlite__step_done(stmt));
 
   SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
                                     STMT_DELETE_WC_LOCK_ORPHAN_RECURSIVE));
-  SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id,
-                            local_relpath, like_arg));
+  SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id,
+                            local_relpath));
   SVN_ERR(svn_sqlite__step_done(stmt));
 
   if (add_work)
@@ -11518,8 +11506,7 @@ get_min_max_revisions(svn_revnum_t *min_
 
   SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
                                     STMT_SELECT_MIN_MAX_REVISIONS));
-  SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id, local_relpath,
-                            construct_like_arg(local_relpath, scratch_pool)));
+  SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
   SVN_ERR(svn_sqlite__step(&have_row, stmt));
   if (have_row)
     {
@@ -11591,11 +11578,9 @@ is_sparse_checkout_internal(svn_boolean_
 
   SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
                                     STMT_HAS_SPARSE_NODES));
-  SVN_ERR(svn_sqlite__bindf(stmt, "iss",
+  SVN_ERR(svn_sqlite__bindf(stmt, "is",
                             wcroot->wc_id,
-                            local_relpath,
-                            construct_like_arg(local_relpath,
-                                               scratch_pool)));
+                            local_relpath));
   /* If this query returns a row, the working copy is sparse. */
   SVN_ERR(svn_sqlite__step(&have_row, stmt));
   *is_sparse_checkout = have_row;
@@ -11756,11 +11741,9 @@ svn_wc__db_get_absent_subtrees(apr_hash_
   VERIFY_USABLE_WCROOT(wcroot);
   SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
                                     STMT_SELECT_ALL_ABSENT_NODES));
-  SVN_ERR(svn_sqlite__bindf(stmt, "iss",
+  SVN_ERR(svn_sqlite__bindf(stmt, "is",
                             wcroot->wc_id,
-                            local_relpath,
-                            construct_like_arg(local_relpath,
-                                               scratch_pool)));
+                            local_relpath));
   SVN_ERR(svn_sqlite__step(&have_row, stmt));
 
   if (have_row)
@@ -11799,8 +11782,7 @@ has_local_mods(svn_boolean_t *is_modifie
   /* Check for additions or deletions. */
   SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
                                     STMT_SUBTREE_HAS_TREE_MODIFICATIONS));
-  SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id, local_relpath,
-                            construct_like_arg(local_relpath, scratch_pool)));
+  SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
   /* If this query returns a row, the working copy is modified. */
   SVN_ERR(svn_sqlite__step(is_modified, stmt));
   SVN_ERR(svn_sqlite__reset(stmt));
@@ -11813,9 +11795,7 @@ has_local_mods(svn_boolean_t *is_modifie
       /* Check for property modifications. */
       SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
                                         STMT_SUBTREE_HAS_PROP_MODIFICATIONS));
-      SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id, local_relpath,
-                                construct_like_arg(local_relpath,
-                                                   scratch_pool)));
+      SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
       /* If this query returns a row, the working copy is modified. */
       SVN_ERR(svn_sqlite__step(is_modified, stmt));
       SVN_ERR(svn_sqlite__reset(stmt));
@@ -11832,9 +11812,7 @@ has_local_mods(svn_boolean_t *is_modifie
       /* Check for text modifications. */
       SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
                                         STMT_SELECT_BASE_FILES_RECURSIVE));
-      SVN_ERR(svn_sqlite__bindf(stmt, "iss", wcroot->wc_id, local_relpath,
-                                construct_like_arg(local_relpath,
-                                                   scratch_pool)));
+      SVN_ERR(svn_sqlite__bindf(stmt, "is", wcroot->wc_id, local_relpath));
       SVN_ERR(svn_sqlite__step(&have_row, stmt));
       if (have_row)
         iterpool = svn_pool_create(scratch_pool);

Modified: subversion/branches/svn_mutex/subversion/libsvn_wc/workqueue.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/svn_mutex/subversion/libsvn_wc/workqueue.c?rev=1182027&r1=1182026&r2=1182027&view=diff
==============================================================================
--- subversion/branches/svn_mutex/subversion/libsvn_wc/workqueue.c (original)
+++ subversion/branches/svn_mutex/subversion/libsvn_wc/workqueue.c Tue Oct 11 
19:08:23 2011
@@ -737,7 +737,35 @@ run_file_install(svn_wc__db_t *db,
 
   /* All done. Move the file into place.  */
   /* ### fix this. we should delay the rename.  */
-  SVN_ERR(svn_io_file_rename(dst_abspath, local_abspath, scratch_pool));
+
+  {
+    svn_error_t *err;
+
+    err = svn_io_file_rename(dst_abspath, local_abspath, scratch_pool);
+
+    /* With a single db we might want to install files in a missing directory.
+       Simply trying this scenario on error won't do any harm and at least
+       one user reported this problem on IRC. */
+    if (err && APR_STATUS_IS_ENOENT(err->apr_err))
+      {
+        svn_error_t *err2;
+
+        err2 = svn_io_make_dir_recursively(svn_dirent_dirname(dst_abspath,
+                                                              scratch_pool),
+                                           scratch_pool);
+      
+        if (err2)
+          /* Creating directory didn't work: Return all errors */
+          return svn_error_trace(svn_error_compose_create(err, err2));
+        else
+          /* We could create a directory: retry install */
+          svn_error_clear(err);
+      
+        SVN_ERR(svn_io_file_rename(dst_abspath, local_abspath, scratch_pool));
+      }
+    else
+      SVN_ERR(err);
+  }
 
   /* Tweak the on-disk file according to its properties.  */
   if (props

Modified: 
subversion/branches/svn_mutex/subversion/mod_dav_svn/reports/mergeinfo.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/svn_mutex/subversion/mod_dav_svn/reports/mergeinfo.c?rev=1182027&r1=1182026&r2=1182027&view=diff
==============================================================================
--- subversion/branches/svn_mutex/subversion/mod_dav_svn/reports/mergeinfo.c 
(original)
+++ subversion/branches/svn_mutex/subversion/mod_dav_svn/reports/mergeinfo.c 
Tue Oct 11 19:08:23 2011
@@ -213,22 +213,6 @@ dav_svn__get_mergeinfo_report(const dav_
         }
     }
 
-  if (validate_inherited_mergeinfo)
-    {
-      serr = dav_svn__brigade_puts(bb, output,
-                                   "<S:" SVN_DAV__VALIDATE_INHERITED ">"
-                                   "yes"
-                                   "</S:" SVN_DAV__VALIDATE_INHERITED ">"
-                                   DEBUG_CR);
-      if (serr)
-        {
-          derr = dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
-                                      "Error ending REPORT response.",
-                                      resource->pool);
-          goto cleanup;
-        }
-    }
-
   if ((serr = dav_svn__brigade_puts(bb, output,
                                     "</S:" SVN_DAV__MERGEINFO_REPORT ">"
                                     DEBUG_CR)))

Modified: subversion/branches/svn_mutex/subversion/mod_dav_svn/version.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/svn_mutex/subversion/mod_dav_svn/version.c?rev=1182027&r1=1182026&r2=1182027&view=diff
==============================================================================
--- subversion/branches/svn_mutex/subversion/mod_dav_svn/version.c (original)
+++ subversion/branches/svn_mutex/subversion/mod_dav_svn/version.c Tue Oct 11 
19:08:23 2011
@@ -147,8 +147,8 @@ get_vsn_options(apr_pool_t *p, apr_text_
   apr_text_append(p, phdr, SVN_DAV_NS_DAV_SVN_ATOMIC_REVPROPS);
   apr_text_append(p, phdr, SVN_DAV_NS_DAV_SVN_PARTIAL_REPLAY);
   /* Mergeinfo is a special case: here we merely say that the server
-   * knows how to handle mergeinfo -- whether the repository does too
-   * is a separate matter.
+   * knows how to handle mergeinfo and validate inherited
+   * mergeinfo -- whether the repository does too is a separate matter.
    *
    * Think of it as offering the client an early out: if the server
    * can't do merge-tracking, there's no point finding out of the
@@ -159,6 +159,7 @@ get_vsn_options(apr_pool_t *p, apr_text_
    * server capability and remain agnostic about the repository).
    */
   apr_text_append(p, phdr, SVN_DAV_NS_DAV_SVN_MERGEINFO);
+  apr_text_append(p, phdr, SVN_DAV_NS_DAV_SVN_MERGEINFO_VALIDATION);
 
   /* ### fork-control? */
 }

Modified: subversion/branches/svn_mutex/subversion/svnserve/serve.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/svn_mutex/subversion/svnserve/serve.c?rev=1182027&r1=1182026&r2=1182027&view=diff
==============================================================================
--- subversion/branches/svn_mutex/subversion/svnserve/serve.c (original)
+++ subversion/branches/svn_mutex/subversion/svnserve/serve.c Tue Oct 11 
19:08:23 2011
@@ -1903,8 +1903,7 @@ static svn_error_t *get_mergeinfo(svn_ra
                                      mergeinfo_string));
     }
   svn_pool_destroy(iterpool);
-  SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!)b)",
-    validate_inherited_mergeinfo));
+  SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!))"));
 
   return SVN_NO_ERROR;
 }
@@ -3230,7 +3229,12 @@ svn_error_t *serve(svn_ra_svn_conn_t *co
     SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "w(cc(!",
                                    "success", uuid, b.repos_url));
     if (supports_mergeinfo)
-      SVN_ERR(svn_ra_svn_write_word(conn, pool, SVN_RA_SVN_CAP_MERGEINFO));
+      {
+        SVN_ERR(svn_ra_svn_write_word(conn, pool, SVN_RA_SVN_CAP_MERGEINFO));
+        SVN_ERR(svn_ra_svn_write_word(
+          conn, pool, SVN_RA_SVN_CAP_VALIDATE_INHERITED_MERGEINFO));
+      }
+
     SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!))"));
   }
 

Propchange: 
subversion/branches/svn_mutex/subversion/tests/cmdline/redirect_tests.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
subversion/branches/svn_mutex/subversion/tests/cmdline/svntest/err.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
subversion/branches/svn_mutex/subversion/tests/cmdline/svntest/objects.py
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
subversion/branches/svn_mutex/subversion/tests/cmdline/upgrade_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/svn_mutex/subversion/tests/cmdline/upgrade_tests.py?rev=1182027&r1=1182026&r2=1182027&view=diff
==============================================================================
--- subversion/branches/svn_mutex/subversion/tests/cmdline/upgrade_tests.py 
(original)
+++ subversion/branches/svn_mutex/subversion/tests/cmdline/upgrade_tests.py Tue 
Oct 11 19:08:23 2011
@@ -1076,6 +1076,7 @@ def upgrade_with_missing_subdir(sbox):
 
   # And now perform an update. (This used to fail with an assertion)
   expected_output = svntest.wc.State(wc_dir, {
+    'A/B'               : Item(verb='Restored'),
     'A/B/E'             : Item(status='A '),
     'A/B/E/alpha'       : Item(status='A '),
     'A/B/E/beta'        : Item(status='A '),

Propchange: 
subversion/branches/svn_mutex/subversion/tests/manual/tree-conflicts-add-vs-add.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/svn_mutex/tools/buildbot/master/Feeder.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
subversion/branches/svn_mutex/tools/buildbot/master/SVNMailNotifier.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
subversion/branches/svn_mutex/tools/buildbot/master/private-sample.py
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
subversion/branches/svn_mutex/tools/buildbot/slaves/ubuntu-x64/svncheck.sh
URL: 
http://svn.apache.org/viewvc/subversion/branches/svn_mutex/tools/buildbot/slaves/ubuntu-x64/svncheck.sh?rev=1182027&r1=1182026&r2=1182027&view=diff
==============================================================================
--- subversion/branches/svn_mutex/tools/buildbot/slaves/ubuntu-x64/svncheck.sh 
(original)
+++ subversion/branches/svn_mutex/tools/buildbot/slaves/ubuntu-x64/svncheck.sh 
Tue Oct 11 19:08:23 2011
@@ -29,9 +29,9 @@ if test -z "$1" ; then
 fi
 
 echo "========= mount RAM disc"
-# ignore the result: if it fails, the test will just take longer...
-mkdir -p subversion/tests/cmdline/svn-test-work
-test -e ../mount-ramdrive && ../mount-ramdrive
+test ! -e /dev/shm/svn-test-work && mkdir /dev/shm/svn-test-work
+test -e subversion/tests/cmdline/svn-test-work && rm -rf 
subversion/tests/cmdline/svn-test-work
+ln -s /dev/shm/svn-test-work subversion/tests/cmdline/
 
 echo "========= make check"
 make check FS_TYPE=$1 CLEANUP=1 || exit $?

Modified: 
subversion/branches/svn_mutex/tools/buildbot/slaves/ubuntu-x64/svnclean.sh
URL: 
http://svn.apache.org/viewvc/subversion/branches/svn_mutex/tools/buildbot/slaves/ubuntu-x64/svnclean.sh?rev=1182027&r1=1182026&r2=1182027&view=diff
==============================================================================
--- subversion/branches/svn_mutex/tools/buildbot/slaves/ubuntu-x64/svnclean.sh 
(original)
+++ subversion/branches/svn_mutex/tools/buildbot/slaves/ubuntu-x64/svnclean.sh 
Tue Oct 11 19:08:23 2011
@@ -22,10 +22,6 @@
 
 set -x
 
-echo "========= unmount RAM disc"
-# ignore the result: if there was no ramdisc, that's fine
-test -e ../unmount-ramdrive && ../unmount-ramdrive
-
 echo "========= make extraclean"
 cd build
 test -e Makefile && (make extraclean || exit $?)

Propchange: 
subversion/branches/svn_mutex/tools/dev/benchmarks/suite1/benchmark.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/svn_mutex/tools/dev/gen-py-errors.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/svn_mutex/tools/dev/gen_junit_report.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/svn_mutex/tools/dev/log_revnum_change_asf.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/svn_mutex/tools/dev/mklog.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/svn_mutex/tools/dev/wc-format.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/svn_mutex/tools/dev/wc-ng/bump-to-19.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/svn_mutex/tools/dev/wc-ng/count-progress.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/svn_mutex/tools/dev/wc-ng/graph-data.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/svn_mutex/tools/dev/wc-ng/populate-pristine.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: subversion/branches/svn_mutex/tools/dist/release.py
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
subversion/branches/svn_mutex/tools/hook-scripts/validate-extensions.py
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: subversion/branches/svn_mutex/win-tests.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/svn_mutex/win-tests.py?rev=1182027&r1=1182026&r2=1182027&view=diff
==============================================================================
--- subversion/branches/svn_mutex/win-tests.py (original)
+++ subversion/branches/svn_mutex/win-tests.py Tue Oct 11 19:08:23 2011
@@ -496,6 +496,9 @@ class Httpd:
     fp.write('ServerName   localhost\n')
     fp.write('PidFile      pid\n')
     fp.write('ErrorLog     log\n')
+    fp.write('LogFormat    "%h %l %u %t \\"%r\\" %>s %b" common\n')
+    fp.write('Customlog    log common\n')
+    fp.write('LogLevel     Debug\n')
     fp.write('Listen       ' + str(self.httpd_port) + '\n')
 
     # Write LoadModule for minimal system module
@@ -529,7 +532,6 @@ class Httpd:
              'REDIRECT-TEMP-(.*)$ /svn-test-work/repositories/$1\n')
 
     fp.write('TypesConfig     ' + self._quote(self.httpd_mime_types) + '\n')
-    fp.write('LogLevel        Debug\n')
     fp.write('HostNameLookups Off\n')
 
     fp.close()


Reply via email to