You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2014/03/09 11:08:53 UTC

svn commit: r1575685 [10/13] - in /subversion/branches/fsfs-ucsnorm: ./ build/ build/ac-macros/ build/generator/ build/generator/templates/ contrib/cgi/ contrib/client-side/emacs/ contrib/client-side/svn2cl/ contrib/hook-scripts/ contrib/server-side/sv...

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/lock.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/lock.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/lock.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/lock.c Sun Mar  9 10:08:46 2014
@@ -1211,7 +1211,7 @@ open_anchor(svn_wc_adm_access_t **anchor
           if (disjoint)
             {
               /* Switched or disjoint, so drop P_ACCESS. Don't close any
-                 descendents, or we might blast the child.  */
+                 descendants, or we might blast the child.  */
               err = close_single(p_access, FALSE /* preserve_lock */, pool);
               if (err)
                 {
@@ -1308,7 +1308,7 @@ do_close(svn_wc_adm_access_t *adm_access
       /* Gather all the opened access batons from the DB.  */
       opened = svn_wc__db_temp_get_all_access(adm_access->db, scratch_pool);
 
-      /* Close any that are descendents of this baton.  */
+      /* Close any that are descendants of this baton.  */
       for (hi = apr_hash_first(scratch_pool, opened);
            hi;
            hi = apr_hash_next(hi))
@@ -1630,7 +1630,7 @@ svn_wc__acquire_write_lock_for_resolve(c
                                                 scratch_pool, scratch_pool));
 
       /* It's possible for the required lock path to be an ancestor
-         of, a descendent of, or equal to, the obtained lock path. If
+         of, a descendant of, or equal to, the obtained lock path. If
          it's an ancestor we have to try again, otherwise the obtained
          lock will do. */
       child = svn_dirent_skip_ancestor(required_abspath, obtained_abspath);
@@ -1643,7 +1643,7 @@ svn_wc__acquire_write_lock_for_resolve(c
         }
       else
         {
-          /* required should be a descendent of, or equal to, obtained */
+          /* required should be a descendant of, or equal to, obtained */
           SVN_ERR_ASSERT(!strcmp(required_abspath, obtained_abspath)
                          || svn_dirent_skip_ancestor(obtained_abspath,
                                                      required_abspath));

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/node.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/node.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/node.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/node.c Sun Mar  9 10:08:46 2014
@@ -926,9 +926,13 @@ svn_wc__internal_get_origin(svn_boolean_
   const char *original_repos_uuid;
   svn_revnum_t original_revision;
   svn_wc__db_status_t status;
+  svn_boolean_t have_more_work;
+  svn_boolean_t op_root;
 
   const char *tmp_repos_relpath;
 
+  if (copy_root_abspath)
+    *copy_root_abspath = NULL;
   if (!repos_relpath)
     repos_relpath = &tmp_repos_relpath;
 
@@ -938,8 +942,8 @@ svn_wc__internal_get_origin(svn_boolean_
                                &original_repos_relpath,
                                &original_repos_root_url,
                                &original_repos_uuid, &original_revision,
-                               NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-                               NULL, NULL, is_copy,
+                               NULL, NULL, NULL, NULL, NULL, &op_root, NULL,
+                               NULL, NULL, &have_more_work, is_copy,
                                db, local_abspath, result_pool, scratch_pool));
 
   if (*repos_relpath)
@@ -957,6 +961,7 @@ svn_wc__internal_get_origin(svn_boolean_
 
   if (original_repos_relpath)
     {
+      /* We an have a copy */
       *repos_relpath = original_repos_relpath;
       if (revision)
         *revision = original_revision;
@@ -967,21 +972,19 @@ svn_wc__internal_get_origin(svn_boolean_
 
       if (copy_root_abspath == NULL)
         return SVN_NO_ERROR;
+      else if (op_root)
+        {
+          *copy_root_abspath = apr_pstrdup(result_pool, local_abspath);
+          return SVN_NO_ERROR;
+        }
     }
 
   {
     svn_boolean_t scan_working = FALSE;
 
-    if (status == svn_wc__db_status_added)
+    if (status == svn_wc__db_status_added
+        || (status == svn_wc__db_status_deleted && have_more_work))
       scan_working = TRUE;
-    else if (status == svn_wc__db_status_deleted)
-      {
-        svn_boolean_t have_base;
-        /* Is this a BASE or a WORKING delete? */
-        SVN_ERR(svn_wc__db_info_below_working(&have_base, &scan_working,
-                                              &status, db, local_abspath,
-                                              scratch_pool));
-      }
 
     if (scan_working)
       {

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/status.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/status.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/status.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/status.c Sun Mar  9 10:08:46 2014
@@ -92,7 +92,6 @@ struct edit_baton
 
   /* The DB handle for managing the working copy state.  */
   svn_wc__db_t *db;
-  svn_wc_context_t *wc_ctx;
 
   /* The overall depth of this edit (a dir baton may override this).
    *
@@ -284,7 +283,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 +294,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;
@@ -2373,18 +2401,18 @@ close_edit(void *edit_baton,
   if (eb->root_opened)
     return SVN_NO_ERROR;
 
-  SVN_ERR(svn_wc_walk_status(eb->wc_ctx,
-                             eb->target_abspath,
-                             eb->default_depth,
-                             eb->get_all,
-                             eb->no_ignore,
-                             FALSE,
-                             eb->ignores,
-                             eb->status_func,
-                             eb->status_baton,
-                             eb->cancel_func,
-                             eb->cancel_baton,
-                             pool));
+  SVN_ERR(svn_wc__internal_walk_status(eb->db,
+                                       eb->target_abspath,
+                                       eb->default_depth,
+                                       eb->get_all,
+                                       eb->no_ignore,
+                                       FALSE,
+                                       eb->ignores,
+                                       eb->status_func,
+                                       eb->status_baton,
+                                       eb->cancel_func,
+                                       eb->cancel_baton,
+                                       pool));
 
   return SVN_NO_ERROR;
 }
@@ -2427,7 +2455,6 @@ svn_wc__get_status_editor(const svn_delt
   eb->default_depth     = depth;
   eb->target_revision   = edit_revision;
   eb->db                = wc_ctx->db;
-  eb->wc_ctx            = wc_ctx;
   eb->get_all           = get_all;
   eb->no_ignore         = no_ignore;
   eb->status_func       = status_func;

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/update_editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/update_editor.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/update_editor.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/update_editor.c Sun Mar  9 10:08:46 2014
@@ -415,7 +415,7 @@ struct handler_baton
      provide a sha1, so we may not have to calculate both, but for the time
      being, that's the way it is. */
 
-  /* The calculated checksum of the text source or NULL if the acual
+  /* The calculated checksum of the text source or NULL if the actual
      checksum is not being calculated. The checksum kind is identical to the
      kind of expected_source_checksum. */
   svn_checksum_t *actual_source_checksum;

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc-metadata.sql
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc-metadata.sql?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc-metadata.sql (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc-metadata.sql Sun Mar  9 10:08:46 2014
@@ -597,6 +597,9 @@ CREATE UNIQUE INDEX I_EXTERNALS_DEFINED 
 -- STMT_INSTALL_SCHEMA_STATISTICS
 ANALYZE sqlite_master; /* Creates empty sqlite_stat1 if necessary */
 
+DELETE FROM sqlite_stat1
+WHERE tbl in ('NODES', 'ACTUAL_NODE', 'LOCK', 'WC_LOCK');
+
 INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES
     ('NODES', 'sqlite_autoindex_NODES_1',               '8000 8000 2 1');
 INSERT OR REPLACE INTO sqlite_stat1(tbl, idx, stat) VALUES

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc_db.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc_db.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc_db.c Sun Mar  9 10:08:46 2014
@@ -8132,7 +8132,7 @@ struct op_delete_many_baton_t {
   apr_array_header_t *rel_targets;
   svn_boolean_t delete_dir_externals;
   const svn_skel_t *work_items;
-} op_delete_many_baton_t;
+};
 
 static svn_error_t *
 op_delete_many_txn(void *baton,

Modified: subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc_db_wcroot.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc_db_wcroot.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc_db_wcroot.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/libsvn_wc/wc_db_wcroot.c Sun Mar  9 10:08:46 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-ucsnorm/subversion/mod_dav_svn/reports/log.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/log.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/log.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/reports/log.c Sun Mar  9 10:08:46 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-ucsnorm/subversion/mod_dav_svn/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/util.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/util.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/mod_dav_svn/util.c Sun Mar  9 10:08:46 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-ucsnorm/subversion/svn/cl.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svn/cl.h?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svn/cl.h (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svn/cl.h Sun Mar  9 10:08:46 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-ucsnorm/subversion/svn/conflict-callbacks.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svn/conflict-callbacks.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svn/conflict-callbacks.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svn/conflict-callbacks.c Sun Mar  9 10:08:46 2014
@@ -325,22 +325,14 @@ open_editor(svn_boolean_t *performed_edi
     {
       err = svn_cmdline__edit_file_externally(merged_file, b->editor_cmd,
                                               b->config, pool);
-      if (err && (err->apr_err == SVN_ERR_CL_NO_EXTERNAL_EDITOR))
+      if (err && (err->apr_err == SVN_ERR_CL_NO_EXTERNAL_EDITOR ||
+                  err->apr_err == SVN_ERR_EXTERNAL_PROGRAM))
         {
-          svn_error_t *root_err = svn_error_root_cause(err);
+          char buf[1024];
+          const char *message;
 
-          SVN_ERR(svn_cmdline_fprintf(stderr, pool, "%s\n",
-                                      root_err->message ? root_err->message :
-                                      _("No editor found.")));
-          svn_error_clear(err);
-        }
-      else if (err && (err->apr_err == SVN_ERR_EXTERNAL_PROGRAM))
-        {
-          svn_error_t *root_err = svn_error_root_cause(err);
-
-          SVN_ERR(svn_cmdline_fprintf(stderr, pool, "%s\n",
-                                      root_err->message ? root_err->message :
-                                      _("Error running editor.")));
+          message = svn_err_best_message(err, buf, sizeof(buf));
+          SVN_ERR(svn_cmdline_fprintf(stderr, pool, "%s\n", message));
           svn_error_clear(err);
         }
       else if (err)
@@ -821,12 +813,24 @@ handle_text_conflict(svn_wc_conflict_res
           err = launch_resolver(&performed_edit, desc, b, iterpool);
           if (err)
             {
-              if (err->apr_err == SVN_ERR_CL_NO_EXTERNAL_MERGE_TOOL ||
-                  err->apr_err == SVN_ERR_EXTERNAL_PROGRAM)
+              if (err->apr_err == SVN_ERR_CL_NO_EXTERNAL_MERGE_TOOL)
                 {
                   /* Try the internal merge tool. */
                   svn_error_clear(err);
                 }
+              else if (err->apr_err == SVN_ERR_EXTERNAL_PROGRAM)
+                {
+                  char buf[1024];
+                  const char *message;
+
+                  message = svn_err_best_message(err, buf, sizeof(buf));
+                  SVN_ERR(svn_cmdline_fprintf(stderr, iterpool,
+                                              "%s\n", message));
+                  SVN_ERR(svn_cmdline_fputs(_("Falling back to internal "
+                                              "merge tool.\n"), stderr,
+                                              iterpool));
+                  svn_error_clear(err);
+                }
               else
                 return svn_error_trace(err);
             }
@@ -873,22 +877,16 @@ handle_text_conflict(svn_wc_conflict_res
               desc->my_abspath && desc->merged_file)
             {
               svn_error_t *err;
+              char buf[1024];
+              const char *message;
 
               err = launch_resolver(&performed_edit, desc, b, iterpool);
-              if (err && err->apr_err == SVN_ERR_CL_NO_EXTERNAL_MERGE_TOOL)
-                {
-                  SVN_ERR(svn_cmdline_fprintf(stderr, iterpool, "%s\n",
-                                              err->message ? err->message :
-                                              _("No merge tool found, "
-                                                "try '(m) merge' instead.\n")));
-                  svn_error_clear(err);
-                }
-              else if (err && err->apr_err == SVN_ERR_EXTERNAL_PROGRAM)
+              if (err && (err->apr_err == SVN_ERR_CL_NO_EXTERNAL_MERGE_TOOL ||
+                          err->apr_err == SVN_ERR_EXTERNAL_PROGRAM))
                 {
+                  message = svn_err_best_message(err, buf, sizeof(buf));
                   SVN_ERR(svn_cmdline_fprintf(stderr, iterpool, "%s\n",
-                                              err->message ? err->message :
-                                         _("Error running merge tool, "
-                                           "try '(m) merge' instead.")));
+                                              message));
                   svn_error_clear(err);
                 }
               else if (err)
@@ -1220,21 +1218,15 @@ conflict_func_interactive(svn_wc_conflic
           err = svn_cmdline__edit_file_externally(desc->merged_file,
                                                   b->editor_cmd, b->config,
                                                   scratch_pool);
-          if (err && (err->apr_err == SVN_ERR_CL_NO_EXTERNAL_EDITOR))
-            {
-              SVN_ERR(svn_cmdline_fprintf(stderr, scratch_pool, "%s\n",
-                                          err->message ? err->message :
-                                          _("No editor found;"
-                                            " leaving all conflicts.")));
-              svn_error_clear(err);
-              b->external_failed = TRUE;
-            }
-          else if (err && (err->apr_err == SVN_ERR_EXTERNAL_PROGRAM))
+          if (err && (err->apr_err == SVN_ERR_CL_NO_EXTERNAL_EDITOR ||
+                      err->apr_err == SVN_ERR_EXTERNAL_PROGRAM))
             {
+              char buf[1024];
+              const char *message;
+
+              message = svn_err_best_message(err, buf, sizeof(buf));
               SVN_ERR(svn_cmdline_fprintf(stderr, scratch_pool, "%s\n",
-                                          err->message ? err->message :
-                                          _("Error running editor;"
-                                            " leaving all conflicts.")));
+                                          message));
               svn_error_clear(err);
               b->external_failed = TRUE;
             }
@@ -1265,21 +1257,15 @@ conflict_func_interactive(svn_wc_conflic
                                               b->config,
                                               &remains_in_conflict,
                                               scratch_pool);
-          if (err && err->apr_err == SVN_ERR_CL_NO_EXTERNAL_MERGE_TOOL)
-            {
-              SVN_ERR(svn_cmdline_fprintf(stderr, scratch_pool, "%s\n",
-                                          err->message ? err->message :
-                                          _("No merge tool found;"
-                                            " leaving all conflicts.")));
-              b->external_failed = TRUE;
-              return svn_error_trace(err);
-            }
-          else if (err && err->apr_err == SVN_ERR_EXTERNAL_PROGRAM)
+          if (err && (err->apr_err == SVN_ERR_CL_NO_EXTERNAL_MERGE_TOOL ||
+                      err->apr_err == SVN_ERR_EXTERNAL_PROGRAM))
             {
+              char buf[1024];
+              const char *message;
+
+              message = svn_err_best_message(err, buf, sizeof(buf));
               SVN_ERR(svn_cmdline_fprintf(stderr, scratch_pool, "%s\n",
-                                          err->message ? err->message :
-                                          _("Error running merge tool;"
-                                            " leaving all conflicts.")));
+                                          message));
               b->external_failed = TRUE;
               return svn_error_trace(err);
             }

Modified: subversion/branches/fsfs-ucsnorm/subversion/svn/file-merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svn/file-merge.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svn/file-merge.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svn/file-merge.c Sun Mar  9 10:08:46 2014
@@ -75,12 +75,12 @@ struct file_merge_baton {
   /* The client configuration hash. */
   apr_hash_t *config;
 
-  /* Wether the merge should be aborted. */
+  /* Whether the merge should be aborted. */
   svn_boolean_t abort_merge;
 
   /* Pool for temporary allocations. */
   apr_pool_t *scratch_pool;
-} file_merge_baton;
+};
 
 /* Copy LEN lines from SOURCE_FILE to the MERGED_FILE, starting at
  * line START. The CURRENT_LINE is the current line in the source file.

Modified: subversion/branches/fsfs-ucsnorm/subversion/svn/help-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svn/help-cmd.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svn/help-cmd.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svn/help-cmd.c Sun Mar  9 10:08:46 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-ucsnorm/subversion/svn/status-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svn/status-cmd.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svn/status-cmd.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svn/status-cmd.c Sun Mar  9 10:08:46 2014
@@ -365,7 +365,7 @@ svn_cl__status(apr_getopt_t *os,
         SVN_ERR(print_finish_target_xml(repos_rev, iterpool));
     }
 
-  /* If any paths were cached because they were associatied with
+  /* If any paths were cached because they were associated with
      changelists, we can now display them as grouped changelists. */
   if (apr_hash_count(master_cl_hash) > 0)
     {

Modified: subversion/branches/fsfs-ucsnorm/subversion/svn/svn.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svn/svn.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svn/svn.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svn/svn.c Sun Mar  9 10:08:46 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;
 
 
@@ -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,32 @@ 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 },
+    { {opt_remove, N_("remove matching authentication credentials")} }
+    
+    },
+
   { "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 +2334,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-ucsnorm/subversion/svn/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svn/util.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svn/util.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svn/util.c Sun Mar  9 10:08:46 2014
@@ -164,9 +164,9 @@ svn_cl__merge_file_externally(const char
      * is OK to continue with the merge.
      * Any other exit code means there was a real problem. */
     if (exitcode != 0 && exitcode != 1)
-      return svn_error_createf
-        (SVN_ERR_EXTERNAL_PROGRAM, NULL,
-         _("The external merge tool exited with exit code %d"), exitcode);
+      return svn_error_createf(SVN_ERR_EXTERNAL_PROGRAM, NULL,
+        _("The external merge tool '%s' exited with exit code %d."),
+        merge_tool, exitcode);
     else if (remains_in_conflict)
       *remains_in_conflict = exitcode == 1;
   }

Modified: subversion/branches/fsfs-ucsnorm/subversion/svnadmin/svnadmin.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svnadmin/svnadmin.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svnadmin/svnadmin.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svnadmin/svnadmin.c Sun Mar  9 10:08:46 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-ucsnorm/subversion/svndumpfilter/svndumpfilter.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svndumpfilter/svndumpfilter.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svndumpfilter/svndumpfilter.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svndumpfilter/svndumpfilter.c Sun Mar  9 10:08:46 2014
@@ -970,7 +970,7 @@ close_revision(void *revision_baton)
 
 
 /* Filtering vtable */
-svn_repos_parse_fns3_t filtering_vtable =
+static svn_repos_parse_fns3_t filtering_vtable =
   {
     magic_header_record,
     uuid_record,

Modified: subversion/branches/fsfs-ucsnorm/subversion/svnlook/svnlook.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svnlook/svnlook.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svnlook/svnlook.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svnlook/svnlook.c Sun Mar  9 10:08:46 2014
@@ -1598,7 +1598,7 @@ print_history(void *baton,
     {
       phb->count++;
       if (phb->count >= phb->limit)
-        /* Not L10N'd, since this error is supressed by the caller. */
+        /* Not L10N'd, since this error is suppressed by the caller. */
         return svn_error_create(SVN_ERR_CEASE_INVOCATION, NULL,
                                 _("History item limit reached"));
     }

Modified: subversion/branches/fsfs-ucsnorm/subversion/svnrdump/load_editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svnrdump/load_editor.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svnrdump/load_editor.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svnrdump/load_editor.c Sun Mar  9 10:08:46 2014
@@ -277,7 +277,7 @@ renumber_mergeinfo_revs(svn_string_t **f
                  inclusive there is one possible valid start revision that
                  won't be found in the PB->REV_MAP mapping of load stream
                  revsions to loaded revisions: The revision immediately
-                 preceeding the oldest revision from the load stream.
+                 preceding the oldest revision from the load stream.
                  This is a valid revision for mergeinfo, but not a valid
                  copy from revision (which PB->REV_MAP also maps for) so it
                  will never be in the mapping.

Modified: subversion/branches/fsfs-ucsnorm/subversion/svnserve/cyrus_auth.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svnserve/cyrus_auth.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svnserve/cyrus_auth.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svnserve/cyrus_auth.c Sun Mar  9 10:08:46 2014
@@ -184,9 +184,15 @@ static svn_error_t *try_auth(svn_ra_svn_
   /* For CRAM-MD5, we don't base64-encode stuff. */
   use_base64 = (strcmp(mech, "CRAM-MD5") != 0);
 
+  /* sasl uses unsigned int for the length of strings, we use apr_size_t
+   * which may not be the same size.  Deal with potential integer overflow */
+  if (in->len > UINT_MAX)
+    return svn_error_createf(SVN_ERR_RA_NOT_AUTHORIZED, NULL,
+                             _("Initial token is too long"));
+
   result = sasl_server_start(sasl_ctx, mech,
                              in ? in->data : NULL,
-                             in ? in->len : 0, &out, &outlen);
+                             in ? (unsigned int) in->len : 0, &out, &outlen);
 
   if (result != SASL_OK && result != SASL_CONTINUE)
     return fail_auth(conn, pool, sasl_ctx);
@@ -210,7 +216,13 @@ static svn_error_t *try_auth(svn_ra_svn_
       in = item->u.string;
       if (use_base64)
         in = svn_base64_decode_string(in, pool);
-      result = sasl_server_step(sasl_ctx, in->data, in->len, &out, &outlen);
+
+      if (in->len > UINT_MAX)
+        return svn_error_createf(SVN_ERR_RA_NOT_AUTHORIZED, NULL,
+                                 _("Step response is too long"));
+
+      result = sasl_server_step(sasl_ctx, in->data, (unsigned int) in->len,
+                                &out, &outlen);
     }
 
   if (result != SASL_OK)

Modified: subversion/branches/fsfs-ucsnorm/subversion/svnserve/serve.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svnserve/serve.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svnserve/serve.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svnserve/serve.c Sun Mar  9 10:08:46 2014
@@ -2184,7 +2184,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;
@@ -2192,7 +2193,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,
@@ -2229,17 +2230,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
@@ -3842,6 +3833,7 @@ serve_interruptable(svn_boolean_t *termi
                     apr_pool_t *pool)
 {
   svn_boolean_t terminate = FALSE;
+  svn_error_t *err = NULL;
   const svn_ra_svn_cmd_entry_t *command;
   apr_pool_t *iterpool = svn_pool_create(pool);
 
@@ -3855,7 +3847,7 @@ serve_interruptable(svn_boolean_t *termi
     {
       /* This is not the first call for CONNECTION. */
       if (connection->baton->repository->repos == NULL)
-        SVN_ERR(reopen_repos(connection, pool));
+        err = reopen_repos(connection, pool);
     }
   else
     {
@@ -3884,12 +3876,16 @@ serve_interruptable(svn_boolean_t *termi
                                   connection->pool);
 
       /* Construct server baton and open the repository for the first time. */
-      SVN_ERR(construct_server_baton(&connection->baton, connection->conn,
-                                     connection->params, pool));
+      err = construct_server_baton(&connection->baton, connection->conn,
+                                   connection->params, pool);
     }
 
+  /* If we can't access the repo for some reason, end this connection. */
+  if (err)
+    terminate = TRUE;
+
   /* Process incoming commands. */
-  while (!terminate)
+  while (!terminate && !err)
     {
       svn_pool_clear(iterpool);
       if (is_busy && is_busy(connection))
@@ -3899,13 +3895,13 @@ serve_interruptable(svn_boolean_t *termi
           /* If the server is busy, execute just one command and only if
            * there is one currently waiting in our receive buffers.
            */
-          SVN_ERR(svn_ra_svn__has_command(&has_command, &terminate,
-                                          connection->conn, iterpool));
-          if (has_command)
-            SVN_ERR(svn_ra_svn__handle_command(&terminate, cmd_hash,
-                                              connection->baton,
-                                              connection->conn,
-                                              FALSE, iterpool));
+          err = svn_ra_svn__has_command(&has_command, &terminate,
+                                        connection->conn, iterpool);
+          if (!err && has_command)
+            err = svn_ra_svn__handle_command(&terminate, cmd_hash,
+                                             connection->baton,
+                                             connection->conn,
+                                             FALSE, iterpool);
 
           break;
         }
@@ -3916,10 +3912,10 @@ serve_interruptable(svn_boolean_t *termi
            * busy() callback test to return TRUE while there are still some
            * resources left.
            */
-          SVN_ERR(svn_ra_svn__handle_command(&terminate, cmd_hash,
-                                             connection->baton,
-                                             connection->conn,
-                                             FALSE, iterpool));
+          err = svn_ra_svn__handle_command(&terminate, cmd_hash,
+                                           connection->baton,
+                                           connection->conn,
+                                           FALSE, iterpool);
         }
     }
 
@@ -3928,7 +3924,7 @@ serve_interruptable(svn_boolean_t *termi
   if (terminate_p)
     *terminate_p = terminate;
 
-  return SVN_NO_ERROR;
+  return svn_error_trace(err);
 }
 
 svn_error_t *serve(svn_ra_svn_conn_t *conn,

Modified: subversion/branches/fsfs-ucsnorm/subversion/svnserve/svnserve.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/svnserve/svnserve.c?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/svnserve/svnserve.c (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/svnserve/svnserve.c Sun Mar  9 10:08:46 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"
@@ -158,7 +148,7 @@ enum run_mode {
 /* Number of client to server connections that may concurrently in the
  * TCP 3-way handshake state, i.e. are in the process of being created.
  *
- * Larger values improve scalability with lots of small requests comming
+ * Larger values improve scalability with lots of small requests coming
  * on over long latency networks.
  * 
  * The OS may actually use a lower limit than specified here.
@@ -538,15 +528,13 @@ serve_socket(connection_t *connection,
 
 /* allocate and recycle root pools for connection objects.
    There should be at most THREADPOOL_MAX_SIZE such pools. */
-svn_root_pools__t *connection_pools;
-
-#if HAVE_THREADPOOLS
+static svn_root_pools__t *connection_pools;
 
 /* The global thread pool serving all connections. */
-apr_thread_pool_t *threads;
+static apr_thread_pool_t *threads;
 
 /* Very simple load determination callback for serve_interruptable:
-   With less than have the threads in THREADS in use, we can afford to
+   With less than half the threads in THREADS in use, we can afford to
    wait in the socket read() function.  Otherwise, poll them round-robin. */
 static svn_boolean_t
 is_busy(connection_t *connection)
@@ -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-ucsnorm/subversion/tests/cmdline/authz_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/authz_tests.py?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/authz_tests.py (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/authz_tests.py Sun Mar  9 10:08:46 2014
@@ -1533,7 +1533,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-ucsnorm/subversion/tests/cmdline/commit_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/commit_tests.py?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/commit_tests.py (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/commit_tests.py Sun Mar  9 10:08:46 2014
@@ -1439,7 +1439,7 @@ def commit_multiple_wc_nested(sbox):
   svntest.actions.run_and_verify_status(wc2_dir, expected_status2)
 
   # Commit should succeed, even though one target is a "child" of the other.
-  svntest.actions.run_and_verify_svn("Ouput on stderr where none expected",
+  svntest.actions.run_and_verify_svn("Output on stderr where none expected",
                                      svntest.verify.AnyOutput, [],
                                      'commit', '-m', 'log',
                                      wc_dir, wc2_dir)
@@ -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-ucsnorm/subversion/tests/cmdline/davautocheck.sh
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/davautocheck.sh?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/davautocheck.sh (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/davautocheck.sh Sun Mar  9 10:08:46 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-ucsnorm/subversion/tests/cmdline/depth_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/depth_tests.py?rev=1575685&r1=1575684&r2=1575685&view=diff
==============================================================================
--- subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/depth_tests.py (original)
+++ subversion/branches/fsfs-ucsnorm/subversion/tests/cmdline/depth_tests.py Sun Mar  9 10:08:46 2014
@@ -1026,8 +1026,8 @@ def diff_in_depthy_wc(sbox):
   svntest.actions.run_and_verify_svn(None, None, [],
                                      'commit', '-m', '', wc)
 
-  from diff_tests import make_diff_header, make_diff_prop_header
-  from diff_tests import make_diff_prop_deleted, make_diff_prop_added
+  from svntest.verify import make_diff_header, make_diff_prop_header, \
+                             make_diff_prop_deleted, make_diff_prop_added
   diff_mu = make_diff_header('A/mu', 'revision 2', 'working copy') + [
     "@@ -1 +1 @@\n",
     "-new text\n",