You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ph...@apache.org on 2014/02/27 13:51:06 UTC

svn commit: r1572541 [2/2] - in /subversion/branches/fsfs-lock-many: ./ build/generator/ build/generator/templates/ subversion/bindings/javahl/native/ subversion/include/ subversion/include/private/ subversion/libsvn_client/ subversion/libsvn_fs/ subve...

Modified: subversion/branches/fsfs-lock-many/subversion/libsvn_ra_svn/client.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/libsvn_ra_svn/client.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/libsvn_ra_svn/client.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/libsvn_ra_svn/client.c Thu Feb 27 12:51:04 2014
@@ -1674,13 +1674,13 @@ perform_ra_svn_log(svn_error_t **outer_e
           else
             want_custom_revprops = TRUE;
         }
-      SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!)n)",
-                                      (apr_uint64_t) move_behavior));
+      SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!)w)",
+                                svn_move_behavior_to_word(move_behavior)));
     }
   else
     {
-      SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!w()n)", "all-revprops",
-                                      (apr_uint64_t) move_behavior));
+      SVN_ERR(svn_ra_svn__write_tuple(conn, pool, "!w()w)", "all-revprops",
+                                svn_move_behavior_to_word(move_behavior)));
 
       want_author = TRUE;
       want_date = TRUE;

Modified: subversion/branches/fsfs-lock-many/subversion/libsvn_ra_svn/protocol
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/libsvn_ra_svn/protocol?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/libsvn_ra_svn/protocol (original)
+++ subversion/branches/fsfs-lock-many/subversion/libsvn_ra_svn/protocol Thu Feb 27 12:51:04 2014
@@ -383,12 +383,11 @@ second place for auth-request point as n
                 ? limit:number
                 ? include-merged-revisions:bool
                 all-revprops | revprops ( revprop:string ... )
-                ? move-behavior:number )
+                ? move-behavior:word )
     Before sending response, server sends log entries, ending with "done".
     If a client does not want to specify a limit, it should send 0 as the
     limit parameter.  rev-props excludes author, date, and log; they are
     sent separately for backwards-compatibility.
-    Move-behavior is encoded like enum svn_move_behavior_t.
     log-entry: ( ( change:changed-path-entry ... ) rev:number
                  [ author:string ] [ date:string ] [ message:string ]
                  ? has-children:bool invalid-revnum:bool

Modified: subversion/branches/fsfs-lock-many/subversion/libsvn_repos/delta.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/libsvn_repos/delta.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/libsvn_repos/delta.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/libsvn_repos/delta.c Thu Feb 27 12:51:04 2014
@@ -523,8 +523,9 @@ delta_proplists(struct context *c,
       svn_boolean_t changed;
 
       /* Is this deltification worth our time? */
-      SVN_ERR(svn_fs_props_changed(&changed, c->target_root, target_path,
-                                   c->source_root, source_path, subpool));
+      SVN_ERR(svn_fs_props_changed2(&changed, c->target_root, target_path,
+                                    c->source_root, source_path, TRUE,
+                                    subpool));
       if (! changed)
         goto cleanup;
 
@@ -604,62 +605,8 @@ svn_repos__compare_files(svn_boolean_t *
                          const char *path2,
                          apr_pool_t *pool)
 {
-  svn_filesize_t size1, size2;
-  svn_checksum_t *checksum1, *checksum2;
-  svn_stream_t *stream1, *stream2;
-  svn_boolean_t same;
-
-  /* If the filesystem claims the things haven't changed, then they
-     haven't changed. */
-  SVN_ERR(svn_fs_contents_changed(changed_p, root1, path1,
-                                  root2, path2, pool));
-  if (!*changed_p)
-    return SVN_NO_ERROR;
-
-  /* If the SHA1 checksums match for these things, we'll claim they
-     have the same contents.  (We don't give quite as much weight to
-     MD5 checksums.)  */
-  SVN_ERR(svn_fs_file_checksum(&checksum1, svn_checksum_sha1,
-                               root1, path1, FALSE, pool));
-  SVN_ERR(svn_fs_file_checksum(&checksum2, svn_checksum_sha1,
-                               root2, path2, FALSE, pool));
-  if (checksum1 && checksum2)
-    {
-      *changed_p = !svn_checksum_match(checksum1, checksum2);
-      return SVN_NO_ERROR;
-    }
-
-  /* From this point on, our default answer is "Nothing's changed". */
-  *changed_p = FALSE;
-
-  /* Different filesizes means the contents are different. */
-  SVN_ERR(svn_fs_file_length(&size1, root1, path1, pool));
-  SVN_ERR(svn_fs_file_length(&size2, root2, path2, pool));
-  if (size1 != size2)
-    {
-      *changed_p = TRUE;
-      return SVN_NO_ERROR;
-    }
-
-  /* Different MD5 checksums means the contents are different. */
-  SVN_ERR(svn_fs_file_checksum(&checksum1, svn_checksum_md5, root1, path1,
-                               FALSE, pool));
-  SVN_ERR(svn_fs_file_checksum(&checksum2, svn_checksum_md5, root2, path2,
-                               FALSE, pool));
-  if (! svn_checksum_match(checksum1, checksum2))
-    {
-      *changed_p = TRUE;
-      return SVN_NO_ERROR;
-    }
-
-  /* And finally, different contents means the ... uh ... contents are
-     different. */
-  SVN_ERR(svn_fs_file_contents(&stream1, root1, path1, pool));
-  SVN_ERR(svn_fs_file_contents(&stream2, root2, path2, pool));
-  SVN_ERR(svn_stream_contents_same2(&same, stream1, stream2, pool));
-  *changed_p = !same;
-
-  return SVN_NO_ERROR;
+  return svn_error_trace(svn_fs_contents_changed2(changed_p, root1, path1,
+                                                  root2, path2, TRUE, pool));
 }
 
 
@@ -686,22 +633,10 @@ delta_files(struct context *c,
 
   if (source_path)
     {
-      /* Is this delta calculation worth our time?  If we are ignoring
-         ancestry, then our editor implementor isn't concerned by the
-         theoretical differences between "has contents which have not
-         changed with respect to" and "has the same actual contents
-         as".  We'll do everything we can to avoid transmitting even
-         an empty text-delta in that case.  */
-      if (c->ignore_ancestry)
-        SVN_ERR(svn_repos__compare_files(&changed,
-                                         c->target_root, target_path,
-                                         c->source_root, source_path,
-                                         subpool));
-      else
-        SVN_ERR(svn_fs_contents_changed(&changed,
-                                        c->target_root, target_path,
-                                        c->source_root, source_path,
-                                        subpool));
+      SVN_ERR(svn_fs_contents_changed2(&changed,
+                                       c->target_root, target_path,
+                                       c->source_root, source_path,
+                                       TRUE, subpool));
     }
   else
     {

Modified: subversion/branches/fsfs-lock-many/subversion/libsvn_repos/dump.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/libsvn_repos/dump.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/libsvn_repos/dump.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/libsvn_repos/dump.c Thu Feb 27 12:51:04 2014
@@ -857,13 +857,13 @@ dump_node(struct edit_baton *eb,
                                    svn_fs_root_fs(eb->fs_root),
                                    compare_rev, pool));
 
-      SVN_ERR(svn_fs_props_changed(&must_dump_props,
-                                   compare_root, compare_path,
-                                   eb->fs_root, path, pool));
+      SVN_ERR(svn_fs_props_changed2(&must_dump_props,
+                                    compare_root, compare_path,
+                                    eb->fs_root, path, TRUE, pool));
       if (kind == svn_node_file)
-        SVN_ERR(svn_fs_contents_changed(&must_dump_text,
-                                        compare_root, compare_path,
-                                        eb->fs_root, path, pool));
+        SVN_ERR(svn_fs_contents_changed2(&must_dump_text,
+                                         compare_root, compare_path,
+                                         eb->fs_root, path, TRUE, pool));
     }
   else if (action == svn_node_action_replace)
     {
@@ -1009,16 +1009,17 @@ dump_node(struct edit_baton *eb,
 
           /* Need to decide if the copied node had any extra textual or
              property mods as well.  */
-          SVN_ERR(svn_fs_props_changed(&must_dump_props,
-                                       compare_root, compare_path,
-                                       eb->fs_root, path, pool));
+          SVN_ERR(svn_fs_props_changed2(&must_dump_props,
+                                        compare_root, compare_path,
+                                        eb->fs_root, path, TRUE, pool));
           if (kind == svn_node_file)
             {
               svn_checksum_t *checksum;
               const char *hex_digest;
-              SVN_ERR(svn_fs_contents_changed(&must_dump_text,
-                                              compare_root, compare_path,
-                                              eb->fs_root, path, pool));
+              SVN_ERR(svn_fs_contents_changed2(&must_dump_text,
+                                               compare_root, compare_path,
+                                               eb->fs_root, path, TRUE,
+                                               pool));
 
               SVN_ERR(svn_fs_file_checksum(&checksum, svn_checksum_md5,
                                            compare_root, compare_path,

Modified: subversion/branches/fsfs-lock-many/subversion/libsvn_repos/log.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/libsvn_repos/log.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/libsvn_repos/log.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/libsvn_repos/log.c Thu Feb 27 12:51:04 2014
@@ -805,23 +805,16 @@ fs_mergeinfo_changed(svn_mergeinfo_catal
            ### modifies, NULL otherwise).  -- cmpilato  */
 
         /* If the path was added or replaced, see if it was created via
-           copy.  If so, that will tell us where its previous location
-           was.  If not, there's no previous location to examine.  */
+           copy.  If so, set BASE_REV/BASE_PATH to its previous location.
+           If not, there's no previous location to examine -- leave
+           BASE_REV/BASE_PATH = -1/NULL.  */
         case svn_fs_path_change_add:
         case svn_fs_path_change_replace:
         case svn_fs_path_change_move:
         case svn_fs_path_change_movereplace:
           {
-            const char *copyfrom_path;
-            svn_revnum_t copyfrom_rev;
-
-            SVN_ERR(svn_fs_copied_from(&copyfrom_rev, &copyfrom_path,
+            SVN_ERR(svn_fs_copied_from(&base_rev, &base_path,
                                        root, changed_path, iterpool));
-            if (copyfrom_path && SVN_IS_VALID_REVNUM(copyfrom_rev))
-              {
-                base_path = apr_pstrdup(scratch_pool, copyfrom_path);
-                base_rev = copyfrom_rev;
-              }
             break;
           }
 

Modified: subversion/branches/fsfs-lock-many/subversion/libsvn_repos/reporter.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/libsvn_repos/reporter.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/libsvn_repos/reporter.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/libsvn_repos/reporter.c Thu Feb 27 12:51:04 2014
@@ -576,8 +576,8 @@ delta_proplists(report_baton_t *b, svn_r
       SVN_ERR(get_source_root(b, &s_root, s_rev));
 
       /* Is this deltification worth our time? */
-      SVN_ERR(svn_fs_props_changed(&changed, b->t_root, t_path, s_root,
-                                   s_path, pool));
+      SVN_ERR(svn_fs_props_changed2(&changed, b->t_root, t_path, s_root,
+                                    s_path, TRUE, pool));
       if (! changed)
         return SVN_NO_ERROR;
 

Modified: subversion/branches/fsfs-lock-many/subversion/libsvn_repos/rev_hunt.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/libsvn_repos/rev_hunt.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/libsvn_repos/rev_hunt.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/libsvn_repos/rev_hunt.c Thu Feb 27 12:51:04 2014
@@ -1365,9 +1365,9 @@ send_path_revision(struct path_revision 
   /* Check if the contents changed. */
   /* Special case: In the first revision, we always provide a delta. */
   if (sb->last_root)
-    SVN_ERR(svn_fs_contents_changed(&contents_changed, sb->last_root,
-                                    sb->last_path, root, path_rev->path,
-                                    sb->iterpool));
+    SVN_ERR(svn_fs_contents_changed2(&contents_changed, sb->last_root,
+                                     sb->last_path, root, path_rev->path,
+                                     FALSE, sb->iterpool));
   else
     contents_changed = TRUE;
 

Modified: subversion/branches/fsfs-lock-many/subversion/libsvn_subr/hash.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/libsvn_subr/hash.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/libsvn_subr/hash.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/libsvn_subr/hash.c Thu Feb 27 12:51:04 2014
@@ -559,23 +559,6 @@ svn_hash_from_cstring_keys(apr_hash_t **
 }
 
 
-#if !APR_VERSION_AT_LEAST(1, 3, 0)
-void
-svn_hash__clear(apr_hash_t *hash)
-{
-  apr_hash_index_t *hi;
-  const void *key;
-  apr_ssize_t klen;
-
-  for (hi = apr_hash_first(NULL, hash); hi; hi = apr_hash_next(hi))
-    {
-      apr_hash_this(hi, &key, &klen, NULL);
-      apr_hash_set(hash, key, klen, NULL);
-    }
-}
-#endif
-
-
 
 /*** Specialized getter APIs ***/
 

Modified: subversion/branches/fsfs-lock-many/subversion/libsvn_subr/io.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/libsvn_subr/io.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/libsvn_subr/io.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/libsvn_subr/io.c Thu Feb 27 12:51:04 2014
@@ -3578,8 +3578,6 @@ svn_io_file_aligned_seek(apr_file_t *fil
   if (block_size == 0)
     block_size = apr_default_buffer_size;
 
-  /* on old APRs, we are simply stuck with 4k blocks */
-#if APR_VERSION_AT_LEAST(1,3,0)
   file_buffer_size = apr_file_buffer_size_get(file);
 
   /* don't try to set a buffer size for non-buffered files! */
@@ -3600,7 +3598,6 @@ svn_io_file_aligned_seek(apr_file_t *fil
       fill_buffer = TRUE;
     }
   else
-#endif
     {
       aligned_offset = offset - (offset % file_buffer_size);
 

Modified: subversion/branches/fsfs-lock-many/subversion/libsvn_subr/sorts.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/libsvn_subr/sorts.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/libsvn_subr/sorts.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/libsvn_subr/sorts.c Thu Feb 27 12:51:04 2014
@@ -471,10 +471,10 @@ svn_priority_queue__pop(svn_priority_que
 {
   if (queue->elements->nelts)
     {
-      memcpy(queue->elements->elts,
-             queue->elements->elts + (queue->elements->nelts - 1)
-                                   * queue->elements->elt_size,
-             queue->elements->elt_size);
+      memmove(queue->elements->elts,
+              queue->elements->elts
+              + (queue->elements->nelts - 1) * queue->elements->elt_size,
+              queue->elements->elt_size);
       --queue->elements->nelts;
       heap_bubble_up(queue, 0);
     }

Modified: subversion/branches/fsfs-lock-many/subversion/libsvn_subr/string.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/libsvn_subr/string.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/libsvn_subr/string.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/libsvn_subr/string.c Thu Feb 27 12:51:04 2014
@@ -1039,19 +1039,6 @@ svn_cstring_atoi(int *n, const char *str
   return SVN_NO_ERROR;
 }
 
-
-apr_status_t
-svn__strtoff(apr_off_t *offset, const char *buf, char **end, int base)
-{
-#if !APR_VERSION_AT_LEAST(1,0,0)
-  errno = 0;
-  *offset = strtol(buf, end, base);
-  return APR_FROM_OS_ERROR(errno);
-#else
-  return apr_strtoff(offset, buf, end, base);
-#endif
-}
-
 unsigned long
 svn__strtoul(const char* buffer, const char** end)
 {

Modified: subversion/branches/fsfs-lock-many/subversion/libsvn_subr/types.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/libsvn_subr/types.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/libsvn_subr/types.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/libsvn_subr/types.c Thu Feb 27 12:51:04 2014
@@ -350,3 +350,39 @@ svn_location_segment_dup(const svn_locat
     new_segment->path = apr_pstrdup(pool, segment->path);
   return new_segment;
 }
+
+const char *
+svn_move_behavior_to_word(svn_move_behavior_t value)
+{
+  switch (value)
+    {
+    case svn_move_behavior_no_moves:
+      return "none";
+    case svn_move_behavior_explicit_moves:
+      return "explicit";
+    case svn_move_behavior_auto_moves:
+      return "auto";
+    default:
+      return "INVALID-MOVE-BEHAVIOR";
+    }
+}
+
+svn_move_behavior_t
+svn_move_behavior_from_word(const char *word)
+{
+  if (word)
+    {
+      if (strcmp(word, "none") == 0)
+        return svn_move_behavior_no_moves;
+      if (strcmp(word, "explicit") == 0)
+        return svn_move_behavior_explicit_moves;
+      if (strcmp(word, "auto") == 0)
+        return svn_move_behavior_auto_moves;
+    }
+
+  /* There's no special value for invalid move behavior, and no convincing
+     reason to make one yet, so just fall back to "explicit moves only",
+     i.e. no conversion either way.
+  */
+  return svn_move_behavior_explicit_moves;
+}

Modified: subversion/branches/fsfs-lock-many/subversion/libsvn_subr/utf.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/libsvn_subr/utf.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/libsvn_subr/utf.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/libsvn_subr/utf.c Thu Feb 27 12:51:04 2014
@@ -184,16 +184,10 @@ static APR_INLINE void*
 atomic_swap(void * volatile * mem, void *new_value)
 {
 #if APR_HAS_THREADS
-#if APR_VERSION_AT_LEAST(1,3,0)
   /* Cast is necessary because of APR bug:
      https://issues.apache.org/bugzilla/show_bug.cgi?id=50731 */
    return apr_atomic_xchgptr((volatile void **)mem, new_value);
 #else
-   /* old APRs don't support atomic swaps. Simply return the
-    * input to the caller for further proccessing. */
-   return new_value;
-#endif
-#else
    /* no threads - no sync. necessary */
    void *old_value = (void*)*mem;
    *mem = new_value;

Modified: subversion/branches/fsfs-lock-many/subversion/libsvn_wc/status.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/libsvn_wc/status.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/libsvn_wc/status.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/libsvn_wc/status.c Thu Feb 27 12:51:04 2014
@@ -284,7 +284,9 @@ get_repos_root_url_relpath(const char **
                                        db, local_abspath,
                                        result_pool, scratch_pool));
     }
-  else if (info->have_base)
+  else if (info->status == svn_wc__db_status_deleted
+           && !info->have_more_work
+           && info->have_base)
     {
       SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, NULL, repos_relpath,
                                        repos_root_url, repos_uuid, NULL, NULL,
@@ -293,6 +295,33 @@ get_repos_root_url_relpath(const char **
                                        db, local_abspath,
                                        result_pool, scratch_pool));
     }
+  else if (info->status == svn_wc__db_status_deleted)
+    {
+      const char *work_del_abspath;
+      const char *add_abspath;
+
+      /* Handles working DELETE and the special case where there is just
+         svn_wc__db_status_not_present in WORKING */
+
+      SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL, &work_del_abspath, NULL,
+                                       db, local_abspath,
+                                       scratch_pool, scratch_pool));
+
+      /* The parent of what has been deleted must be added */
+      add_abspath = svn_dirent_dirname(work_del_abspath, scratch_pool);
+
+      SVN_ERR(svn_wc__db_scan_addition(NULL, NULL, repos_relpath,
+                                       repos_root_url, repos_uuid, NULL,
+                                       NULL, NULL, NULL,
+                                       db, add_abspath,
+                                       result_pool, scratch_pool));
+
+      *repos_relpath = svn_relpath_join(*repos_relpath,
+                                        svn_dirent_skip_ancestor(
+                                              add_abspath,
+                                              local_abspath),
+                                        result_pool);
+    }
   else
     {
       *repos_relpath = NULL;

Modified: subversion/branches/fsfs-lock-many/subversion/libsvn_wc/wc_db_wcroot.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/libsvn_wc/wc_db_wcroot.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/libsvn_wc/wc_db_wcroot.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/libsvn_wc/wc_db_wcroot.c Thu Feb 27 12:51:04 2014
@@ -687,8 +687,12 @@ try_symlink_as_dir:
           svn_error_clear(err);
           *wcroot = NULL;
         }
-      else
-        SVN_ERR(err);
+      else if (err)
+        {
+          /* Close handle if we are not going to use it to support
+             upgrading with exclusive wc locking. */
+          return svn_error_compose_create(err, svn_sqlite__close(sdb));
+        }
     }
   else
     {

Modified: subversion/branches/fsfs-lock-many/subversion/mod_dav_svn/reports/log.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/mod_dav_svn/reports/log.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/mod_dav_svn/reports/log.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/mod_dav_svn/reports/log.c Thu Feb 27 12:51:04 2014
@@ -412,21 +412,8 @@ dav_svn__log_report(const dav_resource *
         }
       else if (strcmp(child->name, "move-behavior") == 0)
         {
-          int move_behavior_param;
-          serr = svn_cstring_atoi(&move_behavior_param,
-                                  dav_xml_get_cdata(child, resource->pool, 1));
-          if (serr)
-            return dav_svn__convert_err(serr, HTTP_BAD_REQUEST,
-                                        "Malformed CDATA in element "
-                                        "\"move-behavior\"", resource->pool);
-
-          if (   move_behavior_param < 0
-              || move_behavior_param > svn_move_behavior_auto_moves)
-            return dav_svn__convert_err(serr, HTTP_BAD_REQUEST,
-                                        "Invalid CDATA in element "
-                                        "\"move-behavior\"", resource->pool);
-
-          move_behavior = (svn_move_behavior_t) move_behavior_param;
+          const char *value = dav_xml_get_cdata(child, resource->pool, 1);
+          move_behavior = svn_move_behavior_from_word(value);
         }
       /* else unknown element; skip it */
     }

Modified: subversion/branches/fsfs-lock-many/subversion/mod_dav_svn/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/mod_dav_svn/util.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/mod_dav_svn/util.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/mod_dav_svn/util.c Thu Feb 27 12:51:04 2014
@@ -37,7 +37,6 @@
 
 #include "dav_svn.h"
 #include "private/svn_fspath.h"
-#include "private/svn_string_private.h"
 
 dav_error *
 dav_svn__new_error(apr_pool_t *pool,
@@ -750,7 +749,7 @@ request_body_to_string(svn_string_t **re
   content_length_str = apr_table_get(r->headers_in, "Content-Length");
   if (content_length_str)
     {
-      if (svn__strtoff(&content_length, content_length_str, &endp, 10)
+      if (apr_strtoff(&content_length, content_length_str, &endp, 10)
           || endp == content_length_str || *endp || content_length < 0)
         {
           ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "Invalid Content-Length");

Modified: subversion/branches/fsfs-lock-many/subversion/svn/cl.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/svn/cl.h?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/svn/cl.h (original)
+++ subversion/branches/fsfs-lock-many/subversion/svn/cl.h Thu Feb 27 12:51:04 2014
@@ -244,6 +244,7 @@ typedef struct svn_cl__opt_state_t
   svn_boolean_t remove_unversioned;/* remove unversioned items */
   svn_boolean_t remove_ignored;    /* remove ignored items */
   svn_boolean_t no_newline;        /* do not output the trailing newline */
+  svn_boolean_t show_passwords;    /* show cached passwords */
 } svn_cl__opt_state_t;
 
 
@@ -257,6 +258,7 @@ typedef struct svn_cl__cmd_baton_t
 /* Declare all the command procedures */
 svn_opt_subcommand_t
   svn_cl__add,
+  svn_cl__auth,
   svn_cl__blame,
   svn_cl__cat,
   svn_cl__changelist,

Modified: subversion/branches/fsfs-lock-many/subversion/svn/help-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/svn/help-cmd.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/svn/help-cmd.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/svn/help-cmd.c Thu Feb 27 12:51:04 2014
@@ -31,6 +31,7 @@
 #include "svn_hash.h"
 #include "svn_string.h"
 #include "svn_config.h"
+#include "svn_dirent_uri.h"
 #include "svn_error.h"
 #include "cl.h"
 
@@ -45,6 +46,7 @@ svn_cl__help(apr_getopt_t *os,
 {
   svn_cl__opt_state_t *opt_state = NULL;
   svn_stringbuf_t *version_footer = NULL;
+  const char *config_path;
 
   char help_header[] =
   N_("usage: svn <subcommand> [options] [args]\n"
@@ -132,6 +134,46 @@ svn_cl__help(apr_getopt_t *os,
     version_footer = svn_stringbuf_create(ra_desc_start, pool);
   SVN_ERR(svn_ra_print_modules(version_footer, pool));
 
+  /*
+   * Show auth creds storage providers.
+   */
+  SVN_ERR(svn_config_get_user_config_path(&config_path,
+                                          opt_state ? opt_state->config_dir
+                                                    : NULL,
+                                          NULL,
+                                          pool));
+  svn_stringbuf_appendcstr(version_footer,
+                           _("\nThe following authentication credential caches are available:\n\n"));
+
+  /*### There is no API to query available providers at run time. */
+#if (defined(WIN32) && !defined(__MINGW32__))
+  version_footer =
+    svn_stringbuf_create(apr_psprintf(pool, _("%s* Wincrypt cache in %s\n"),
+                                      version_footer->data,
+                                      svn_dirent_local_style(config_path,
+                                                             pool)),
+                         pool);
+#elif !defined(SVN_DISABLE_PLAINTEXT_PASSWORD_STORAGE)
+  version_footer =
+    svn_stringbuf_create(apr_psprintf(pool, _("%s* Plaintext cache in %s\n"),
+                                      version_footer->data,
+                                      svn_dirent_local_style(config_path,
+                                                             pool)),
+                         pool);
+#endif
+#ifdef SVN_HAVE_GNOME_KEYRING
+  svn_stringbuf_appendcstr(version_footer, "* Gnome Keyring\n");
+#endif
+#ifdef SVN_HAVE_GPG_AGENT
+  svn_stringbuf_appendcstr(version_footer, "* GPG-Agent\n");
+#endif
+#ifdef SVN_HAVE_KEYCHAIN_SERVICES
+  svn_stringbuf_appendcstr(version_footer, "* Mac OS X Keychain\n");
+#endif
+#ifdef SVN_HAVE_KWALLET
+  svn_stringbuf_appendcstr(version_footer, "* KWallet (KDE)\n");
+#endif
+
   return svn_opt_print_help4(os,
                              "svn",   /* ### erm, derive somehow? */
                              opt_state ? opt_state->version : FALSE,

Modified: subversion/branches/fsfs-lock-many/subversion/svn/svn.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/svn/svn.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/svn/svn.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/svn/svn.c Thu Feb 27 12:51:04 2014
@@ -137,7 +137,8 @@ typedef enum svn_cl__longopt_t {
   opt_mergeinfo_log,
   opt_remove_unversioned,
   opt_remove_ignored,
-  opt_no_newline
+  opt_no_newline,
+  opt_show_passwords
 } svn_cl__longopt_t;
 
 
@@ -279,7 +280,7 @@ const apr_getopt_option_t svn_cl__option
                        "ARG may be one of 'LF', 'CR', 'CRLF'")},
   {"limit",         'l', 1, N_("maximum number of log entries")},
   {"no-unlock",     opt_no_unlock, 0, N_("don't unlock the targets")},
-  {"remove",         opt_remove, 0, N_("remove changelist association")},
+  {"remove",         opt_remove, 0, N_("remove changelist association or auth credential")},
   {"changelist",    opt_changelist, 1,
                     N_("operate only on members of changelist ARG")},
   {"keep-changelists", opt_keep_changelists, 0,
@@ -391,6 +392,7 @@ const apr_getopt_option_t svn_cl__option
                        N_("remove unversioned items")},
   {"remove-ignored", opt_remove_ignored, 0, N_("remove ignored items")},
   {"no-newline", opt_no_newline, 0, N_("do not output trailing newline")},
+  {"show-passwords", opt_show_passwords, 0, N_("show cached passwords")},
 
   /* Long-opt Aliases
    *
@@ -445,6 +447,29 @@ const svn_opt_subcommand_desc2_t svn_cl_
      opt_no_autoprops, opt_parents },
      {{opt_parents, N_("add intermediate parents")}} },
 
+  { "auth", svn_cl__auth, {0}, N_
+   ("Manage cached authentication credentials.\n"
+    "usage: 1. svn auth [PATTERN ...]\n"
+    "usage: 2. svn auth --remove PATTERN [PATTERN ...]\n"
+    "\n"
+    "  With no arguments, list all cached authentication credentials.\n"
+    "  Authentication credentials include usernames, passwords,\n"
+    "  SSL certificates, and SSL client-certificate passphrases.\n"
+    "  If PATTERN is specified, only list credentials with attributes matching one\n"
+    "  or more patterns. With the --remove option, remove cached authentication\n"
+    "  credentials matching one or more patterns.\n"
+    "\n"
+    "  If more than one pattern is specified credentials are considered only they\n"
+    "  match all specified patterns. Patterns are matched case-sensitively and may\n"
+    "  contain glob wildcards:\n"
+    "    ?      matches any single character\n"
+    "    *      matches a sequence of arbitrary characters\n"
+    "    [abc]  matches any of the characters listed inside the brackets\n"
+    "  Note that wildcards will usually need to be quoted or escaped on the\n"
+    "  command line because many command shells will interfere by trying to\n"
+    "  expand them.\n"),
+    { opt_remove, opt_show_passwords } },
+
   { "blame", svn_cl__blame, {"praise", "annotate", "ann"}, N_
     ("Output the content of specified files or\n"
      "URLs with revision and author information in-line.\n"
@@ -2306,6 +2331,9 @@ sub_main(int *exit_code, int argc, const
       case opt_no_newline:
         opt_state.no_newline = TRUE;
         break;
+      case opt_show_passwords:
+        opt_state.show_passwords = TRUE;
+        break;
       default:
         /* Hmmm. Perhaps this would be a good place to squirrel away
            opts that commands like svn diff might need. Hmmm indeed. */

Modified: subversion/branches/fsfs-lock-many/subversion/svnadmin/svnadmin.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/svnadmin/svnadmin.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/svnadmin/svnadmin.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/svnadmin/svnadmin.c Thu Feb 27 12:51:04 2014
@@ -2031,6 +2031,7 @@ subcommand_lslocks(apr_getopt_t *os, voi
   const char *fs_path = "/";
   apr_hash_t *locks;
   apr_hash_index_t *hi;
+  apr_pool_t *iterpool = svn_pool_create(pool);
 
   SVN_ERR(svn_opt__args_to_target_array(&targets, os,
                                         apr_array_make(pool, 0,
@@ -2055,20 +2056,24 @@ subcommand_lslocks(apr_getopt_t *os, voi
       svn_lock_t *lock = svn__apr_hash_index_val(hi);
       int comment_lines = 0;
 
-      cr_date = svn_time_to_human_cstring(lock->creation_date, pool);
+      svn_pool_clear(iterpool);
+
+      SVN_ERR(check_cancel(NULL));
+
+      cr_date = svn_time_to_human_cstring(lock->creation_date, iterpool);
 
       if (lock->expiration_date)
-        exp_date = svn_time_to_human_cstring(lock->expiration_date, pool);
+        exp_date = svn_time_to_human_cstring(lock->expiration_date, iterpool);
 
       if (lock->comment)
         comment_lines = svn_cstring_count_newlines(lock->comment) + 1;
 
-      SVN_ERR(svn_cmdline_printf(pool, _("Path: %s\n"), path));
-      SVN_ERR(svn_cmdline_printf(pool, _("UUID Token: %s\n"), lock->token));
-      SVN_ERR(svn_cmdline_printf(pool, _("Owner: %s\n"), lock->owner));
-      SVN_ERR(svn_cmdline_printf(pool, _("Created: %s\n"), cr_date));
-      SVN_ERR(svn_cmdline_printf(pool, _("Expires: %s\n"), exp_date));
-      SVN_ERR(svn_cmdline_printf(pool,
+      SVN_ERR(svn_cmdline_printf(iterpool, _("Path: %s\n"), path));
+      SVN_ERR(svn_cmdline_printf(iterpool, _("UUID Token: %s\n"), lock->token));
+      SVN_ERR(svn_cmdline_printf(iterpool, _("Owner: %s\n"), lock->owner));
+      SVN_ERR(svn_cmdline_printf(iterpool, _("Created: %s\n"), cr_date));
+      SVN_ERR(svn_cmdline_printf(iterpool, _("Expires: %s\n"), exp_date));
+      SVN_ERR(svn_cmdline_printf(iterpool,
                                  Q_("Comment (%i line):\n%s\n\n",
                                     "Comment (%i lines):\n%s\n\n",
                                     comment_lines),
@@ -2076,6 +2081,8 @@ subcommand_lslocks(apr_getopt_t *os, voi
                                  lock->comment ? lock->comment : ""));
     }
 
+  svn_pool_destroy(iterpool);
+
   return SVN_NO_ERROR;
 }
 

Modified: subversion/branches/fsfs-lock-many/subversion/svnserve/serve.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/svnserve/serve.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/svnserve/serve.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/svnserve/serve.c Thu Feb 27 12:51:04 2014
@@ -2192,7 +2192,8 @@ static svn_error_t *log_cmd(svn_ra_svn_c
   char *revprop_word;
   svn_ra_svn_item_t *elt;
   int i;
-  apr_uint64_t limit, include_merged_revs_param, move_behavior_param;
+  apr_uint64_t limit, include_merged_revs_param;
+  const char *move_behavior_param;
   svn_move_behavior_t move_behavior;
   log_baton_t lb;
   authz_baton_t ab;
@@ -2200,7 +2201,7 @@ static svn_error_t *log_cmd(svn_ra_svn_c
   ab.server = b;
   ab.conn = conn;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "l(?r)(?r)bb?n?Bwl?n", &paths,
+  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "l(?r)(?r)bb?n?Bwl?w", &paths,
                                   &start_rev, &end_rev, &send_changed_paths,
                                   &strict_node, &limit,
                                   &include_merged_revs_param,
@@ -2237,17 +2238,7 @@ static svn_error_t *log_cmd(svn_ra_svn_c
                              _("Unknown revprop word '%s' in log command"),
                              revprop_word);
 
-  if (move_behavior_param == SVN_RA_SVN_UNSPECIFIED_NUMBER)
-    move_behavior = svn_move_behavior_no_moves;
-  else if (move_behavior_param <= svn_move_behavior_auto_moves)
-    move_behavior = (svn_move_behavior_t) move_behavior_param;
-  else
-    return svn_error_createf(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
-                             apr_psprintf(pool,
-                                          _("Invalid move_behavior value"
-                                            " %%%s in log command"),
-                                          APR_UINT64_T_FMT),
-                             move_behavior_param);
+  move_behavior = svn_move_behavior_from_word(move_behavior_param);
 
   /* If we got an unspecified number then the user didn't send us anything,
      so we assume no limit.  If it's larger than INT_MAX then someone is

Modified: subversion/branches/fsfs-lock-many/subversion/svnserve/svnserve.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/svnserve/svnserve.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/svnserve/svnserve.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/svnserve/svnserve.c Thu Feb 27 12:51:04 2014
@@ -58,18 +58,8 @@
 #include "private/svn_mutex.h"
 #include "private/svn_subr_private.h"
 
-/* Alas! old APR-Utils don't provide thread pools */
 #if APR_HAS_THREADS
-#  if APR_VERSION_AT_LEAST(1,3,0)
 #    include <apr_thread_pool.h>
-#    define HAVE_THREADPOOLS 1
-#    define THREAD_ERROR_MSG _("Can't push task")
-#  else
-#    define HAVE_THREADPOOLS 0
-#    define THREAD_ERROR_MSG _("Can't create thread")
-#  endif
-#else
-#  define HAVE_THREADPOOLS 0
 #endif
 
 #include "winservice.h"
@@ -540,8 +530,6 @@ serve_socket(connection_t *connection,
    There should be at most THREADPOOL_MAX_SIZE such pools. */
 static svn_root_pools__t *connection_pools;
 
-#if HAVE_THREADPOOLS
-
 /* The global thread pool serving all connections. */
 static apr_thread_pool_t *threads;
 
@@ -586,26 +574,6 @@ static void * APR_THREAD_FUNC serve_thre
   return NULL;
 }
 
-#else
-
-/* Fully serve the connection given by DATA. */
-static void * APR_THREAD_FUNC serve_thread(apr_thread_t *tid, void *data)
-{
-  struct connection_t *connection = data;
-  apr_pool_t *pool = svn_root_pools__acquire_pool(connection_pools);
-
-  /* serve_socket() logs any error it returns, so ignore it. */
-  svn_error_clear(serve_socket(connection, pool));
-
-  svn_root_pools__release_pool(pool, connection_pools);
-
-  /* destroy the connection object */
-  close_connection(connection);
-
-  return NULL;
-}
-#endif
-
 #endif
 
 /* Write the PID of the current process as a decimal number, followed by a
@@ -668,10 +636,6 @@ sub_main(int *exit_code, int argc, const
 #ifndef WIN32
   apr_proc_t proc;
 #endif
-#if APR_HAS_THREADS && !HAVE_THREADPOOLS
-  apr_threadattr_t *tattr;
-  apr_thread_t *tid;
-#endif
   svn_boolean_t is_multi_threaded;
   enum connection_handling_mode handling_mode = CONNECTION_DEFAULT;
   apr_hash_t *fs_config = NULL;
@@ -1224,9 +1188,7 @@ sub_main(int *exit_code, int argc, const
 
 #if APR_HAS_THREADS
   SVN_ERR(svn_root_pools__create(&connection_pools));
-#endif
 
-#if HAVE_THREADPOOLS
   if (handling_mode == connection_mode_thread)
     {
       /* create the thread pool */
@@ -1295,26 +1257,11 @@ sub_main(int *exit_code, int argc, const
 #if APR_HAS_THREADS
           attach_connection(connection);
 
-#if HAVE_THREADPOOLS
           status = apr_thread_pool_push(threads, serve_thread, connection,
                                         0, NULL);
-#else
-          status = apr_threadattr_create(&tattr, connection->pool);
           if (status)
             {
-              return svn_error_wrap_apr(status, _("Can't create threadattr"));
-            }
-          status = apr_threadattr_detach_set(tattr, 1);
-          if (status)
-            {
-              return svn_error_wrap_apr(status, _("Can't set detached state"));
-            }
-          status = apr_thread_create(&tid, tattr, serve_thread, connection,
-                                     connection->pool);
-#endif
-          if (status)
-            {
-              return svn_error_wrap_apr(status, THREAD_ERROR_MSG);
+              return svn_error_wrap_apr(status, _("Can't push task"));
             }
 #endif
           break;
@@ -1357,7 +1304,7 @@ main(int argc, const char *argv[])
       svn_cmdline_handle_exit_error(err, NULL, "svnserve: ");
     }
 
-#if HAVE_THREADPOOLS
+#if APR_HAS_THREADS
   /* Explicitly wait for all threads to exit.  As we found out with similar
      code in our C test framework, the memory pool cleanup below cannot be
      trusted to do the right thing. */

Modified: subversion/branches/fsfs-lock-many/subversion/tests/cmdline/authz_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/tests/cmdline/authz_tests.py?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/tests/cmdline/authz_tests.py (original)
+++ subversion/branches/fsfs-lock-many/subversion/tests/cmdline/authz_tests.py Thu Feb 27 12:51:04 2014
@@ -1535,7 +1535,6 @@ def authz_del_from_subdir(sbox):
 
 
 @SkipUnless(svntest.main.is_ra_type_dav) # dontdothat is dav only
-@SkipUnless(svntest.main.is_os_windows) # until the buildbots are configured
 def log_diff_dontdothat(sbox):
   "log --diff on dontdothat"
   sbox.build(create_wc = False)

Modified: subversion/branches/fsfs-lock-many/subversion/tests/cmdline/commit_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/tests/cmdline/commit_tests.py?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/tests/cmdline/commit_tests.py (original)
+++ subversion/branches/fsfs-lock-many/subversion/tests/cmdline/commit_tests.py Thu Feb 27 12:51:04 2014
@@ -3015,7 +3015,64 @@ def commit_cp_with_deep_delete(sbox):
                                         None,
                                         wc_dir)
 
-  
+def commit_deep_deleted(sbox):
+  "try to commit a deep descendant of a deleted node"
+
+  sbox.build()
+
+  sbox.simple_move('A', 'AA')
+
+  sbox.simple_propset('k', 'v', 'AA/D/G')
+
+  # Committing some added descendant returns a proper error
+  expected_err = ('svn: E200009: \'%s\' is not known to exist in the ' +
+                  'repository and is not part of the commit, yet its ' +
+                  'child \'%s\' is part of the commit') % (
+                    re.escape(os.path.abspath(sbox.ospath('AA'))),
+                    re.escape(os.path.abspath(sbox.ospath('AA/D/G'))))
+
+  svntest.actions.run_and_verify_commit(sbox.wc_dir,
+                                        None,
+                                        None,
+                                        expected_err,
+                                        sbox.ospath('AA/D/G'))
+
+  sbox.simple_propdel('k', 'AA/D/G')
+  sbox.simple_rm('AA/D/G')
+
+  # But a delete fails..
+  # This used to trigger an assertion in Subversion 1.8.0-1.8.8, because
+  # the status walker couldn't find the repository path for AA/D/G
+  svntest.actions.run_and_verify_commit(sbox.wc_dir,
+                                        None,
+                                        None,
+                                        expected_err,
+                                        sbox.ospath('AA/D/G'))
+
+  # And now commit like how a GUI client would do it, but forgetting the move
+  expected_err = ('svn: E200009: Cannot commit \'%s\' because it was moved ' +
+                  'from \'%s\' which is not part of the commit; both sides ' +
+                  'of the move must be committed together') % (
+                     re.escape(os.path.abspath(sbox.ospath('AA'))),
+                     re.escape(os.path.abspath(sbox.ospath('A'))))
+  svntest.actions.run_and_verify_commit(sbox.wc_dir,
+                                        None,
+                                        None,
+                                        expected_err,
+                                        '--depth', 'empty',
+                                        sbox.ospath('AA/D/G'),
+                                        sbox.ospath('AA'))
+
+
+  # And now how it works
+  svntest.actions.run_and_verify_commit(sbox.wc_dir,
+                                        None,
+                                        None,
+                                        [],
+                                        '--depth', 'empty',
+                                        sbox.ospath('AA/D/G'),
+                                        sbox.ospath('AA'),
+                                        sbox.ospath('A'))
 
 ########################################################################
 # Run the tests
@@ -3090,6 +3147,7 @@ test_list = [ None,
               last_changed_of_copied_subdir,
               commit_unversioned,
               commit_cp_with_deep_delete,
+              commit_deep_deleted,
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/fsfs-lock-many/subversion/tests/cmdline/davautocheck.sh
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/tests/cmdline/davautocheck.sh?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/tests/cmdline/davautocheck.sh (original)
+++ subversion/branches/fsfs-lock-many/subversion/tests/cmdline/davautocheck.sh Thu Feb 27 12:51:04 2014
@@ -224,15 +224,19 @@ fi
 if [ ${MODULE_PATH:+set} ]; then
     MOD_DAV_SVN="$MODULE_PATH/mod_dav_svn.so"
     MOD_AUTHZ_SVN="$MODULE_PATH/mod_authz_svn.so"
+    MOD_DONTDOTHAT="$MODULE_PATH/mod_dontdothat.so"
 else
     MOD_DAV_SVN="$ABS_BUILDDIR/subversion/mod_dav_svn/.libs/mod_dav_svn.so"
     MOD_AUTHZ_SVN="$ABS_BUILDDIR/subversion/mod_authz_svn/.libs/mod_authz_svn.so"
+    MOD_DONTDOTHAT="$ABS_BUILDDIR/tools/server-side/mod_dontdothat/.libs/mod_dontdothat.so"
 fi
 
 [ -r "$MOD_DAV_SVN" ] \
   || fail "dav_svn_module not found, please use '--enable-shared --enable-dso --with-apxs' with your 'configure' script"
 [ -r "$MOD_AUTHZ_SVN" ] \
   || fail "authz_svn_module not found, please use '--enable-shared --enable-dso --with-apxs' with your 'configure' script"
+[ -r "$MOD_DONTDOTHAT" ] \
+  || fail "dontdothat_module not found, please use '--enable-shared --enable-dso --with-apxs' with your 'configure' script"
 
 for d in "$ABS_BUILDDIR"/subversion/*/.libs; do
   if [ -z "$BUILDDIR_LIBRARY_PATH" ]; then
@@ -332,6 +336,7 @@ HTTPD_PID="$HTTPD_ROOT/pid"
 HTTPD_ACCESS_LOG="$HTTPD_ROOT/access_log"
 HTTPD_ERROR_LOG="$HTTPD_ROOT/error_log"
 HTTPD_MIME_TYPES="$HTTPD_ROOT/mime.types"
+HTTPD_DONTDOTHAT="$HTTPD_ROOT/dontdothat"
 if [ -z "$BASE_URL" ]; then
   BASE_URL="http://localhost:$HTTPD_PORT"
 else
@@ -403,6 +408,12 @@ $HTPASSWD -b  $HTTPD_USERS jconstant ray
 
 touch $HTTPD_MIME_TYPES
 
+cat >  "$HTTPD_DONTDOTHAT" <<__EOF__
+[recursive-actions]
+/ = deny
+
+__EOF__
+
 cat > "$HTTPD_CFG" <<__EOF__
 $LOAD_MOD_MPM
 $LOAD_MOD_SSL
@@ -419,6 +430,7 @@ $LOAD_MOD_AUTHZ_CORE
 $LOAD_MOD_AUTHZ_USER
 $LOAD_MOD_AUTHZ_HOST
 LoadModule          authz_svn_module "$MOD_AUTHZ_SVN"
+LoadModule          dontdothat_module "$MOD_DONTDOTHAT"
 
 __EOF__
 
@@ -498,6 +510,19 @@ CustomLog           "$HTTPD_ROOT/ops" "%
   SVNCacheRevProps  ${CACHE_REVPROPS_SETTING}
   ${SVN_PATH_AUTHZ_LINE}
 </Location>
+<Location /ddt-test-work/repositories>
+  DAV               svn
+  SVNParentPath     "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/repositories"
+  AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz"
+  AuthType          Basic
+  AuthName          "Subversion Repository"
+  AuthUserFile      $HTTPD_USERS
+  Require           valid-user
+  SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL}
+  SVNCacheRevProps  ${CACHE_REVPROPS_SETTING}
+  ${SVN_PATH_AUTHZ_LINE}
+  DontDoThatConfigFile "$HTTPD_DONTDOTHAT"
+</Location>
 <Location /svn-test-work/local_tmp/repos>
   DAV               svn
   SVNPath           "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/local_tmp/repos"

Modified: subversion/branches/fsfs-lock-many/subversion/tests/cmdline/getopt_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/tests/cmdline/getopt_tests.py?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/tests/cmdline/getopt_tests.py (original)
+++ subversion/branches/fsfs-lock-many/subversion/tests/cmdline/getopt_tests.py Thu Feb 27 12:51:04 2014
@@ -74,6 +74,15 @@ del_lines_res = [
                  re.compile(r"  - with Cyrus SASL authentication"),
                  re.compile(r"  - using serf \d+\.\d+\.\d+"),
                  re.compile(r"\* fs_(base|fs) :"),
+
+                 # Remove 'svn --version' list of platform-specific
+                 # auth cache providers.
+                 re.compile(r"\* Wincrypt cache.*"),
+                 re.compile(r"\* Plaintext cache.*"),
+                 re.compile(r"\* Gnome Keyring"),
+                 re.compile(r"\* GPG-Agent"),
+                 re.compile(r"\* Mac OS X Keychain"),
+                 re.compile(r"\* Kwallet \(KDE\)"),
                 ]
 
 # This is a list of lines to search and replace text on.

Modified: subversion/branches/fsfs-lock-many/subversion/tests/cmdline/getopt_tests_data/svn--help_stdout
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/tests/cmdline/getopt_tests_data/svn--help_stdout?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/tests/cmdline/getopt_tests_data/svn--help_stdout (original)
+++ subversion/branches/fsfs-lock-many/subversion/tests/cmdline/getopt_tests_data/svn--help_stdout Thu Feb 27 12:51:04 2014
@@ -10,6 +10,7 @@ command, it recurses on the current dire
 
 Available subcommands:
    add
+   auth
    blame (praise, annotate, ann)
    cat
    changelist (cl)

Modified: subversion/branches/fsfs-lock-many/subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stdout
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stdout?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stdout (original)
+++ subversion/branches/fsfs-lock-many/subversion/tests/cmdline/getopt_tests_data/svn--version--verbose_stdout Thu Feb 27 12:51:04 2014
@@ -1,5 +1,5 @@
-svn, version 1.8.0-dev (under development)
-   compiled Sep 10 2012, 14:00:24 on i386-apple-darwin11.4.0
+svn, version 1.9.0-dev (under development)
+   compiled Feb 26 2014, 15:15:42 on x86_64-unknown-openbsd5.5
 
 Copyright (C) 2012 The Apache Software Foundation.
 This software consists of contributions made by many people;
@@ -14,9 +14,16 @@ The following repository access (RA) mod
 * ra_local : Module for accessing a repository on local disk.
   - handles 'file' scheme
 * ra_serf : Module for accessing a repository via WebDAV protocol using serf.
+  - using serf 1.3.3
   - handles 'http' scheme
   - handles 'https' scheme
 
+The following authentication credential caches are available:
+
+* Plaintext cache in /home/stsp/.subversion
+* Gnome Keyring
+* GPG-Agent
+
 System information:
 
 * running on i386-apple-darwin11.4.0

Modified: subversion/branches/fsfs-lock-many/subversion/tests/cmdline/getopt_tests_data/svn--version_stdout
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/tests/cmdline/getopt_tests_data/svn--version_stdout?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/tests/cmdline/getopt_tests_data/svn--version_stdout (original)
+++ subversion/branches/fsfs-lock-many/subversion/tests/cmdline/getopt_tests_data/svn--version_stdout Thu Feb 27 12:51:04 2014
@@ -1,18 +1,26 @@
-svn, version 0.16.0 (r3987)
-   compiled Dec  5 2002, 00:02:51
+svn, version 1.9.0-dev (under development)
+   compiled Feb 26 2014, 15:15:42 on x86_64-unknown-openbsd5.5
 
-Copyright (C) 2010 The Apache Software Foundation.
+Copyright (C) 2014 The Apache Software Foundation.
 This software consists of contributions made by many people;
 see the NOTICE file for more information.
 Subversion is open source software, see http://subversion.apache.org/
 
 The following repository access (RA) modules are available:
 
-* ra_neon : Module for accessing a repository via WebDAV protocol using Neon.
-  - handles 'http' scheme
-  - handles 'https' scheme
-* ra_local : Module for accessing a repository on local disk.
-  - handles 'file' scheme
 * ra_svn : Module for accessing a repository using the svn network protocol.
+  - with Cyrus SASL authentication
   - handles 'svn' scheme
+* ra_local : Module for accessing a repository on local disk.
+  - handles 'file' scheme
+* ra_serf : Module for accessing a repository via WebDAV protocol using serf.
+  - using serf 1.3.3
+  - handles 'http' scheme
+  - handles 'https' scheme
+
+The following authentication credential caches are available:
+
+* Plaintext cache in /home/stsp/.subversion
+* Gnome Keyring
+* GPG-Agent
 

Modified: subversion/branches/fsfs-lock-many/subversion/tests/cmdline/getopt_tests_data/svn_help_stdout
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/tests/cmdline/getopt_tests_data/svn_help_stdout?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/tests/cmdline/getopt_tests_data/svn_help_stdout (original)
+++ subversion/branches/fsfs-lock-many/subversion/tests/cmdline/getopt_tests_data/svn_help_stdout Thu Feb 27 12:51:04 2014
@@ -10,6 +10,7 @@ command, it recurses on the current dire
 
 Available subcommands:
    add
+   auth
    blame (praise, annotate, ann)
    cat
    changelist (cl)

Modified: subversion/branches/fsfs-lock-many/subversion/tests/cmdline/upgrade_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/tests/cmdline/upgrade_tests.py?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/tests/cmdline/upgrade_tests.py (original)
+++ subversion/branches/fsfs-lock-many/subversion/tests/cmdline/upgrade_tests.py Thu Feb 27 12:51:04 2014
@@ -1427,6 +1427,17 @@ def changelist_upgrade_1_6(sbox):
   if paths != expected_paths:
     raise svntest.Failure("changelist not matched")
 
+
+def upgrade_1_7_dir_external(sbox):
+  "upgrade from 1.7 with dir external"
+
+  sbox.build(create_wc = False)
+  replace_sbox_with_tarfile(sbox, 'upgrade_1_7_dir_external.tar.bz2')
+
+  # This fails for 'make check EXCLUSIVE_WC_LOCKS=1' giving an error:
+  # svn: warning: W200033: sqlite[S5]: database is locked
+  svntest.actions.run_and_verify_svn(None, None, [], 'upgrade', sbox.wc_dir)
+
 ########################################################################
 # Run the tests
 
@@ -1482,6 +1493,7 @@ test_list = [ None,
               iprops_upgrade,
               iprops_upgrade1_6,
               changelist_upgrade_1_6,
+              upgrade_1_7_dir_external,
              ]
 
 

Modified: subversion/branches/fsfs-lock-many/subversion/tests/libsvn_repos/repos-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/tests/libsvn_repos/repos-test.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/tests/libsvn_repos/repos-test.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/tests/libsvn_repos/repos-test.c Thu Feb 27 12:51:04 2014
@@ -2971,7 +2971,7 @@ get_logs(const svn_test_opts_t *opts,
                                          "Log with start=%ld,end=%ld,limit=%d "
                                          "returned %ld entries (expected %ld)",
                                          start_arg, end_arg, limit,
-                                         num_logs, max_logs);
+                                         num_logs, num_expected);
             }
         }
     }

Modified: subversion/branches/fsfs-lock-many/subversion/tests/libsvn_subr/io-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/subversion/tests/libsvn_subr/io-test.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/subversion/tests/libsvn_subr/io-test.c (original)
+++ subversion/branches/fsfs-lock-many/subversion/tests/libsvn_subr/io-test.c Thu Feb 27 12:51:04 2014
@@ -555,13 +555,8 @@ aligned_seek(apr_file_t *file,
    */
   if (buffered)
     {
-#if APR_VERSION_AT_LEAST(1,3,0)
       SVN_TEST_ASSERT(block_start % block_size == 0);
       SVN_TEST_ASSERT(offset - block_start < block_size);
-#else
-      SVN_TEST_ASSERT(block_start % 0x1000 == 0);
-      SVN_TEST_ASSERT(offset - block_start < 0x1000);
-#endif
     }
 
   /* we must be at the desired offset */

Modified: subversion/branches/fsfs-lock-many/tools/dev/unix-build/Makefile.svn
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/tools/dev/unix-build/Makefile.svn?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/tools/dev/unix-build/Makefile.svn (original)
+++ subversion/branches/fsfs-lock-many/tools/dev/unix-build/Makefile.svn Thu Feb 27 12:51:04 2014
@@ -72,7 +72,7 @@ GNU_ICONV_VER	= 1.14
 APR_UTIL_VER	= 1.4.1
 HTTPD_VER	= 2.2.26
 NEON_VER	= 0.29.6
-SERF_VER	= 1.3.3
+SERF_VER	= 1.3.4
 SERF_OLD_VER	= 0.3.1
 CYRUS_SASL_VER	= 2.1.25
 SQLITE_VER	= 3080200

Modified: subversion/branches/fsfs-lock-many/tools/server-side/fsfs-stats.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-lock-many/tools/server-side/fsfs-stats.c?rev=1572541&r1=1572540&r2=1572541&view=diff
==============================================================================
--- subversion/branches/fsfs-lock-many/tools/server-side/fsfs-stats.c (original)
+++ subversion/branches/fsfs-lock-many/tools/server-side/fsfs-stats.c Thu Feb 27 12:51:04 2014
@@ -355,7 +355,6 @@ get_content(svn_stringbuf_t **content,
   *content = svn_stringbuf_create_ensure(len, pool);
   (*content)->len = len;
 
-#if APR_VERSION_AT_LEAST(1,3,0)
   /* for better efficiency use larger buffers on large reads */
   if (   (len >= large_buffer_size)
       && (apr_file_buffer_size_get(file) < large_buffer_size))
@@ -363,7 +362,6 @@ get_content(svn_stringbuf_t **content,
                         apr_palloc(apr_file_pool_get(file),
                                    large_buffer_size),
                         large_buffer_size);
-#endif
 
   SVN_ERR(svn_io_file_seek(file, APR_SET, &offset, pool));
   SVN_ERR(svn_io_file_read_full2(file, (*content)->data, len,