You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2015/10/26 09:43:08 UTC

svn commit: r1710531 [3/3] - in /subversion/branches/move-tracking-2: ./ build/ build/ac-macros/ subversion/ subversion/bindings/javahl/native/ subversion/bindings/javahl/src/org/apache/subversion/javahl/ subversion/bindings/swig/ subversion/bindings/s...

Modified: subversion/branches/move-tracking-2/subversion/libsvn_subr/atomic.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_subr/atomic.c?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_subr/atomic.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_subr/atomic.c Mon Oct 26 08:43:06 2015
@@ -22,8 +22,11 @@
 
 #include <assert.h>
 #include <apr_time.h>
-#include "private/svn_atomic.h"
 
+#include "svn_pools.h"
+
+#include "private/svn_atomic.h"
+#include "private/svn_mutex.h"
 
 /* Magic values for atomic initialization */
 #define SVN_ATOMIC_UNINITIALIZED 0
@@ -174,3 +177,42 @@ svn_atomic__init_once_no_error(volatile
   else
     return init_baton.errstr;
 }
+
+/* The process-global counter that we use to produce process-wide unique
+ * values.  Since APR has no 64 bit atomics, all access to this will be
+ * serialized through COUNTER_MUTEX. */
+static apr_uint64_t uniqiue_counter = 0;
+
+/* The corresponding mutex and initialization state. */
+static volatile svn_atomic_t counter_status = SVN_ATOMIC_UNINITIALIZED;
+static svn_mutex__t *counter_mutex = NULL;
+
+/* svn_atomic__err_init_func_t implementation that initializes COUNTER_MUTEX.
+ * Note that neither argument will be used and should be NULL. */
+static svn_error_t *
+init_unique_counter(void *null_baton,
+                    apr_pool_t *null_pool)
+{
+  /* COUNTER_MUTEX is global, so it needs to live in a global pool.
+   * APR also makes those thread-safe by default. */
+  SVN_ERR(svn_mutex__init(&counter_mutex, TRUE, svn_pool_create(NULL)));
+  return SVN_NO_ERROR;
+}
+
+/* Read and increment UNIQIUE_COUNTER. Return the new value in *VALUE.
+ * Call this function only while having acquired the COUNTER_MUTEX. */
+static svn_error_t *
+read_unique_counter(apr_uint64_t *value)
+{
+  *value = ++uniqiue_counter;
+  return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_atomic__unique_counter(apr_uint64_t *value)
+{
+  SVN_ERR(svn_atomic__init_once(&counter_status, init_unique_counter, NULL,
+                                NULL));
+  SVN_MUTEX__WITH_LOCK(counter_mutex, read_unique_counter(value));
+  return SVN_NO_ERROR;
+}

Modified: subversion/branches/move-tracking-2/subversion/libsvn_subr/deprecated.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_subr/deprecated.c?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_subr/deprecated.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_subr/deprecated.c Mon Oct 26 08:43:06 2015
@@ -1209,6 +1209,16 @@ svn_stream_checksummed(svn_stream_t *str
   return s;
 }
 
+svn_error_t *
+svn_string_from_stream(svn_string_t **result,
+                       svn_stream_t *stream,
+                       apr_pool_t *result_pool,
+                       apr_pool_t *scratch_pool)
+{
+  return svn_error_trace(svn_string_from_stream2(result, stream, 0,
+                                                 result_pool));
+}
+
 /*** From path.c ***/
 
 const char *

Modified: subversion/branches/move-tracking-2/subversion/libsvn_subr/path.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_subr/path.c?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_subr/path.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_subr/path.c Mon Oct 26 08:43:06 2015
@@ -910,9 +910,24 @@ uri_escape(const char *path, const char
   svn_stringbuf_t *retstr;
   apr_size_t i, copied = 0;
   int c;
+  apr_size_t len;
+  const char *p;
 
-  retstr = svn_stringbuf_create_ensure(strlen(path), pool);
-  for (i = 0; path[i]; i++)
+  /* To terminate our scanning loop, table[NUL] must report "invalid". */
+  assert(table[0] == 0);
+
+  /* Quick check: Does any character need escaping? */
+  for (p = path; table[(unsigned char)*p]; ++p)
+    {}
+
+  /* No char to escape before EOS? */
+  if (*p == '\0')
+    return path;
+
+  /* We need to escape at least one character. */
+  len = strlen(p) + (p - path);
+  retstr = svn_stringbuf_create_ensure(len, pool);
+  for (i = p - path; i < len; i++)
     {
       c = (unsigned char)path[i];
       if (table[c])
@@ -941,10 +956,6 @@ uri_escape(const char *path, const char
       copied = i + 1;
     }
 
-  /* If we didn't encode anything, we don't need to duplicate the string. */
-  if (retstr->len == 0)
-    return path;
-
   /* Anything left to copy? */
   if (i - copied)
     svn_stringbuf_appendbytes(retstr, path + copied, i - copied);
@@ -971,7 +982,7 @@ svn_path_uri_encode(const char *path, ap
 }
 
 static const char iri_escape_chars[256] = {
-  1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1,
+  0, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1,
   1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1,
   1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1,
   1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1,
@@ -998,7 +1009,7 @@ svn_path_uri_from_iri(const char *iri, a
 }
 
 static const char uri_autoescape_chars[256] = {
-  1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1,
+  0, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1,
   1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1,
   0, 1, 0, 1, 1, 1, 1, 1,  1, 1, 1, 1, 1, 1, 1, 1,
   1, 1, 1, 1, 1, 1, 1, 1,  1, 1, 1, 1, 0, 1, 0, 1,

Modified: subversion/branches/move-tracking-2/subversion/libsvn_subr/sqlite.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_subr/sqlite.c?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_subr/sqlite.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_subr/sqlite.c Mon Oct 26 08:43:06 2015
@@ -1171,6 +1171,7 @@ svn_sqlite__open(svn_sqlite__db_t **db,
                  affects application(read: Subversion) performance/behavior. */
               "PRAGMA foreign_keys=OFF;"      /* SQLITE_DEFAULT_FOREIGN_KEYS*/
               "PRAGMA locking_mode = NORMAL;" /* SQLITE_DEFAULT_LOCKING_MODE */
+              /* Testing shows TRUNCATE is faster than DELETE on Windows. */
               "PRAGMA journal_mode = TRUNCATE;"
               ),
                 *db);

Modified: subversion/branches/move-tracking-2/subversion/libsvn_subr/stream.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_subr/stream.c?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_subr/stream.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_subr/stream.c Mon Oct 26 08:43:06 2015
@@ -42,6 +42,7 @@
 #include "svn_checksum.h"
 #include "svn_path.h"
 #include "svn_private_config.h"
+#include "svn_sorts.h"
 #include "private/svn_atomic.h"
 #include "private/svn_error_private.h"
 #include "private/svn_eol_private.h"
@@ -1480,32 +1481,44 @@ svn_stream_checksummed2(svn_stream_t *st
 
 /* Miscellaneous stream functions. */
 
+/*
+ * [JAF] By considering the buffer size doubling algorithm we use, I think
+ * the performance characteristics of this implementation are as follows:
+ *
+ * When the effective hint is big enough for the actual data, it uses
+ * minimal time and allocates space roughly equal to the effective hint.
+ * Otherwise, it incurs a time overhead for copying an additional 1x to 2x
+ * the actual length of data, and a space overhead of an additional 2x to
+ * 3x the actual length.
+ */
 svn_error_t *
-svn_stringbuf_from_stream(svn_stringbuf_t **str,
+svn_stringbuf_from_stream(svn_stringbuf_t **result,
                           svn_stream_t *stream,
                           apr_size_t len_hint,
                           apr_pool_t *result_pool)
 {
 #define MIN_READ_SIZE 64
-
-  apr_size_t to_read = 0;
   svn_stringbuf_t *text
-    = svn_stringbuf_create_ensure(len_hint + MIN_READ_SIZE,
+    = svn_stringbuf_create_ensure(MAX(len_hint + 1, MIN_READ_SIZE),
                                   result_pool);
 
-  do
+  while(TRUE)
     {
-      to_read = text->blocksize - 1 - text->len;
-      SVN_ERR(svn_stream_read_full(stream, text->data + text->len, &to_read));
-      text->len += to_read;
+      apr_size_t to_read = text->blocksize - 1 - text->len;
+      apr_size_t actually_read = to_read;
+
+      SVN_ERR(svn_stream_read_full(stream, text->data + text->len, &actually_read));
+      text->len += actually_read;
+
+      if (actually_read < to_read)
+        break;
 
-      if (to_read && text->blocksize < text->len + MIN_READ_SIZE)
+      if (text->blocksize < text->len + MIN_READ_SIZE)
         svn_stringbuf_ensure(text, text->blocksize * 2);
     }
-  while (to_read);
 
   text->data[text->len] = '\0';
-  *str = text;
+  *result = text;
 
   return SVN_NO_ERROR;
 }
@@ -1793,32 +1806,18 @@ svn_stream_for_stderr(svn_stream_t **err
 
 
 svn_error_t *
-svn_string_from_stream(svn_string_t **result,
-                       svn_stream_t *stream,
-                       apr_pool_t *result_pool,
-                       apr_pool_t *scratch_pool)
+svn_string_from_stream2(svn_string_t **result,
+                        svn_stream_t *stream,
+                        apr_size_t len_hint,
+                        apr_pool_t *result_pool)
 {
-  svn_stringbuf_t *work = svn_stringbuf_create_ensure(SVN__STREAM_CHUNK_SIZE,
-                                                      result_pool);
-  char *buffer = apr_palloc(scratch_pool, SVN__STREAM_CHUNK_SIZE);
+  svn_stringbuf_t *buf;
 
-  while (1)
-    {
-      apr_size_t len = SVN__STREAM_CHUNK_SIZE;
-
-      SVN_ERR(svn_stream_read_full(stream, buffer, &len));
-      svn_stringbuf_appendbytes(work, buffer, len);
-
-      if (len < SVN__STREAM_CHUNK_SIZE)
-        break;
-    }
+  SVN_ERR(svn_stringbuf_from_stream(&buf, stream, len_hint, result_pool));
+  *result = svn_stringbuf__morph_into_string(buf);
 
   SVN_ERR(svn_stream_close(stream));
 
-  *result = apr_palloc(result_pool, sizeof(**result));
-  (*result)->data = work->data;
-  (*result)->len = work->len;
-
   return SVN_NO_ERROR;
 }
 

Modified: subversion/branches/move-tracking-2/subversion/libsvn_wc/old-and-busted.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_wc/old-and-busted.c?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_wc/old-and-busted.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_wc/old-and-busted.c Mon Oct 26 08:43:06 2015
@@ -1203,7 +1203,8 @@ svn_wc__read_entries_old(apr_hash_t **en
   /* Open the entries file. */
   SVN_ERR(svn_wc__open_adm_stream(&stream, dir_abspath, SVN_WC__ADM_ENTRIES,
                                   scratch_pool, scratch_pool));
-  SVN_ERR(svn_string_from_stream(&buf, stream, scratch_pool, scratch_pool));
+  SVN_ERR(svn_string_from_stream2(&buf, stream, SVN__STREAM_CHUNK_SIZE,
+                                  scratch_pool));
 
   /* We own the returned data; it is modifiable, so cast away... */
   curp = (char *)buf->data;

Modified: subversion/branches/move-tracking-2/subversion/libsvn_wc/props.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_wc/props.c?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_wc/props.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_wc/props.c Mon Oct 26 08:43:06 2015
@@ -2170,11 +2170,8 @@ svn_wc_canonicalize_svn_prop(const svn_s
 
   /* Keep this static, it may get stored (for read-only purposes) in a
      hash that outlives this function. */
-  static const svn_string_t boolean_value =
-    {
-      SVN_PROP_BOOLEAN_TRUE,
-      sizeof(SVN_PROP_BOOLEAN_TRUE) - 1
-    };
+  static const svn_string_t boolean_value
+    = SVN__STATIC_STRING(SVN_PROP_BOOLEAN_TRUE);
 
   SVN_ERR(validate_prop_against_node_kind(propname, path, kind, pool));
 

Modified: subversion/branches/move-tracking-2/subversion/libsvn_wc/wc-queries.sql
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_wc/wc-queries.sql?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_wc/wc-queries.sql (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_wc/wc-queries.sql Mon Oct 26 08:43:06 2015
@@ -1286,7 +1286,10 @@ WHERE (wc_id = ?1 AND local_relpath = ?2
    OR (wc_id = ?1 AND IS_STRICT_DESCENDANT_OF(local_relpath, ?2))
 
 -- STMT_PRAGMA_LOCKING_MODE
-PRAGMA locking_mode = exclusive
+PRAGMA locking_mode = exclusive;
+/* Testing shows DELETE is faster than TRUNCATE on NFS and
+   exclusive-locking is mostly used on remote file systems. */
+PRAGMA journal_mode = DELETE
 
 /* ------------------------------------------------------------------------- */
 

Modified: subversion/branches/move-tracking-2/subversion/mod_dav_svn/merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/mod_dav_svn/merge.c?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/mod_dav_svn/merge.c (original)
+++ subversion/branches/move-tracking-2/subversion/mod_dav_svn/merge.c Mon Oct 26 08:43:06 2015
@@ -268,16 +268,16 @@ dav_svn__merge_response(ap_filter_t *out
 
 
   /* get the creationdate and creator-displayname of the new revision, too. */
-  serr = svn_fs_revision_prop(&creationdate, repos->fs, new_rev,
-                              SVN_PROP_REVISION_DATE, pool);
+  serr = svn_fs_revision_prop2(&creationdate, repos->fs, new_rev,
+                               SVN_PROP_REVISION_DATE, TRUE, pool, pool);
   if (serr != NULL)
     {
       return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
                                   "Could not get date of newest revision",
                                   repos->pool);
     }
-  serr = svn_fs_revision_prop(&creator_displayname, repos->fs, new_rev,
-                              SVN_PROP_REVISION_AUTHOR, pool);
+  serr = svn_fs_revision_prop2(&creator_displayname, repos->fs, new_rev,
+                               SVN_PROP_REVISION_AUTHOR, TRUE, pool, pool);
   if (serr != NULL)
     {
       return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,

Modified: subversion/branches/move-tracking-2/subversion/mod_dav_svn/repos.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/mod_dav_svn/repos.c?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/mod_dav_svn/repos.c (original)
+++ subversion/branches/move-tracking-2/subversion/mod_dav_svn/repos.c Mon Oct 26 08:43:06 2015
@@ -3035,8 +3035,9 @@ get_last_modified(const dav_resource *re
       return -1;
     }
 
-  if ((serr = svn_fs_revision_prop(&date_time, resource->info->repos->fs,
-                                   created_rev, "svn:date", resource->pool)))
+  if ((serr = svn_fs_revision_prop2(&date_time, resource->info->repos->fs,
+                                    created_rev, "svn:date", TRUE,
+                                    resource->pool, resource->pool)))
     {
       svn_error_clear(serr);
       return -1;

Modified: subversion/branches/move-tracking-2/subversion/mod_dav_svn/status.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/mod_dav_svn/status.c?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/mod_dav_svn/status.c (original)
+++ subversion/branches/move-tracking-2/subversion/mod_dav_svn/status.c Mon Oct 26 08:43:06 2015
@@ -29,6 +29,24 @@
 #include "private/svn_cache.h"
 #include "private/svn_fs_private.h"
 
+/* The apache headers define these and they conflict with our definitions. */
+#ifdef PACKAGE_BUGREPORT
+#undef PACKAGE_BUGREPORT
+#endif
+#ifdef PACKAGE_NAME
+#undef PACKAGE_NAME
+#endif
+#ifdef PACKAGE_STRING
+#undef PACKAGE_STRING
+#endif
+#ifdef PACKAGE_TARNAME
+#undef PACKAGE_TARNAME
+#endif
+#ifdef PACKAGE_VERSION
+#undef PACKAGE_VERSION
+#endif
+#include "svn_private_config.h"
+
 #ifndef DEFAULT_TIME_FORMAT
 #define DEFAULT_TIME_FORMAT "%Y-%m-%d %H:%M:%S %Z"
 #endif

Modified: subversion/branches/move-tracking-2/subversion/po/it.po
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/po/it.po?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/po/it.po (original)
+++ subversion/branches/move-tracking-2/subversion/po/it.po Mon Oct 26 08:43:06 2015
@@ -10283,17 +10283,17 @@ msgstr ""
 #: ../svn/tree-conflicts.c:107
 #, c-format
 msgid "local %s, incoming %s upon %s"
-msgstr ""
-
-#: ../svn/util.c:74
-#, c-format
-msgid ""
-"Committed revision %ld%s.\n"
-msgstr ""
-"Commit della Revisione %ld%s eseguito.\n"
-
-#: ../svn/util.c:78
-msgid " (the answer to life, the universe, and everything)"
+msgstr ""
+
+#: ../svn/util.c:74
+#, c-format
+msgid ""
+"Committed revision %ld%s.\n"
+msgstr ""
+"Commit della Revisione %ld%s eseguito.\n"
+
+#: ../svn/util.c:78
+msgid " (the answer to life, the universe, and everything)"
 msgstr ""
 
 #: ../svn/util.c:87

Modified: subversion/branches/move-tracking-2/subversion/po/ja.po
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/po/ja.po?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/po/ja.po [UTF-8] (original)
+++ subversion/branches/move-tracking-2/subversion/po/ja.po [UTF-8] Mon Oct 26 08:43:06 2015
@@ -10640,17 +10640,17 @@ msgstr ""
 #: ../svn/tree-conflicts.c:107
 #, c-format
 msgid "local %s, incoming %s upon %s"
-msgstr ""
-
-#: ../svn/util.c:74
-#, c-format
-msgid ""
-"Committed revision %ld%s.\n"
-msgstr ""
-"リビジョン %ld%s をコミットしました。\n"
-
-#: ../svn/util.c:78
-msgid " (the answer to life, the universe, and everything)"
+msgstr ""
+
+#: ../svn/util.c:74
+#, c-format
+msgid ""
+"Committed revision %ld%s.\n"
+msgstr ""
+"リビジョン %ld%s をコミットしました。\n"
+
+#: ../svn/util.c:78
+msgid " (the answer to life, the universe, and everything)"
 msgstr ""
 
 #: ../svn/util.c:87

Modified: subversion/branches/move-tracking-2/subversion/po/ko.po
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/po/ko.po?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/po/ko.po [UTF-8] (original)
+++ subversion/branches/move-tracking-2/subversion/po/ko.po [UTF-8] Mon Oct 26 08:43:06 2015
@@ -10527,14 +10527,14 @@ msgstr "업데이트 요약:\n"
 msgid "  Updated '%s' to r%ld.\n"
 msgstr "  '%s' 을(를) r%ld 로 업데이트함.\n"
 
-#: ../svn/util.c:75
-#, c-format
-msgid ""
-"Committed revision %ld%s.\n"
-msgstr ""
-"커밋된 리비전 %ld%s.\n"
-
-#: ../svn/util.c:79
+#: ../svn/util.c:75
+#, c-format
+msgid ""
+"Committed revision %ld%s.\n"
+msgstr ""
+"커밋된 리비전 %ld%s.\n"
+
+#: ../svn/util.c:79
 msgid " (the answer to life, the universe, and everything)"
 msgstr " (the answer to life, the universe, and everything)"
 

Modified: subversion/branches/move-tracking-2/subversion/po/zh_TW.po
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/po/zh_TW.po?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/po/zh_TW.po [UTF-8] (original)
+++ subversion/branches/move-tracking-2/subversion/po/zh_TW.po [UTF-8] Mon Oct 26 08:43:06 2015
@@ -10120,17 +10120,17 @@ msgstr ""
 #: ../svn/tree-conflicts.c:107
 #, c-format
 msgid "local %s, incoming %s upon %s"
-msgstr ""
-
-#: ../svn/util.c:74
-#, c-format
-msgid ""
-"Committed revision %ld%s.\n"
-msgstr ""
-"送交修訂版 %ld%s.\n"
-
-#: ../svn/util.c:78
-msgid " (the answer to life, the universe, and everything)"
+msgstr ""
+
+#: ../svn/util.c:74
+#, c-format
+msgid ""
+"Committed revision %ld%s.\n"
+msgstr ""
+"送交修訂版 %ld%s.\n"
+
+#: ../svn/util.c:78
+msgid " (the answer to life, the universe, and everything)"
 msgstr ""
 
 #: ../svn/util.c:87

Modified: subversion/branches/move-tracking-2/subversion/svnbench/null-log-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/svnbench/null-log-cmd.c?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/svnbench/null-log-cmd.c (original)
+++ subversion/branches/move-tracking-2/subversion/svnbench/null-log-cmd.c Mon Oct 26 08:43:06 2015
@@ -198,10 +198,14 @@ svn_cl__null_log(apr_getopt_t *os,
   lb.quiet = opt_state->quiet;
 
   revprops = apr_array_make(pool, 3, sizeof(char *));
-  APR_ARRAY_PUSH(revprops, const char *) = SVN_PROP_REVISION_AUTHOR;
-  APR_ARRAY_PUSH(revprops, const char *) = SVN_PROP_REVISION_DATE;
-  if (!opt_state->quiet)
-    APR_ARRAY_PUSH(revprops, const char *) = SVN_PROP_REVISION_LOG;
+  if (!opt_state->no_revprops)
+    {
+      APR_ARRAY_PUSH(revprops, const char *) = SVN_PROP_REVISION_AUTHOR;
+      APR_ARRAY_PUSH(revprops, const char *) = SVN_PROP_REVISION_DATE;
+      if (!opt_state->quiet)
+        APR_ARRAY_PUSH(revprops, const char *) = SVN_PROP_REVISION_LOG;
+    }
+
   SVN_ERR(svn_client_log5(targets,
                           &target_peg_revision,
                           opt_state->revision_ranges,

Modified: subversion/branches/move-tracking-2/subversion/svnserve/serve.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/svnserve/serve.c?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/svnserve/serve.c (original)
+++ subversion/branches/move-tracking-2/subversion/svnserve/serve.c Mon Oct 26 08:43:06 2015
@@ -839,7 +839,7 @@ static svn_error_t *set_path(svn_ra_svn_
   svn_depth_t depth = svn_depth_infinity;
   svn_boolean_t start_empty;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "crb?(?c)?w",
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "crb?(?c)?w",
                                   &path, &rev, &start_empty, &lock_token,
                                   &depth_word));
   if (depth_word)
@@ -862,7 +862,7 @@ static svn_error_t *delete_path(svn_ra_s
   report_driver_baton_t *b = baton;
   const char *path;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c", &path));
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "c", &path));
   path = svn_relpath_canonicalize(path, pool);
   if (!b->err)
     b->err = svn_repos_delete_path(b->report_baton, path, pool);
@@ -879,7 +879,7 @@ static svn_error_t *link_path(svn_ra_svn
   /* Default to infinity, for old clients that don't send depth. */
   svn_depth_t depth = svn_depth_infinity;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "ccrb?(?c)?w",
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "ccrb?(?c)?w",
                                  &path, &url, &rev, &start_empty,
                                  &lock_token, &depth_word));
 
@@ -1105,7 +1105,7 @@ reparent(svn_ra_svn_conn_t *conn,
   const char *url;
   const char *fs_path;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c", &url));
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "c", &url));
   url = svn_uri_canonicalize(url, pool);
   SVN_ERR(trivial_auth_request(conn, pool, b));
   SVN_CMD_ERR(get_fs_path(svn_path_uri_decode(b->repository->repos_url, pool),
@@ -1145,7 +1145,7 @@ get_dated_rev(svn_ra_svn_conn_t *conn,
   apr_time_t tm;
   const char *timestr;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c", &timestr));
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "c", &timestr));
   SVN_ERR(log_command(b, conn, pool, "get-dated-rev %s", timestr));
 
   SVN_ERR(trivial_auth_request(conn, pool, b));
@@ -1197,7 +1197,7 @@ change_rev_prop2(svn_ra_svn_conn_t *conn
   svn_string_t *old_value;
   svn_boolean_t dont_care;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "rc(?s)(b?s)",
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "rc(?s)(b?s)",
                                   &rev, &name, &value,
                                   &dont_care, &old_value));
 
@@ -1236,7 +1236,7 @@ change_rev_prop(svn_ra_svn_conn_t *conn,
 
   /* Because the revprop value was at one time mandatory, the usual
      optional element pattern "(?s)" isn't used. */
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "rc?s", &rev, &name, &value));
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "rc?s", &rev, &name, &value));
 
   SVN_ERR(do_change_rev_prop(conn, b, rev, name, NULL, value, pool));
 
@@ -1257,7 +1257,7 @@ rev_proplist(svn_ra_svn_conn_t *conn,
   ab.server = b;
   ab.conn = conn;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "r", &rev));
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "r", &rev));
   SVN_ERR(log_command(b, conn, pool, "%s", svn_log__rev_proplist(rev, pool)));
 
   SVN_ERR(trivial_auth_request(conn, pool, b));
@@ -1286,7 +1286,7 @@ rev_prop(svn_ra_svn_conn_t *conn,
   ab.server = b;
   ab.conn = conn;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "rc", &rev, &name));
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "rc", &rev, &name));
   SVN_ERR(log_command(b, conn, pool, "%s",
                       svn_log__rev_prop(rev, name, pool)));
 
@@ -1455,7 +1455,7 @@ commit(svn_ra_svn_conn_t *conn,
     {
       /* Clients before 1.2 don't send lock-tokens, keep-locks,
          and rev-props fields. */
-      SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c", &log_msg));
+      SVN_ERR(svn_ra_svn__parse_tuple(params, "c", &log_msg));
       lock_tokens = NULL;
       keep_locks = TRUE;
       revprop_list = NULL;
@@ -1463,7 +1463,7 @@ commit(svn_ra_svn_conn_t *conn,
   else
     {
       /* Clients before 1.5 don't send the rev-props field. */
-      SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "clb?l", &log_msg,
+      SVN_ERR(svn_ra_svn__parse_tuple(params, "clb?l", &log_msg,
                                       &lock_tokens, &keep_locks,
                                       &revprop_list));
     }
@@ -1568,7 +1568,7 @@ get_file(svn_ra_svn_conn_t *conn,
   ab.conn = conn;
 
   /* Parse arguments. */
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c(?r)bb?B", &path, &rev,
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "c(?r)bb?B", &path, &rev,
                                   &want_props, &want_contents,
                                   &wants_inherited_props));
 
@@ -1674,6 +1674,19 @@ get_dir(svn_ra_svn_conn_t *conn,
         svn_ra_svn__list_t *params,
         void *baton)
 {
+  static const svn_string_t str_kind
+    = SVN__STATIC_STRING(SVN_RA_SVN_DIRENT_KIND);
+  static const svn_string_t str_size
+    = SVN__STATIC_STRING(SVN_RA_SVN_DIRENT_SIZE);
+  static const svn_string_t str_has_props
+    = SVN__STATIC_STRING(SVN_RA_SVN_DIRENT_HAS_PROPS);
+  static const svn_string_t str_created_rev
+    = SVN__STATIC_STRING(SVN_RA_SVN_DIRENT_CREATED_REV);
+  static const svn_string_t str_time
+    = SVN__STATIC_STRING(SVN_RA_SVN_DIRENT_TIME);
+  static const svn_string_t str_last_author
+    = SVN__STATIC_STRING(SVN_RA_SVN_DIRENT_LAST_AUTHOR);
+
   server_baton_t *b = baton;
   const char *path, *full_path;
   svn_revnum_t rev;
@@ -1693,7 +1706,7 @@ get_dir(svn_ra_svn_conn_t *conn,
   ab.server = b;
   ab.conn = conn;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c(?r)bb?l?B", &path, &rev,
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "c(?r)bb?l?B", &path, &rev,
                                   &want_props, &want_contents,
                                   &dirent_fields_list,
                                   &wants_inherited_props));
@@ -1717,17 +1730,17 @@ get_dir(svn_ra_svn_conn_t *conn,
             return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
                                     "Dirent field not a string");
 
-          if (strcmp(SVN_RA_SVN_DIRENT_KIND, elt->u.word) == 0)
+          if (svn_string_compare(&str_kind, &elt->u.word))
             dirent_fields |= SVN_DIRENT_KIND;
-          else if (strcmp(SVN_RA_SVN_DIRENT_SIZE, elt->u.word) == 0)
+          else if (svn_string_compare(&str_size, &elt->u.word))
             dirent_fields |= SVN_DIRENT_SIZE;
-          else if (strcmp(SVN_RA_SVN_DIRENT_HAS_PROPS, elt->u.word) == 0)
+          else if (svn_string_compare(&str_has_props, &elt->u.word))
             dirent_fields |= SVN_DIRENT_HAS_PROPS;
-          else if (strcmp(SVN_RA_SVN_DIRENT_CREATED_REV, elt->u.word) == 0)
+          else if (svn_string_compare(&str_created_rev, &elt->u.word))
             dirent_fields |= SVN_DIRENT_CREATED_REV;
-          else if (strcmp(SVN_RA_SVN_DIRENT_TIME, elt->u.word) == 0)
+          else if (svn_string_compare(&str_time, &elt->u.word))
             dirent_fields |= SVN_DIRENT_TIME;
-          else if (strcmp(SVN_RA_SVN_DIRENT_LAST_AUTHOR, elt->u.word) == 0)
+          else if (svn_string_compare(&str_last_author, &elt->u.word))
             dirent_fields |= SVN_DIRENT_LAST_AUTHOR;
         }
     }
@@ -1890,7 +1903,7 @@ update(svn_ra_svn_conn_t *conn,
   svn_boolean_t is_checkout;
 
   /* Parse the arguments. */
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "(?r)cb?w3?3", &rev, &target,
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "(?r)cb?w3?3", &rev, &target,
                                   &recurse, &depth_word,
                                   &send_copyfrom_args, &ignore_ancestry));
   target = svn_relpath_canonicalize(target, pool);
@@ -1948,7 +1961,7 @@ switch_cmd(svn_ra_svn_conn_t *conn,
   svn_tristate_t ignore_ancestry; /* Optional; default TRUE */
 
   /* Parse the arguments. */
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "(?r)cbc?w?33", &rev, &target,
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "(?r)cbc?w?33", &rev, &target,
                                   &recurse, &switch_url, &depth_word,
                                   &send_copyfrom_args, &ignore_ancestry));
   target = svn_relpath_canonicalize(target, pool);
@@ -1998,7 +2011,7 @@ status(svn_ra_svn_conn_t *conn,
   svn_depth_t depth = svn_depth_unknown;
 
   /* Parse the arguments. */
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "cb?(?r)?w",
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "cb?(?r)?w",
                                   &target, &recurse, &rev, &depth_word));
   target = svn_relpath_canonicalize(target, pool);
 
@@ -2041,14 +2054,14 @@ diff(svn_ra_svn_conn_t *conn,
   if (params->nelts == 5)
     {
       /* Clients before 1.4 don't send the text_deltas boolean or depth. */
-      SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "(?r)cbbc", &rev, &target,
+      SVN_ERR(svn_ra_svn__parse_tuple(params, "(?r)cbbc", &rev, &target,
                                       &recurse, &ignore_ancestry, &versus_url));
       text_deltas = TRUE;
       depth_word = NULL;
     }
   else
     {
-      SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "(?r)cbbcb?w",
+      SVN_ERR(svn_ra_svn__parse_tuple(params, "(?r)cbbcb?w",
                                       &rev, &target, &recurse,
                                       &ignore_ancestry, &versus_url,
                                       &text_deltas, &depth_word));
@@ -2113,7 +2126,7 @@ get_mergeinfo(svn_ra_svn_conn_t *conn,
   ab.server = b;
   ab.conn = conn;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "l(?r)wb", &paths, &rev,
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "l(?r)wb", &paths, &rev,
                                   &inherit_word, &include_descendants));
   inherit = svn_inheritance_from_word(inherit_word);
 
@@ -2273,7 +2286,7 @@ log_cmd(svn_ra_svn_conn_t *conn,
   ab.server = b;
   ab.conn = conn;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "l(?r)(?r)bb?n?Bwl", &paths,
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "l(?r)(?r)bb?n?Bwl", &paths,
                                   &start_rev, &end_rev, &send_changed_paths,
                                   &strict_node, &limit,
                                   &include_merged_revs_param,
@@ -2369,7 +2382,7 @@ check_path(svn_ra_svn_conn_t *conn,
   svn_fs_root_t *root;
   svn_node_kind_t kind;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c(?r)", &path, &rev));
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "c(?r)", &path, &rev));
   full_path = svn_fspath__join(b->repository->fs_path->data,
                                svn_relpath_canonicalize(path, pool), pool);
 
@@ -2402,7 +2415,7 @@ stat_cmd(svn_ra_svn_conn_t *conn,
   svn_fs_root_t *root;
   svn_dirent_t *dirent;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c(?r)", &path, &rev));
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "c(?r)", &path, &rev));
   full_path = svn_fspath__join(b->repository->fs_path->data,
                                svn_relpath_canonicalize(path, pool), pool);
 
@@ -2463,7 +2476,7 @@ get_locations(svn_ra_svn_conn_t *conn,
   ab.conn = conn;
 
   /* Parse the arguments. */
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "crl", &relative_path,
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "crl", &relative_path,
                                   &peg_revision,
                                   &loc_revs_proto));
   relative_path = svn_relpath_canonicalize(relative_path, pool);
@@ -2560,7 +2573,7 @@ get_location_segments(svn_ra_svn_conn_t
   ab.conn = conn;
 
   /* Parse the arguments. */
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c(?r)(?r)(?r)",
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "c(?r)(?r)(?r)",
                                   &relative_path, &peg_revision,
                                   &start_rev, &end_rev));
   relative_path = svn_relpath_canonicalize(relative_path, pool);
@@ -2729,7 +2742,7 @@ get_file_revs(svn_ra_svn_conn_t *conn,
   ab.conn = conn;
 
   /* Parse arguments. */
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c(?r)(?r)?B",
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "c(?r)(?r)?B",
                                   &path, &start_rev, &end_rev,
                                   &include_merged_revs_param));
   path = svn_relpath_canonicalize(path, pool);
@@ -2779,7 +2792,7 @@ lock(svn_ra_svn_conn_t *conn,
   svn_revnum_t current_rev;
   svn_lock_t *l;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c(?c)b(?r)", &path, &comment,
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "c(?c)b(?r)", &path, &comment,
                                   &steal_lock, &current_rev));
   full_path = svn_fspath__join(b->repository->fs_path->data,
                                svn_relpath_canonicalize(path, pool), pool);
@@ -2860,7 +2873,7 @@ lock_many(svn_ra_svn_conn_t *conn,
   apr_hash_index_t *hi;
   struct lock_many_baton_t lmb;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "(?c)bl", &comment, &steal_lock,
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "(?c)bl", &comment, &steal_lock,
                                   &path_revs));
 
   subpool = svn_pool_create(pool);
@@ -2885,7 +2898,7 @@ lock_many(svn_ra_svn_conn_t *conn,
         return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
                                 "Lock requests should be list of lists");
 
-      SVN_ERR(svn_ra_svn__parse_tuple(&item->u.list, subpool, "c(?r)", &path,
+      SVN_ERR(svn_ra_svn__parse_tuple(&item->u.list, "c(?r)", &path,
                                       &current_rev));
 
       full_path = svn_fspath__join(b->repository->fs_path->data,
@@ -2944,7 +2957,7 @@ lock_many(svn_ra_svn_conn_t *conn,
 
       svn_pool_clear(subpool);
 
-      write_err = svn_ra_svn__parse_tuple(&item->u.list, subpool, "c(?r)",
+      write_err = svn_ra_svn__parse_tuple(&item->u.list, "c(?r)",
                                           &path, &current_rev);
       if (write_err)
         break;
@@ -3009,7 +3022,7 @@ unlock(svn_ra_svn_conn_t *conn,
   const char *path, *token, *full_path;
   svn_boolean_t break_lock;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c(?c)b", &path, &token,
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "c(?c)b", &path, &token,
                                  &break_lock));
 
   full_path = svn_fspath__join(b->repository->fs_path->data,
@@ -3046,8 +3059,7 @@ unlock_many(svn_ra_svn_conn_t *conn,
   apr_hash_index_t *hi;
   struct lock_many_baton_t lmb;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "bl", &break_lock,
-                                  &unlock_tokens));
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "bl", &break_lock, &unlock_tokens));
 
   /* Username required unless break_lock was specified. */
   SVN_ERR(must_have_access(conn, pool, b, svn_authz_write, NULL, ! break_lock));
@@ -3066,7 +3078,7 @@ unlock_many(svn_ra_svn_conn_t *conn,
         return svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
                                 "Unlock request should be a list of lists");
 
-      SVN_ERR(svn_ra_svn__parse_tuple(&item->u.list, subpool, "c(?c)", &path,
+      SVN_ERR(svn_ra_svn__parse_tuple(&item->u.list, "c(?c)", &path,
                                       &token));
       if (!token)
         token = "";
@@ -3124,7 +3136,7 @@ unlock_many(svn_ra_svn_conn_t *conn,
 
       svn_pool_clear(subpool);
 
-      write_err = svn_ra_svn__parse_tuple(&item->u.list, subpool, "c(?c)",
+      write_err = svn_ra_svn__parse_tuple(&item->u.list, "c(?c)",
                                           &path, &token);
       if (write_err)
         break;
@@ -3183,7 +3195,7 @@ get_lock(svn_ra_svn_conn_t *conn,
   const char *full_path;
   svn_lock_t *l;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c", &path));
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "c", &path));
 
   full_path = svn_fspath__join(b->repository->fs_path->data,
                                svn_relpath_canonicalize(path, pool), pool);
@@ -3222,7 +3234,7 @@ get_locks(svn_ra_svn_conn_t *conn,
   ab.server = b;
   ab.conn = conn;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "c?(?w)", &path, &depth_word));
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "c?(?w)", &path, &depth_word));
 
   depth = depth_word ? svn_depth_from_word(depth_word) : svn_depth_infinity;
   if ((depth != svn_depth_empty) &&
@@ -3305,7 +3317,7 @@ replay(svn_ra_svn_conn_t *conn,
   svn_boolean_t send_deltas;
   server_baton_t *b = baton;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "rrb", &rev, &low_water_mark,
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "rrb", &rev, &low_water_mark,
                                  &send_deltas));
 
   SVN_ERR(trivial_auth_request(conn, pool, b));
@@ -3333,7 +3345,7 @@ replay_range(svn_ra_svn_conn_t *conn,
   ab.server = b;
   ab.conn = conn;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "rrrb", &start_rev,
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "rrrb", &start_rev,
                                  &end_rev, &low_water_mark,
                                  &send_deltas));
 
@@ -3378,7 +3390,7 @@ get_deleted_rev(svn_ra_svn_conn_t *conn,
   svn_revnum_t end_revision;
   svn_revnum_t revision_deleted;
 
-  SVN_ERR(svn_ra_svn__parse_tuple(params, pool, "crr",
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "crr",
                                  &path, &peg_revision, &end_revision));
   full_path = svn_fspath__join(b->repository->fs_path->data,
                                svn_relpath_canonicalize(path, pool), pool);
@@ -3410,7 +3422,7 @@ get_inherited_props(svn_ra_svn_conn_t *c
   ab.conn = conn;
 
   /* Parse arguments. */
-  SVN_ERR(svn_ra_svn__parse_tuple(params, iterpool, "c(?r)", &path, &rev));
+  SVN_ERR(svn_ra_svn__parse_tuple(params, "c(?r)", &path, &rev));
 
   full_path = svn_fspath__join(b->repository->fs_path->data,
                                svn_relpath_canonicalize(path, iterpool),
@@ -3952,9 +3964,12 @@ construct_server_baton(server_baton_t **
                                                  sizeof(const char *));
     for (i = 0; i < caplist->nelts; i++)
       {
+        static const svn_string_t str_cap_mergeinfo
+          = SVN__STATIC_STRING(SVN_RA_SVN_CAP_MERGEINFO);
+
         item = &SVN_RA_SVN__LIST_ITEM(caplist, i);
         /* ra_svn_set_capabilities() already type-checked for us */
-        if (strcmp(item->u.word, SVN_RA_SVN_CAP_MERGEINFO) == 0)
+        if (svn_string_compare(&item->u.word, &str_cap_mergeinfo))
           {
             APR_ARRAY_PUSH(b->repository->capabilities, const char *)
               = SVN_RA_CAPABILITY_MERGEINFO;
@@ -3962,7 +3977,7 @@ construct_server_baton(server_baton_t **
         /* Save for operational log. */
         if (cap_log->len > 0)
           svn_stringbuf_appendcstr(cap_log, " ");
-        svn_stringbuf_appendcstr(cap_log, item->u.word);
+        svn_stringbuf_appendcstr(cap_log, item->u.word.data);
       }
   }
 

Modified: subversion/branches/move-tracking-2/subversion/tests/cmdline/davautocheck.sh
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/tests/cmdline/davautocheck.sh?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/tests/cmdline/davautocheck.sh (original)
+++ subversion/branches/move-tracking-2/subversion/tests/cmdline/davautocheck.sh Mon Oct 26 08:43:06 2015
@@ -163,7 +163,8 @@ get_prog_name() {
 }
 
 # Don't assume sbin is in the PATH.
-# ### Presumably this is used to locate /usr/sbin/apxs or /usr/sbin/apache2
+# This is used to locate apxs when the script is invoked manually; when
+# invoked by 'make davautocheck' the APXS environment variable is set.
 PATH="$PATH:/usr/sbin:/usr/local/sbin"
 
 # Find the source and build directories. The build dir can be found if it is

Modified: subversion/branches/move-tracking-2/subversion/tests/cmdline/svntest/main.py
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/tests/cmdline/svntest/main.py?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/tests/cmdline/svntest/main.py (original)
+++ subversion/branches/move-tracking-2/subversion/tests/cmdline/svntest/main.py Mon Oct 26 08:43:06 2015
@@ -681,8 +681,7 @@ V %d
 %s
 END
 """ % (len(cert_rep), cert_rep, len(netloc_url), netloc_url)
-
-  file_write(md5_file, md5_file_contents)
+  file_write(md5_file, md5_file_contents, mode='wb')
 
 def copy_trust(dst_cfgdir, src_cfgdir):
   """Copy svn.ssl.server files from one config dir to another.

Modified: subversion/branches/move-tracking-2/subversion/tests/libsvn_fs/fs-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/tests/libsvn_fs/fs-test.c?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/tests/libsvn_fs/fs-test.c (original)
+++ subversion/branches/move-tracking-2/subversion/tests/libsvn_fs/fs-test.c Mon Oct 26 08:43:06 2015
@@ -334,6 +334,7 @@ txn_names_are_not_reused_helper1(apr_has
   apr_hash_index_t *hi;
   const int N = 10;
   int i;
+  apr_pool_t *subpool = svn_pool_create(pool);
 
   *txn_names = apr_hash_make(pool);
 
@@ -343,7 +344,8 @@ txn_names_are_not_reused_helper1(apr_has
     {
       svn_fs_txn_t *txn;
       const char *name;
-      SVN_ERR(svn_fs_begin_txn(&txn, fs, 0, pool));
+
+      SVN_ERR(svn_fs_begin_txn(&txn, fs, 0, subpool));
       SVN_ERR(svn_fs_txn_name(&name, txn, pool));
       if (apr_hash_get(*txn_names, name, APR_HASH_KEY_STRING) != NULL)
         return svn_error_createf(SVN_ERR_FS_GENERAL, NULL,
@@ -367,6 +369,7 @@ txn_names_are_not_reused_helper1(apr_has
                              "created %d transactions, but only aborted %d",
                              N, i);
 
+  svn_pool_destroy(subpool);
   return SVN_NO_ERROR;
 }
 
@@ -1018,8 +1021,9 @@ check_entry(svn_fs_root_t *root,
 {
   apr_hash_t *entries;
   svn_fs_dirent_t *ent;
+  apr_pool_t *subpool = svn_pool_create(pool);
 
-  SVN_ERR(svn_fs_dir_entries(&entries, root, path, pool));
+  SVN_ERR(svn_fs_dir_entries(&entries, root, path, subpool));
   ent = apr_hash_get(entries, name, APR_HASH_KEY_STRING);
 
   if (ent)
@@ -1027,6 +1031,7 @@ check_entry(svn_fs_root_t *root,
   else
     *present = FALSE;
 
+  svn_pool_destroy(subpool);
   return SVN_NO_ERROR;
 }
 
@@ -4761,6 +4766,7 @@ closest_copy_test(const svn_test_opts_t
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, spool));
   SVN_ERR(svn_test__create_greek_tree(txn_root, spool));
   SVN_ERR(test_commit_txn(&after_rev, txn, NULL, spool));
+  svn_pool_clear(spool);
   SVN_ERR(svn_fs_revision_root(&rev_root, fs, after_rev, spool));
 
   /* Copy A to Z, and commit. */
@@ -4768,6 +4774,7 @@ closest_copy_test(const svn_test_opts_t
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, spool));
   SVN_ERR(svn_fs_copy(rev_root, "A", txn_root, "Z", spool));
   SVN_ERR(test_commit_txn(&after_rev, txn, NULL, spool));
+  svn_pool_clear(spool);
   SVN_ERR(svn_fs_revision_root(&rev_root, fs, after_rev, spool));
 
   /* Anything under Z should have a closest copy pair of ("/Z", 2), so
@@ -4804,6 +4811,7 @@ closest_copy_test(const svn_test_opts_t
   SVN_ERR(svn_fs_make_file(txn_root, "Z/t", pool));
   SVN_ERR(svn_fs_make_file(txn_root, "Z2/D/H2/t", pool));
   SVN_ERR(test_commit_txn(&after_rev, txn, NULL, spool));
+  svn_pool_clear(spool);
   SVN_ERR(svn_fs_revision_root(&rev_root, fs, after_rev, spool));
 
   /* Okay, just for kicks, let's modify Z2/D/H2/t.  Shouldn't affect
@@ -4813,6 +4821,7 @@ closest_copy_test(const svn_test_opts_t
   SVN_ERR(svn_test__set_file_contents(txn_root, "Z2/D/H2/t",
                                       "Edited text.", spool));
   SVN_ERR(test_commit_txn(&after_rev, txn, NULL, spool));
+  svn_pool_clear(spool);
   SVN_ERR(svn_fs_revision_root(&rev_root, fs, after_rev, spool));
 
   /* Now, we expect Z2/D/H2 to have a closest copy of ("/Z2/D/H2", 3)
@@ -6496,6 +6505,7 @@ test_delta_file_stream(const svn_test_op
   svn_fs_txn_t *txn;
   svn_fs_root_t *txn_root, *root1, *root2;
   svn_revnum_t rev;
+  apr_pool_t *subpool = svn_pool_create(pool);
 
   const char *old_content = "some content";
   const char *new_content = "some more content";
@@ -6527,52 +6537,56 @@ test_delta_file_stream(const svn_test_op
 
   /* Test 1: Get delta against empty target. */
   SVN_ERR(svn_fs_get_file_delta_stream(&delta_stream,
-                                       NULL, NULL, root1, "foo", pool));
+                                       NULL, NULL, root1, "foo", subpool));
 
   svn_stringbuf_setempty(source);
   svn_stringbuf_setempty(dest);
 
-  svn_txdelta_apply(svn_stream_from_stringbuf(source, pool),
-                    svn_stream_from_stringbuf(dest, pool),
-                    NULL, NULL, pool, &delta_handler, &delta_baton);
+  svn_txdelta_apply(svn_stream_from_stringbuf(source, subpool),
+                    svn_stream_from_stringbuf(dest, subpool),
+                    NULL, NULL, subpool, &delta_handler, &delta_baton);
   SVN_ERR(svn_txdelta_send_txstream(delta_stream,
                                     delta_handler,
                                     delta_baton,
-                                    pool));
+                                    subpool));
   SVN_TEST_STRING_ASSERT(old_content, dest->data);
+  svn_pool_clear(subpool);
 
   /* Test 2: Get delta against previous version. */
   SVN_ERR(svn_fs_get_file_delta_stream(&delta_stream,
-                                       root1, "foo", root2, "foo", pool));
+                                       root1, "foo", root2, "foo", subpool));
 
   svn_stringbuf_set(source, old_content);
   svn_stringbuf_setempty(dest);
 
-  svn_txdelta_apply(svn_stream_from_stringbuf(source, pool),
-                    svn_stream_from_stringbuf(dest, pool),
-                    NULL, NULL, pool, &delta_handler, &delta_baton);
+  svn_txdelta_apply(svn_stream_from_stringbuf(source, subpool),
+                    svn_stream_from_stringbuf(dest, subpool),
+                    NULL, NULL, subpool, &delta_handler, &delta_baton);
   SVN_ERR(svn_txdelta_send_txstream(delta_stream,
                                     delta_handler,
                                     delta_baton,
-                                    pool));
+                                    subpool));
   SVN_TEST_STRING_ASSERT(new_content, dest->data);
+  svn_pool_clear(subpool);
 
   /* Test 3: Get reverse delta. */
   SVN_ERR(svn_fs_get_file_delta_stream(&delta_stream,
-                                       root2, "foo", root1, "foo", pool));
+                                       root2, "foo", root1, "foo", subpool));
 
   svn_stringbuf_set(source, new_content);
   svn_stringbuf_setempty(dest);
 
-  svn_txdelta_apply(svn_stream_from_stringbuf(source, pool),
-                    svn_stream_from_stringbuf(dest, pool),
-                    NULL, NULL, pool, &delta_handler, &delta_baton);
+  svn_txdelta_apply(svn_stream_from_stringbuf(source, subpool),
+                    svn_stream_from_stringbuf(dest, subpool),
+                    NULL, NULL, subpool, &delta_handler, &delta_baton);
   SVN_ERR(svn_txdelta_send_txstream(delta_stream,
                                     delta_handler,
                                     delta_baton,
-                                    pool));
+                                    subpool));
   SVN_TEST_STRING_ASSERT(old_content, dest->data);
 
+  svn_pool_destroy(subpool);
+
   return SVN_NO_ERROR;
 }
 

Modified: subversion/branches/move-tracking-2/subversion/tests/svn_test_fs.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/tests/svn_test_fs.c?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/tests/svn_test_fs.c (original)
+++ subversion/branches/move-tracking-2/subversion/tests/svn_test_fs.c Mon Oct 26 08:43:06 2015
@@ -364,15 +364,17 @@ svn_test__set_file_contents(svn_fs_root_
   svn_txdelta_window_handler_t consumer_func;
   void *consumer_baton;
   svn_string_t string;
+  apr_pool_t *subpool = svn_pool_create(pool);
 
   SVN_ERR(svn_fs_apply_textdelta(&consumer_func, &consumer_baton,
-                                 root, path, NULL, NULL, pool));
+                                 root, path, NULL, NULL, subpool));
 
   string.data = contents;
   string.len = strlen(contents);
   SVN_ERR(svn_txdelta_send_string(&string, consumer_func,
-                                  consumer_baton, pool));
+                                  consumer_baton, subpool));
 
+  svn_pool_destroy(subpool);
   return SVN_NO_ERROR;
 }
 
@@ -847,6 +849,7 @@ svn_test__create_blame_repository(svn_re
   svn_fs_txn_t *txn;
   svn_fs_root_t *txn_root, *revision_root;
   svn_revnum_t youngest_rev = 0;
+  apr_pool_t *subpool = svn_pool_create(pool);
 
   /* Create a filesystem and repository. */
   SVN_ERR(svn_test__create_repos(&repos, test_name,
@@ -857,87 +860,96 @@ svn_test__create_blame_repository(svn_re
 
   /* Revision 1:  Add trunk, tags, branches. */
   SVN_ERR(svn_repos_fs_begin_txn_for_commit(&txn, repos, youngest_rev,
-                                            "initial", "log msg", pool));
-  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
-  SVN_ERR(svn_fs_make_dir(txn_root, "trunk", pool));
-  SVN_ERR(svn_fs_make_dir(txn_root, "tags", pool));
-  SVN_ERR(svn_fs_make_dir(txn_root, "branches", pool));
-  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+                                            "initial", "log msg", subpool));
+  SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
+  SVN_ERR(svn_fs_make_dir(txn_root, "trunk", subpool));
+  SVN_ERR(svn_fs_make_dir(txn_root, "tags", subpool));
+  SVN_ERR(svn_fs_make_dir(txn_root, "branches", subpool));
+  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
   SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
+  svn_pool_clear(subpool);
 
   /* Revision 2:  Add the Greek tree on the trunk. */
   SVN_ERR(svn_repos_fs_begin_txn_for_commit(&txn, repos, youngest_rev,
-                                            "initial", "log msg", pool));
-  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
-  SVN_ERR(svn_test__create_greek_tree_at(txn_root, "trunk", pool));
-  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+                                            "initial", "log msg", subpool));
+  SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
+  SVN_ERR(svn_test__create_greek_tree_at(txn_root, "trunk", subpool));
+  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
   SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
+  svn_pool_clear(subpool);
 
   /* Revision 3:  Tweak trunk/A/mu. */
   SVN_ERR(svn_repos_fs_begin_txn_for_commit(&txn, repos, youngest_rev,
-                                            "user-trunk", "log msg", pool));
-  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+                                            "user-trunk", "log msg", subpool));
+  SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "trunk/A/mu",
-                                      "A\nB\nC\nD\nE\nF\nG\nH\nI", pool));
-  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+                                      "A\nB\nC\nD\nE\nF\nG\nH\nI", subpool));
+  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
   SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
+  svn_pool_clear(subpool);
 
   /* Revision 4:  Copy trunk to branches/1.0.x. */
   SVN_ERR(svn_repos_fs_begin_txn_for_commit(&txn, repos, youngest_rev,
-                                            "copy", "log msg", pool));
-  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
-  SVN_ERR(svn_fs_revision_root(&revision_root, fs, youngest_rev, pool));
+                                            "copy", "log msg", subpool));
+  SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
+  SVN_ERR(svn_fs_revision_root(&revision_root, fs, youngest_rev, subpool));
   SVN_ERR(svn_fs_copy(revision_root, "trunk",
                       txn_root, "branches/1.0.x",
-                      pool));
-  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+                      subpool));
+  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
   SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
+  svn_pool_clear(subpool);
 
   /* Revision 5:  Tweak trunk/A/mu. */
   SVN_ERR(svn_repos_fs_begin_txn_for_commit(&txn, repos, youngest_rev,
-                                            "user-trunk", "log msg", pool));
-  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+                                            "user-trunk", "log msg", subpool));
+  SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "trunk/A/mu",
                                       "A\nB\nC -- trunk edit\nD\nE\nF\nG\nH\nI",
-                                      pool));
-  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+                                      subpool));
+  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
   SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
+  svn_pool_clear(subpool);
 
   /* Revision 6:  Tweak branches/1.0.x/A/mu. */
   SVN_ERR(svn_repos_fs_begin_txn_for_commit(&txn, repos, youngest_rev,
-                                            "user-branch", "log msg", pool));
-  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+                                            "user-branch", "log msg", subpool));
+  SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "branches/1.0.x/A/mu",
                                       "A\nB\nC\nD -- branch edit\nE\nF\nG\nH\nI",
-                                      pool));
-  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+                                      subpool));
+  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
   SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
+  svn_pool_clear(subpool);
 
   /* Revision 7:  Merge trunk to branch. */
   SVN_ERR(svn_repos_fs_begin_txn_for_commit(&txn, repos, youngest_rev,
-                                            "user-merge1", "log msg", pool));
-  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+                                            "user-merge1", "log msg", subpool));
+  SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "branches/1.0.x/A/mu",
                                       "A\nB\nC -- trunk edit\nD -- branch edit"
-                                      "\nE\nF\nG\nH\nI", pool));
+                                      "\nE\nF\nG\nH\nI", subpool));
   SVN_ERR(svn_fs_change_node_prop(txn_root, "/branches/1.0.x", "svn:mergeinfo",
-                                  svn_string_create("/trunk:4-6", pool),
-                                  pool));
-  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+                                  svn_string_create("/trunk:4-6", subpool),
+                                  subpool));
+  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
   SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
+  svn_pool_clear(subpool);
 
   /* Revision 8:  Merge branch to trunk. */
   SVN_ERR(svn_repos_fs_begin_txn_for_commit(&txn, repos, youngest_rev,
-                                            "user-merge2", "log msg", pool));
-  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+                                            "user-merge2", "log msg", subpool));
+  SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__set_file_contents(txn_root, "trunk/A/mu",
                                       "A\nB\nC -- trunk edit\nD -- branch edit\n"
-                                      "E\nF\nG\nH\nI", pool));
+                                      "E\nF\nG\nH\nI", subpool));
   SVN_ERR(svn_fs_change_node_prop(txn_root, "/trunk", "svn:mergeinfo",
-                                  svn_string_create("/branches/1.0.x:4-7", pool),
-                                  pool));
-  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+                                  svn_string_create("/branches/1.0.x:4-7", subpool),
+                                  subpool));
+  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, subpool));
   SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
+  svn_pool_destroy(subpool);
+
   return SVN_NO_ERROR;
 }

Propchange: subversion/branches/move-tracking-2/tools/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Oct 26 08:43:06 2015
@@ -82,4 +82,4 @@
 /subversion/branches/verify-at-commit/tools:1462039-1462408
 /subversion/branches/verify-keep-going/tools:1439280-1546110
 /subversion/branches/wc-collate-path/tools:1402685-1480384
-/subversion/trunk/tools:1606692-1708078
+/subversion/trunk/tools:1606692-1710529

Modified: subversion/branches/move-tracking-2/tools/dev/x509-parser.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/tools/dev/x509-parser.c?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/tools/dev/x509-parser.c (original)
+++ subversion/branches/move-tracking-2/tools/dev/x509-parser.c Mon Oct 26 08:43:06 2015
@@ -94,7 +94,8 @@ get_der_cert_from_stream(const svn_strin
                          apr_pool_t *pool)
 {
   svn_string_t *raw;
-  SVN_ERR(svn_string_from_stream(&raw, in, pool, pool));
+  SVN_ERR(svn_string_from_stream2(&raw, in, SVN__STREAM_CHUNK_SIZE,
+                                  pool));
 
   *der_cert = NULL;
 

Modified: subversion/branches/move-tracking-2/win-tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/win-tests.py?rev=1710531&r1=1710530&r2=1710531&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/win-tests.py (original)
+++ subversion/branches/move-tracking-2/win-tests.py Mon Oct 26 08:43:06 2015
@@ -32,6 +32,7 @@ import filecmp
 import shutil
 import traceback
 import logging
+import re
 try:
   # Python >=3.0
   import configparser
@@ -129,7 +130,7 @@ gen_obj = gen_win_dependencies.GenDepend
 opts, args = my_getopt(sys.argv[1:], 'hrdvqct:pu:f:',
                        ['release', 'debug', 'verbose', 'quiet', 'cleanup',
                         'test=', 'url=', 'svnserve-args=', 'fs-type=', 'asp.net-hack',
-                        'httpd-dir=', 'httpd-port=', 'httpd-daemon',
+                        'httpd-dir=', 'httpd-port=', 'httpd-daemon', 'https',
                         'httpd-server', 'http-short-circuit', 'httpd-no-log',
                         'disable-http-v2', 'disable-bulk-updates', 'help',
                         'fsfs-packing', 'fsfs-sharding=', 'javahl', 'swig=',
@@ -154,6 +155,7 @@ run_httpd = None
 httpd_port = None
 httpd_service = None
 httpd_no_log = None
+use_ssl = False
 http_short_circuit = False
 advertise_httpv2 = True
 http_bulk_updates = True
@@ -214,6 +216,8 @@ for opt, val in opts:
     httpd_service = 1
   elif opt == '--httpd-no-log':
     httpd_no_log = 1
+  elif opt == '--https':
+    use_ssl = 1
   elif opt == '--http-short-circuit':
     http_short_circuit = True
   elif opt == '--disable-http-v2':
@@ -292,7 +296,12 @@ if run_httpd:
   if not httpd_port:
     httpd_port = random.randrange(1024, 30000)
   if not base_url:
-    base_url = 'http://localhost:' + str(httpd_port)
+    if use_ssl:
+      scheme = 'https'
+    else:
+      scheme = 'http'
+
+    base_url = '%s://localhost:%d' % (scheme, httpd_port)
 
 if base_url:
   repo_loc = 'remote repository ' + base_url + '.'
@@ -449,8 +458,9 @@ class Svnserve:
 
 class Httpd:
   "Run httpd for DAV tests"
-  def __init__(self, abs_httpd_dir, abs_objdir, abs_builddir, httpd_port,
-               service, no_log, httpv2, short_circuit, bulk_updates):
+  def __init__(self, abs_httpd_dir, abs_objdir, abs_builddir, abs_srcdir,
+               httpd_port, service, use_ssl, no_log, httpv2, short_circuit,
+               bulk_updates):
     self.name = 'apache.exe'
     self.httpd_port = httpd_port
     self.httpd_dir = abs_httpd_dir
@@ -488,12 +498,19 @@ class Httpd:
     self.dontdothat_file = os.path.join(abs_builddir,
                                          CMDLINE_TEST_SCRIPT_NATIVE_PATH,
                                          'svn-test-work', 'dontdothat')
+    self.certfile = os.path.join(abs_builddir,
+                                 CMDLINE_TEST_SCRIPT_NATIVE_PATH,
+                                 'svn-test-work', 'cert.pem')
+    self.certkeyfile = os.path.join(abs_builddir,
+                                     CMDLINE_TEST_SCRIPT_NATIVE_PATH,
+                                     'svn-test-work', 'cert-key.pem')
     self.httpd_config = os.path.join(self.root, 'httpd.conf')
     self.httpd_users = os.path.join(self.root, 'users')
     self.httpd_mime_types = os.path.join(self.root, 'mime.types')
     self.httpd_groups = os.path.join(self.root, 'groups')
     self.abs_builddir = abs_builddir
     self.abs_objdir = abs_objdir
+    self.abs_srcdir = abs_srcdir
     self.service_name = 'svn-test-httpd-' + str(httpd_port)
 
     if self.service:
@@ -509,6 +526,9 @@ class Httpd:
     self._create_mime_types_file()
     self._create_dontdothat_file()
 
+    if use_ssl:
+      self._create_cert_files()
+
     # Obtain version.
     version_vals = gen_obj._libraries['httpd'].version.split('.')
     self.httpd_ver = float('%s.%s' % (version_vals[0], version_vals[1]))
@@ -537,6 +557,8 @@ class Httpd:
       fp.write('LogLevel     Crit\n')
 
     # Write LoadModule for minimal system module
+    if use_ssl:
+      fp.write(self._sys_module('ssl_module', 'mod_ssl.so'))
     fp.write(self._sys_module('dav_module', 'mod_dav.so'))
     if self.httpd_ver >= 2.3:
       fp.write(self._sys_module('access_compat_module', 'mod_access_compat.so'))
@@ -561,6 +583,11 @@ class Httpd:
     # And for mod_dontdothat
     fp.write(self._svn_module('dontdothat_module', 'mod_dontdothat.so'))
 
+    if use_ssl:
+      fp.write('SSLEngine on\n')
+      fp.write('SSLCertificateFile %s\n' % self._quote(self.certfile))
+      fp.write('SSLCertificateKeyFile %s\n' % self._quote(self.certkeyfile))
+
     # Don't handle .htaccess, symlinks, etc.
     fp.write('<Directory />\n')
     fp.write('AllowOverride None\n')
@@ -633,6 +660,34 @@ class Httpd:
     fp.write('/ = deny\n')
     fp.close()
 
+  def _create_cert_files(self):
+    "Create certificate files"
+    # The unix build uses certificates encoded in davautocheck.sh
+    # Let's just read them from there
+
+    sh_path = os.path.join(self.abs_srcdir, 'subversion', 'tests', 'cmdline',
+                           'davautocheck.sh')
+    sh = open(sh_path).readlines()
+
+    def cert_extract(lines, what):
+      r = []
+      pattern = r'cat\s*\>\s*' + re.escape(what) + r'\s*\<\<([A-Z_a-z0-9]+)'
+      exit_marker = None
+      for i in lines:
+        if exit_marker:
+          if i.startswith(exit_marker):
+            return r
+          r.append(i)
+        else:
+          m = re.match(pattern, i)
+          if m:
+            exit_marker = m.groups(1)
+
+    cert_file = cert_extract(sh, '"$SSL_CERTIFICATE_FILE"')
+    cert_key = cert_extract(sh, '"$SSL_CERTIFICATE_KEY_FILE"')
+    open(self.certfile, 'w').write(''.join(cert_file))
+    open(self.certkeyfile, 'w').write(''.join(cert_key))
+
   def _sys_module(self, name, path):
     full_path = os.path.join(self.httpd_dir, 'modules', path)
     return 'LoadModule ' + name + " " + self._quote(full_path) + '\n'
@@ -940,11 +995,14 @@ if not list_tests:
     daemon = Svnserve(svnserve_args, objdir, abs_objdir, abs_builddir)
 
   if run_httpd:
-    daemon = Httpd(abs_httpd_dir, abs_objdir, abs_builddir, httpd_port,
-                   httpd_service, httpd_no_log,
-                   advertise_httpv2, http_short_circuit,
+    daemon = Httpd(abs_httpd_dir, abs_objdir, abs_builddir, abs_srcdir,
+                   httpd_port, httpd_service, use_ssl,
+                   httpd_no_log, advertise_httpv2, http_short_circuit,
                    http_bulk_updates)
 
+    if use_ssl and not ssl_cert:
+      ssl_cert = daemon.certfile
+
   # Start service daemon, if any
   if daemon:
     daemon.start()

Propchange: subversion/branches/move-tracking-2/win-tests.py
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Oct 26 08:43:06 2015
@@ -86,4 +86,4 @@
 /subversion/branches/verify-at-commit/win-tests.py:1462039-1462408
 /subversion/branches/verify-keep-going/win-tests.py:1439280-1546110
 /subversion/branches/wc-collate-path/win-tests.py:1402685-1480384
-/subversion/trunk/win-tests.py:1606692-1706962
+/subversion/trunk/win-tests.py:1606692-1710529