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 2015/01/16 15:01:37 UTC

svn commit: r1652409 [18/18] - in /subversion/branches/svn-auth-x509: ./ notes/ subversion/bindings/swig/ subversion/bindings/swig/include/ subversion/bindings/swig/perl/native/ subversion/bindings/swig/perl/native/t/ subversion/bindings/swig/python/li...

Modified: subversion/branches/svn-auth-x509/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c (original)
+++ subversion/branches/svn-auth-x509/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c Fri Jan 16 14:01:35 2015
@@ -1079,7 +1079,7 @@ metadata_checksumming(const svn_test_opt
   SVN_ERR(svn_stringbuf_from_file2(&r0, r0_path, pool));
   r0->data[21] = '1';
   SVN_ERR(svn_io_remove_file2(r0_path, FALSE, pool));
-  SVN_ERR(svn_io_file_create_binary(r0_path, r0->data, r0->len, pool));
+  SVN_ERR(svn_io_file_create_bytes(r0_path, r0->data, r0->len, pool));
 
   /* Reading the corrupted data on the normal code path triggers no error.
    * Use a separate namespace to avoid simply reading data from cache. */

Modified: subversion/branches/svn-auth-x509/subversion/tests/libsvn_fs_fs/fs-fs-private-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/tests/libsvn_fs_fs/fs-fs-private-test.c?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/tests/libsvn_fs_fs/fs-fs-private-test.c (original)
+++ subversion/branches/svn-auth-x509/subversion/tests/libsvn_fs_fs/fs-fs-private-test.c Fri Jan 16 14:01:35 2015
@@ -79,7 +79,7 @@ create_greek_repo(svn_repos_t **repos,
 
 static svn_error_t *
 verify_representation_stats(const svn_fs_fs__representation_stats_t *stats,
-                            apr_int64_t expected_count)
+                            apr_uint64_t expected_count)
 {
   /* Small items, no packing (but inefficiency due to packing attempt). */
   SVN_TEST_ASSERT(stats->total.count == expected_count);
@@ -110,7 +110,7 @@ verify_representation_stats(const svn_fs
 
 static svn_error_t *
 verify_node_stats(const svn_fs_fs__node_stats_t *node_stats,
-                  apr_int64_t expected_count)
+                  apr_uint64_t expected_count)
 {
   SVN_TEST_ASSERT(node_stats->count == expected_count);
   SVN_TEST_ASSERT(   node_stats->size > 100 * node_stats->count
@@ -162,8 +162,8 @@ verify_large_change(const svn_fs_fs__lar
 static svn_error_t *
 verify_histogram(const svn_fs_fs__histogram_t *histogram)
 {
-  apr_int64_t sum_count = 0;
-  apr_int64_t sum_size = 0;
+  apr_uint64_t sum_count = 0;
+  apr_uint64_t sum_size = 0;
 
   int i;
   for (i = 0; i < 64; ++i)

Modified: subversion/branches/svn-auth-x509/subversion/tests/libsvn_repos/dump-load-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/tests/libsvn_repos/dump-load-test.c?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/tests/libsvn_repos/dump-load-test.c (original)
+++ subversion/branches/svn-auth-x509/subversion/tests/libsvn_repos/dump-load-test.c Fri Jan 16 14:01:35 2015
@@ -35,7 +35,114 @@
 
 
 
-/* Notification receiver for test_dump_bad_mergeinfo(). This does not
+/* Test dumping in the presence of the property PROP_NAME:PROP_VAL.
+ * Return the dumped data in *DUMP_DATA_P (if DUMP_DATA_P is not null).
+ * REPOS is an empty repository.
+ * See svn_repos_dump_fs3() for START_REV, END_REV, NOTIFY_FUNC, NOTIFY_BATON.
+ */
+static svn_error_t *
+test_dump_bad_props(svn_stringbuf_t **dump_data_p,
+                    svn_repos_t *repos,
+                    const char *prop_name,
+                    const svn_string_t *prop_val,
+                    svn_revnum_t start_rev,
+                    svn_revnum_t end_rev,
+                    svn_repos_notify_func_t notify_func,
+                    void *notify_baton,
+                    apr_pool_t *pool)
+{
+  const char *test_path = "/bar";
+  svn_fs_t *fs = svn_repos_fs(repos);
+  svn_fs_txn_t *txn;
+  svn_fs_root_t *txn_root;
+  svn_revnum_t youngest_rev = 0;
+  svn_stringbuf_t *dump_data = svn_stringbuf_create_empty(pool);
+  svn_stream_t *stream = svn_stream_from_stringbuf(dump_data, pool);
+  const char *expected_str;
+
+  /* Revision 1:  Any commit will do, here  */
+  SVN_ERR(svn_fs_begin_txn2(&txn, fs, youngest_rev, 0, pool));
+  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+  SVN_ERR(svn_fs_make_dir(txn_root, test_path , pool));
+  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
+
+  /* Revision 2:  Add the bad property */
+  SVN_ERR(svn_fs_begin_txn2(&txn, fs, youngest_rev, 0, pool));
+  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+  SVN_ERR(svn_fs_change_node_prop(txn_root, test_path , prop_name, prop_val,
+                                  pool));
+  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
+
+  /* Test that a dump completes without error. */
+  SVN_ERR(svn_repos_dump_fs3(repos, stream, start_rev, end_rev,
+                             FALSE, FALSE,
+                             notify_func, notify_baton,
+                             NULL, NULL,
+                             pool));
+  svn_stream_close(stream);
+
+  /* Check that the property appears in the dump data */
+  expected_str = apr_psprintf(pool, "K %d\n%s\n"
+                                    "V %d\n%s\n"
+                                    "PROPS-END\n",
+                              (int)strlen(prop_name), prop_name,
+                              (int)prop_val->len, prop_val->data);
+  SVN_TEST_ASSERT(strstr(dump_data->data, expected_str));
+
+  if (dump_data_p)
+    *dump_data_p = dump_data;
+  return SVN_NO_ERROR;
+}
+
+/* Test loading in the presence of the property PROP_NAME:PROP_VAL.
+ * Load data from DUMP_DATA.
+ * REPOS is an empty repository.
+ */
+static svn_error_t *
+test_load_bad_props(svn_stringbuf_t *dump_data,
+                    svn_repos_t *repos,
+                    const char *prop_name,
+                    const svn_string_t *prop_val,
+                    const char *parent_fspath,
+                    svn_boolean_t validate_props,
+                    svn_repos_notify_func_t notify_func,
+                    void *notify_baton,
+                    apr_pool_t *pool)
+{
+  const char *test_path = apr_psprintf(pool, "%s%s",
+                                       parent_fspath ? parent_fspath : "",
+                                       "/bar");
+  svn_stream_t *stream = svn_stream_from_stringbuf(dump_data, pool);
+  svn_fs_t *fs;
+  svn_fs_root_t *rev_root;
+  svn_revnum_t youngest_rev;
+  svn_string_t *loaded_prop_val;
+
+  SVN_ERR(svn_repos_load_fs5(repos, stream,
+                             SVN_INVALID_REVNUM, SVN_INVALID_REVNUM,
+                             svn_repos_load_uuid_default,
+                             parent_fspath,
+                             FALSE, FALSE, /*use_*_commit_hook*/
+                             validate_props,
+                             FALSE /*ignore_dates*/,
+                             notify_func, notify_baton,
+                             NULL, NULL, /*cancellation*/
+                             pool));
+  svn_stream_close(stream);
+
+  /* Check the loaded property */
+  fs = svn_repos_fs(repos);
+  SVN_ERR(svn_fs_youngest_rev(&youngest_rev, fs, pool));
+  SVN_ERR(svn_fs_revision_root(&rev_root, fs, youngest_rev, pool));
+  SVN_ERR(svn_fs_node_prop(&loaded_prop_val,
+                           rev_root, test_path, prop_name, pool));
+  SVN_TEST_ASSERT(svn_string_compare(loaded_prop_val, prop_val));
+  return SVN_NO_ERROR;
+}
+
+/* Notification receiver for test_dump_r0_mergeinfo(). This does not
    need to do anything, it just needs to exist.
  */
 static void
@@ -51,44 +158,115 @@ static svn_error_t *
 test_dump_r0_mergeinfo(const svn_test_opts_t *opts,
                        apr_pool_t *pool)
 {
-  svn_repos_t *repos;
-  svn_fs_t *fs;
-  svn_fs_txn_t *txn;
-  svn_fs_root_t *txn_root;
-  svn_revnum_t youngest_rev = 0;
+  const char *prop_name = "svn:mergeinfo";
   const svn_string_t *bad_mergeinfo = svn_string_create("/foo:0", pool);
+  svn_repos_t *repos;
 
   SVN_ERR(svn_test__create_repos(&repos, "test-repo-dump-r0-mergeinfo",
                                  opts, pool));
-  fs = svn_repos_fs(repos);
-
-  /* Revision 1:  Any commit will do, here  */
-  SVN_ERR(svn_fs_begin_txn2(&txn, fs, youngest_rev, 0, pool));
-  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
-  SVN_ERR(svn_fs_make_dir(txn_root, "/bar", pool));
-  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
-  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
-
-  /* Revision 2:  Add bad mergeinfo */
-  SVN_ERR(svn_fs_begin_txn2(&txn, fs, youngest_rev, 0, pool));
-  SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
-  SVN_ERR(svn_fs_change_node_prop(txn_root, "/bar", "svn:mergeinfo", bad_mergeinfo, pool));
-  SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
-  SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
-
-  /* Test that a dump completes without error. In order to exercise the
+  /* In order to exercise the
      functionality under test -- that is, in order for the dump to try to
      parse the mergeinfo it is dumping -- the dump must start from a
      revision greater than 1 and must take a notification callback. */
+  SVN_ERR(test_dump_bad_props(NULL, repos,
+                              prop_name, bad_mergeinfo,
+                              2, SVN_INVALID_REVNUM,
+                              dump_r0_mergeinfo_notifier, NULL,
+                              pool));
+
+  return SVN_NO_ERROR;
+}
+
+static void
+load_r0_mergeinfo_notifier(void *baton,
+                           const svn_repos_notify_t *notify,
+                           apr_pool_t *scratch_pool)
+{
+  svn_boolean_t *had_mergeinfo_warning = baton;
+
+  if (notify->action == svn_repos_notify_warning)
+    {
+      if (notify->warning == svn_repos_notify_warning_invalid_mergeinfo)
+        {
+          *had_mergeinfo_warning = TRUE;
+        }
+    }
+}
+
+/* Regression test for the 'load' part of issue #4476 "Mergeinfo
+ * containing r0 makes svnsync and svnadmin dump fail".
+ *
+ * Bad mergeinfo should not prevent loading a backup, at least when we do not
+ * require mergeinfo revision numbers or paths to be adjusted during loading.
+ */
+static svn_error_t *
+test_load_r0_mergeinfo(const svn_test_opts_t *opts,
+                       apr_pool_t *pool)
+{
+  const char *prop_name = "svn:mergeinfo";
+  const svn_string_t *prop_val = svn_string_create("/foo:0", pool);
+  svn_stringbuf_t *dump_data = svn_stringbuf_create_empty(pool);
+
+  /* Produce a dump file containing bad mergeinfo */
   {
-    svn_stringbuf_t *stringbuf = svn_stringbuf_create_empty(pool);
-    svn_stream_t *stream = svn_stream_from_stringbuf(stringbuf, pool);
+    svn_repos_t *repos;
+
+    SVN_ERR(svn_test__create_repos(&repos, "test-repo-load-r0-mi-1",
+                                   opts, pool));
+    SVN_ERR(test_dump_bad_props(&dump_data, repos,
+                                prop_name, prop_val,
+                                SVN_INVALID_REVNUM, SVN_INVALID_REVNUM,
+                                NULL, NULL, pool));
+  }
+
+  /* Test loading without validating properties: should warn and succeed */
+  {
+    svn_repos_t *repos;
+    svn_boolean_t had_mergeinfo_warning = FALSE;
+
+    SVN_ERR(svn_test__create_repos(&repos, "test-repo-load-r0-mi-2",
+                                   opts, pool));
+
+    /* Without changing revision numbers or paths */
+    SVN_ERR(test_load_bad_props(dump_data, repos,
+                                prop_name, prop_val,
+                                NULL /*parent_dir*/, FALSE /*validate_props*/,
+                                load_r0_mergeinfo_notifier, &had_mergeinfo_warning,
+                                pool));
+    SVN_TEST_ASSERT(had_mergeinfo_warning);
+
+    /* With changing revision numbers and/or paths (by loading the same data
+       again, on top of existing revisions, into subdirectory 'bar') */
+    had_mergeinfo_warning = FALSE;
+    SVN_ERR(test_load_bad_props(dump_data, repos,
+                                prop_name, prop_val,
+                                "/bar", FALSE /*validate_props*/,
+                                load_r0_mergeinfo_notifier, &had_mergeinfo_warning,
+                                pool));
+    SVN_TEST_ASSERT(had_mergeinfo_warning);
+  }
+
+  /* Test loading with validating properties: should return an error */
+  {
+    svn_repos_t *repos;
+
+    SVN_ERR(svn_test__create_repos(&repos, "test-repo-load-r0-mi-3",
+                                   opts, pool));
 
-    SVN_ERR(svn_repos_dump_fs3(repos, stream, 2, SVN_INVALID_REVNUM,
-                               FALSE, FALSE,
-                               dump_r0_mergeinfo_notifier, NULL,
-                               NULL, NULL,
-                               pool));
+    /* Without changing revision numbers or paths */
+    SVN_TEST_ASSERT_ANY_ERROR(test_load_bad_props(dump_data, repos,
+                                prop_name, prop_val,
+                                NULL /*parent_dir*/, TRUE /*validate_props*/,
+                                NULL, NULL,
+                                pool));
+
+    /* With changing revision numbers and/or paths (by loading the same data
+       again, on top of existing revisions, into subdirectory 'bar') */
+    SVN_TEST_ASSERT_ANY_ERROR(test_load_bad_props(dump_data, repos,
+                                prop_name, prop_val,
+                                "/bar", TRUE /*validate_props*/,
+                                NULL, NULL,
+                                pool));
   }
 
   return SVN_NO_ERROR;
@@ -103,6 +281,8 @@ static struct svn_test_descriptor_t test
     SVN_TEST_NULL,
     SVN_TEST_OPTS_PASS(test_dump_r0_mergeinfo,
                        "test dumping with r0 mergeinfo"),
+    SVN_TEST_OPTS_PASS(test_load_r0_mergeinfo,
+                       "test loading with r0 mergeinfo"),
     SVN_TEST_NULL
   };
 

Modified: subversion/branches/svn-auth-x509/subversion/tests/libsvn_subr/cache-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/tests/libsvn_subr/cache-test.c?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/tests/libsvn_subr/cache-test.c (original)
+++ subversion/branches/svn-auth-x509/subversion/tests/libsvn_subr/cache-test.c Fri Jan 16 14:01:35 2015
@@ -201,6 +201,102 @@ test_membuffer_cache_basic(apr_pool_t *p
   return basic_cache_test(cache, FALSE, pool);
 }
 
+/* Implements svn_cache__deserialize_func_t */
+static svn_error_t *
+raise_error_deserialize_func(void **out,
+                             void *data,
+                             apr_size_t data_len,
+                             apr_pool_t *pool)
+{
+  return svn_error_create(APR_EGENERAL, NULL, NULL);
+}
+
+/* Implements svn_cache__partial_getter_func_t */
+static svn_error_t *
+raise_error_partial_getter_func(void **out,
+                                const void *data,
+                                apr_size_t data_len,
+                                void *baton,
+                                apr_pool_t *result_pool)
+{
+  return svn_error_create(APR_EGENERAL, NULL, NULL);
+}
+
+/* Implements svn_cache__partial_setter_func_t */
+static svn_error_t *
+raise_error_partial_setter_func(void **data,
+                                apr_size_t *data_len,
+                                void *baton,
+                                apr_pool_t *result_pool)
+{
+  return svn_error_create(APR_EGENERAL, NULL, NULL);
+}
+
+static svn_error_t *
+test_membuffer_serializer_error_handling(apr_pool_t *pool)
+{
+  svn_cache__t *cache;
+  svn_membuffer_t *membuffer;
+  svn_revnum_t twenty = 20;
+  svn_boolean_t found;
+  void *val;
+
+  SVN_ERR(svn_cache__membuffer_cache_create(&membuffer, 10*1024, 1, 0,
+                                            TRUE, TRUE, pool));
+
+  /* Create a cache with just one entry. */
+  SVN_ERR(svn_cache__create_membuffer_cache(&cache,
+                                            membuffer,
+                                            serialize_revnum,
+                                            raise_error_deserialize_func,
+                                            APR_HASH_KEY_STRING,
+                                            "cache:",
+                                            SVN_CACHE__MEMBUFFER_DEFAULT_PRIORITY,
+                                            FALSE,
+                                            pool, pool));
+
+  SVN_ERR(svn_cache__set(cache, "twenty", &twenty, pool));
+
+  /* Test retrieving data from cache using full getter that
+     always raises an error. */
+  SVN_TEST_ASSERT_ERROR(
+    svn_cache__get(&val, &found, cache, "twenty", pool),
+    APR_EGENERAL);
+
+  /* Test retrieving data from cache using partial getter that
+     always raises an error. */
+  SVN_TEST_ASSERT_ERROR(
+    svn_cache__get_partial(&val, &found, cache, "twenty",
+                           raise_error_partial_getter_func,
+                           NULL, pool),
+    APR_EGENERAL);
+
+  /* Create a new cache. */
+  SVN_ERR(svn_cache__membuffer_cache_create(&membuffer, 10*1024, 1, 0,
+                                            TRUE, TRUE, pool));
+  SVN_ERR(svn_cache__create_membuffer_cache(&cache,
+                                            membuffer,
+                                            serialize_revnum,
+                                            deserialize_revnum,
+                                            APR_HASH_KEY_STRING,
+                                            "cache:",
+                                            SVN_CACHE__MEMBUFFER_DEFAULT_PRIORITY,
+                                            FALSE,
+                                            pool, pool));
+
+  /* Store one entry in cache. */
+  SVN_ERR(svn_cache__set(cache, "twenty", &twenty, pool));
+
+  /* Test setting data in cache using partial setter that
+     always raises an error. */
+  SVN_TEST_ASSERT_ERROR(
+    svn_cache__set_partial(cache, "twenty", 
+                           raise_error_partial_setter_func,
+                           NULL, pool),
+    APR_EGENERAL);
+
+  return SVN_NO_ERROR;
+}
 
 static svn_error_t *
 test_memcache_long_key(const svn_test_opts_t *opts,
@@ -274,6 +370,8 @@ static struct svn_test_descriptor_t test
                        "memcache svn_cache with very long keys"),
     SVN_TEST_PASS2(test_membuffer_cache_basic,
                    "basic membuffer svn_cache test"),
+    SVN_TEST_PASS2(test_membuffer_serializer_error_handling,
+                   "test for error handling in membuffer svn_cache"),
     SVN_TEST_NULL
   };
 

Modified: subversion/branches/svn-auth-x509/subversion/tests/libsvn_subr/config-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/tests/libsvn_subr/config-test.c?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/tests/libsvn_subr/config-test.c (original)
+++ subversion/branches/svn-auth-x509/subversion/tests/libsvn_subr/config-test.c Fri Jan 16 14:01:35 2015
@@ -347,6 +347,29 @@ test_read_only_mode(const svn_test_opts_
   return SVN_NO_ERROR;
 }
 
+static svn_error_t *
+test_expand(const svn_test_opts_t *opts,
+            apr_pool_t *pool)
+{
+  svn_config_t *cfg;
+  const char *cfg_file, *val;
+
+  SVN_ERR(get_config_file_path(&cfg_file, opts, pool));
+  SVN_ERR(svn_config_read3(&cfg, cfg_file, TRUE, TRUE, FALSE, pool));
+
+  /* Get expanded "g" which requires expanding "c". */
+  svn_config_get(cfg, &val, "section1", "g", NULL);
+
+  /* Get expanded "c". */
+  svn_config_get(cfg, &val, "section1", "c", NULL);
+
+  /* With pool debugging enabled this ensures that the expanded value 
+     of "c" was not created in a temporary pool when expanding "g". */
+  SVN_TEST_STRING_ASSERT(val, "bar");
+
+  return SVN_NO_ERROR;
+}
+
 /*
    ====================================================================
    If you add a new test to this file, update this array.
@@ -377,6 +400,8 @@ static struct svn_test_descriptor_t test
                    "test parsing config file with BOM"),
     SVN_TEST_OPTS_PASS(test_read_only_mode,
                        "test r/o mode"),
+    SVN_TEST_OPTS_PASS(test_expand,
+                       "test variable expansion"),
     SVN_TEST_NULL
   };
 

Modified: subversion/branches/svn-auth-x509/subversion/tests/libsvn_subr/mergeinfo-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/tests/libsvn_subr/mergeinfo-test.c?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/tests/libsvn_subr/mergeinfo-test.c (original)
+++ subversion/branches/svn-auth-x509/subversion/tests/libsvn_subr/mergeinfo-test.c Fri Jan 16 14:01:35 2015
@@ -114,7 +114,7 @@ verify_mergeinfo_parse(const char *input
 }
 
 
-#define NBR_MERGEINFO_VALS 24
+#define NBR_MERGEINFO_VALS 25
 
 /* Valid mergeinfo values. */
 static const char * const mergeinfo_vals[NBR_MERGEINFO_VALS] =
@@ -148,7 +148,8 @@ static const char * const mergeinfo_vals
     "/A/:7-8",
     "/A///:7-8",
     "/A/.:7-8",
-    "/A/./B:7-8"
+    "/A/./B:7-8",
+    ":7-8",
   };
 /* Paths corresponding to mergeinfo_vals. */
 static const char * const mergeinfo_paths[NBR_MERGEINFO_VALS] =
@@ -181,7 +182,8 @@ static const char * const mergeinfo_path
     "/A",
     "/A",
     "/A",
-    "/A/B"
+    "/A/B",
+    "/",
   };
 /* First ranges from the paths identified by mergeinfo_paths. */
 static svn_merge_range_t mergeinfo_ranges[NBR_MERGEINFO_VALS][MAX_NBR_RANGES] =
@@ -212,6 +214,7 @@ static svn_merge_range_t mergeinfo_range
     { {6, 8, TRUE} },
     { {6, 8, TRUE} },
     { {6, 8, TRUE} },
+    { {6, 8, TRUE} },
   };
 
 static svn_error_t *
@@ -298,7 +301,7 @@ test_parse_combine_rangeinfo(apr_pool_t
 }
 
 
-#define NBR_BROKEN_MERGEINFO_VALS 27
+#define NBR_BROKEN_MERGEINFO_VALS 26
 /* Invalid mergeinfo values. */
 static const char * const broken_mergeinfo_vals[NBR_BROKEN_MERGEINFO_VALS] =
   {
@@ -330,8 +333,6 @@ static const char * const broken_mergein
     "/trunk:",
     "/trunk:2-9\n/branch:",
     "::",
-    /* No path */
-    ":1-3",
     /* Invalid revisions */
     "trunk:a-3",
     "branch:3-four",

Modified: subversion/branches/svn-auth-x509/subversion/tests/libsvn_subr/string-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/tests/libsvn_subr/string-test.c?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/tests/libsvn_subr/string-test.c (original)
+++ subversion/branches/svn-auth-x509/subversion/tests/libsvn_subr/string-test.c Fri Jan 16 14:01:35 2015
@@ -604,7 +604,19 @@ test_stringbuf_insert(apr_pool_t *pool)
   SVN_TEST_STRING_ASSERT(a->data, "test hello, world");
 
   svn_stringbuf_insert(a, 1200, "!", 1);
-  return expect_stringbuf_equal(a, "test hello, world!", pool);
+  SVN_TEST_STRING_ASSERT(a->data, "test hello, world!");
+
+  svn_stringbuf_insert(a, 4, "\0-\0", 3);
+  SVN_TEST_ASSERT(svn_stringbuf_compare(a,
+                    svn_stringbuf_ncreate("test\0-\0 hello, world!",
+                                          21, pool)));
+
+  svn_stringbuf_insert(a, 14, a->data + 4, 3);
+  SVN_TEST_ASSERT(svn_stringbuf_compare(a,
+                    svn_stringbuf_ncreate("test\0-\0 hello,\0-\0 world!",
+                                          24, pool)));
+
+  return SVN_NO_ERROR;
 }
 
 static svn_error_t *
@@ -643,8 +655,24 @@ test_stringbuf_replace(apr_pool_t *pool)
   SVN_TEST_STRING_ASSERT(a->data, "test hello, world!");
 
   svn_stringbuf_replace(a, 1200, 199, "!!", 2);
+  SVN_TEST_STRING_ASSERT(a->data, "test hello, world!!!");
+
+  svn_stringbuf_replace(a, 10, 2, "\0-\0", 3);
+  SVN_TEST_ASSERT(svn_stringbuf_compare(a,
+                    svn_stringbuf_ncreate("test hello\0-\0world!!!",
+                                          21, pool)));
+
+  svn_stringbuf_replace(a, 10, 3, a->data + 10, 3);
+  SVN_TEST_ASSERT(svn_stringbuf_compare(a,
+                    svn_stringbuf_ncreate("test hello\0-\0world!!!",
+                                          21, pool)));
+
+  svn_stringbuf_replace(a, 19, 1, a->data + 10, 3);
+  SVN_TEST_ASSERT(svn_stringbuf_compare(a,
+                    svn_stringbuf_ncreate("test hello\0-\0world!\0-\0!",
+                                          23, pool)));
 
-  return expect_stringbuf_equal(a, "test hello, world!!!", pool);
+  return SVN_NO_ERROR;
 }
 
 static svn_error_t *

Modified: subversion/branches/svn-auth-x509/subversion/tests/libsvn_wc/op-depth-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/tests/libsvn_wc/op-depth-test.c?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/tests/libsvn_wc/op-depth-test.c (original)
+++ subversion/branches/svn-auth-x509/subversion/tests/libsvn_wc/op-depth-test.c Fri Jan 16 14:01:35 2015
@@ -9296,14 +9296,42 @@ move4_update_delself_AAA(const svn_test_
     /* Update and resolve via mine strategy */
     SVN_ERR(sbox_wc_update(&b, "", 2));
 
+    {
+      nodes_row_t nodes[] = {
+
+        {1, "A_moved",        "normal",       1, "A", MOVED_HERE},
+        {1, "A_moved/A",      "normal",       1, "A/A", MOVED_HERE},
+        {1, "A_moved/A/A",    "normal",       1, "A/A/A", MOVED_HERE},
+        {3, "A_moved/A/A",    "base-deleted", NO_COPY_FROM, "AAA_1"},
+        {1, "A_moved/A/A/A",  "normal",       1, "A/A/A/A", MOVED_HERE},
+        {3, "A_moved/A/A/A",  "base-deleted", NO_COPY_FROM},
+
+        { 0 },
+      };
+        SVN_ERR(check_db_rows(&b, "A_moved", nodes));
+    }
+
     /* Resolve a few conflicts manually */
     SVN_ERR(sbox_wc_resolve(&b, "A", svn_depth_empty,
         svn_wc_conflict_choose_mine_conflict));
+
+    {
+      nodes_row_t nodes[] = {
+
+        {1, "A_moved",        "normal",       2, "A", MOVED_HERE},
+        {1, "A_moved/A",      "normal",       2, "A/A", MOVED_HERE},
+
+        { 0 },
+      };
+        SVN_ERR(check_db_rows(&b, "A_moved", nodes));
+    }
+
     SVN_ERR(sbox_wc_resolve(&b, "B", svn_depth_empty,
         svn_wc_conflict_choose_mine_conflict));
     SVN_ERR(sbox_wc_resolve(&b, "C/A", svn_depth_empty,
         svn_wc_conflict_choose_mine_conflict));
 
+
     /* ### These can currently only be resolved to merged ???? */
     SVN_ERR(sbox_wc_resolve(&b, "D/A/A", svn_depth_empty,
                             svn_wc_conflict_choose_merged));
@@ -9319,6 +9347,55 @@ move4_update_delself_AAA(const svn_test_
     SVN_ERR(sbox_wc_resolve(&b, "", svn_depth_infinity, svn_wc_conflict_choose_mine_conflict));
     /* Go back to start position */
     SVN_ERR(sbox_wc_update(&b, "", 1));
+    {
+      nodes_row_t nodes[] = {
+        {0, "",               "normal",       1, ""},
+        {0, "A",              "normal",       1, "A"},
+        {1, "A",              "normal",       2, "B", FALSE, "A_moved", TRUE},
+        {0, "A/A",            "normal",       1, "A/A"},
+        {1, "A/A",            "normal",       2, "B/A", MOVED_HERE},
+        {2, "A/A",            "normal",       2, "C/A", FALSE, "BA_moved", TRUE},
+        {1, "A/A/A",          "base-deleted", NO_COPY_FROM},
+        {0, "A/A/A",          "normal",       1, "A/A/A"},
+        {3, "A/A/A",          "normal",       1, "D/A/A"},
+        {1, "A/A/A/A",        "base-deleted", NO_COPY_FROM},
+        {0, "A/A/A/A",        "normal",       1, "A/A/A/A"},
+        {3, "A/A/A/A",        "normal",       1, "D/A/A/A"},
+        {1, "AAA_1",          "normal",       1, "A/A/A"},
+        {1, "AAA_1/A",        "normal",       1, "A/A/A/A"},
+        {1, "AAA_2",          "normal",       1, "B/A/A"},
+        {1, "AAA_2/A",        "normal",       1, "B/A/A/A"},
+        {1, "AAA_3",          "normal",       1, "C/A/A"},
+        {1, "AAA_3/A",        "normal",       1, "C/A/A/A"},
+        {1, "A_moved",        "normal",       2, "A", MOVED_HERE},
+        {1, "A_moved/A",      "normal",       2, "A/A", MOVED_HERE},
+        {1, "B",              "base-deleted", NO_COPY_FROM, "A"},
+        {0, "B",              "normal",       1, "B"},
+        {1, "B/A",            "base-deleted", NO_COPY_FROM},
+        {0, "B/A",            "normal",       1, "B/A"},
+        {1, "B/A/A",          "base-deleted", NO_COPY_FROM},
+        {0, "B/A/A",          "normal",       1, "B/A/A"},
+        {1, "B/A/A/A",        "base-deleted", NO_COPY_FROM},
+        {0, "B/A/A/A",        "normal",       1, "B/A/A/A"},
+        {1, "BA_moved",       "normal",       1, "A/A", MOVED_HERE},
+        {1, "BA_moved/A",     "normal",       1, "A/A/A", MOVED_HERE},
+        {1, "BA_moved/A/A",   "normal",       1, "A/A/A/A", MOVED_HERE},
+        {0, "C",              "normal",       1, "C"},
+        {2, "C/A",            "base-deleted", NO_COPY_FROM, "A/A"},
+        {0, "C/A",            "normal",       1, "C/A"},
+        {2, "C/A/A",          "base-deleted", NO_COPY_FROM},
+        {0, "C/A/A",          "normal",       1, "C/A/A"},
+        {2, "C/A/A/A",        "base-deleted", NO_COPY_FROM},
+        {0, "C/A/A/A",        "normal",       1, "C/A/A/A"},
+        {0, "D",              "normal",       1, "D"},
+        {0, "D/A",            "normal",       1, "D/A"},
+        {0, "D/A/A",          "normal",       1, "D/A/A"},
+        {0, "D/A/A/A",        "normal",       1, "D/A/A/A"},
+
+        { 0 },
+      };
+        SVN_ERR(check_db_rows(&b, "", nodes));
+    }
     SVN_ERR(sbox_wc_resolve(&b, "", svn_depth_infinity, svn_wc_conflict_choose_mine_conflict));
     /* Update and resolve via their strategy */
     SVN_ERR(sbox_wc_update(&b, "", 2));
@@ -9733,6 +9810,127 @@ break_move_in_delete(const svn_test_opts
 }
 
 
+static svn_error_t *
+nested_move_delete(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+  svn_test__sandbox_t b;
+
+  SVN_ERR(svn_test__sandbox_create(&b, "nested_move_delete", opts, pool));
+
+  SVN_ERR(sbox_add_and_commit_greek_tree(&b));
+
+  SVN_ERR(sbox_wc_mkdir(&b, "A/Z"));
+  SVN_ERR(sbox_wc_move(&b, "A/B/lambda", "A/Z/lambda"));
+
+  SVN_ERR(sbox_wc_delete(&b, "A/B"));
+
+  {
+    nodes_row_t nodes_AB[] = {
+      {0, "A/B",          "normal",       1, "A/B"},
+      {2, "A/B",          "base-deleted", NO_COPY_FROM},
+      {0, "A/B/E",        "normal",       1, "A/B/E"},
+      {2, "A/B/E",        "base-deleted", NO_COPY_FROM},
+      {0, "A/B/E/alpha",  "normal",       1, "A/B/E/alpha"},
+      {2, "A/B/E/alpha",  "base-deleted", NO_COPY_FROM},
+      {0, "A/B/E/beta",   "normal",       1, "A/B/E/beta"},
+      {2, "A/B/E/beta",   "base-deleted", NO_COPY_FROM},
+      {0, "A/B/F",        "normal",       1, "A/B/F"},
+      {2, "A/B/F",        "base-deleted", NO_COPY_FROM},
+      {0, "A/B/lambda",   "normal",       1, "A/B/lambda"},
+      {2, "A/B/lambda",   "base-deleted", NO_COPY_FROM, "A/Z/lambda"},
+      {0}
+    };
+    nodes_row_t nodes_AZ[] = {
+      {2, "A/Z",          "normal",       NO_COPY_FROM},
+      {3, "A/Z/lambda",   "normal",       1, "A/B/lambda", MOVED_HERE },
+      {0}
+    };
+
+    SVN_ERR(check_db_rows(&b, "A/B", nodes_AB));
+    SVN_ERR(check_db_rows(&b, "A/Z", nodes_AZ));
+  }
+
+  SVN_ERR(sbox_wc_move(&b, "A", "A_moved"));
+
+  {
+    nodes_row_t nodes[] = {
+      {0, "",                   "normal",       0, ""},
+      {0, "A",                  "normal",       1, "A"},
+      {1, "A",                  "base-deleted", NO_COPY_FROM, "A_moved"},
+      {0, "A/B",                "normal",       1, "A/B"},
+      {1, "A/B",                "base-deleted", NO_COPY_FROM},
+      {0, "A/B/E",              "normal",       1, "A/B/E"},
+      {1, "A/B/E",              "base-deleted", NO_COPY_FROM},
+      {0, "A/B/E/alpha",        "normal",       1, "A/B/E/alpha"},
+      {1, "A/B/E/alpha",        "base-deleted", NO_COPY_FROM},
+      {0, "A/B/E/beta",         "normal",       1, "A/B/E/beta"},
+      {1, "A/B/E/beta",         "base-deleted", NO_COPY_FROM},
+      {0, "A/B/F",              "normal",       1, "A/B/F"},
+      {1, "A/B/F",              "base-deleted", NO_COPY_FROM},
+      {0, "A/B/lambda",         "normal",       1, "A/B/lambda"},
+      {1, "A/B/lambda",         "base-deleted", NO_COPY_FROM},
+      {0, "A/C",                "normal",       1, "A/C"},
+      {1, "A/C",                "base-deleted", NO_COPY_FROM},
+      {0, "A/D",                "normal",       1, "A/D"},
+      {1, "A/D",                "base-deleted", NO_COPY_FROM},
+      {0, "A/D/G",              "normal",       1, "A/D/G"},
+      {1, "A/D/G",              "base-deleted", NO_COPY_FROM},
+      {0, "A/D/G/pi",           "normal",       1, "A/D/G/pi"},
+      {1, "A/D/G/pi",           "base-deleted", NO_COPY_FROM},
+      {0, "A/D/G/rho",          "normal",       1, "A/D/G/rho"},
+      {1, "A/D/G/rho",          "base-deleted", NO_COPY_FROM},
+      {0, "A/D/G/tau",          "normal",       1, "A/D/G/tau"},
+      {1, "A/D/G/tau",          "base-deleted", NO_COPY_FROM},
+      {0, "A/D/H",              "normal",       1, "A/D/H"},
+      {1, "A/D/H",              "base-deleted", NO_COPY_FROM},
+      {0, "A/D/H/chi",          "normal",       1, "A/D/H/chi"},
+      {1, "A/D/H/chi",          "base-deleted", NO_COPY_FROM},
+      {0, "A/D/H/omega",        "normal",       1, "A/D/H/omega"},
+      {1, "A/D/H/omega",        "base-deleted", NO_COPY_FROM},
+      {0, "A/D/H/psi",          "normal",       1, "A/D/H/psi"},
+      {1, "A/D/H/psi",          "base-deleted", NO_COPY_FROM},
+      {0, "A/D/gamma",          "normal",       1, "A/D/gamma"},
+      {1, "A/D/gamma",          "base-deleted", NO_COPY_FROM},
+      {0, "A/mu",               "normal",       1, "A/mu"},
+      {1, "A/mu",               "base-deleted", NO_COPY_FROM},
+      {1, "A_moved",            "normal",       1, "A", MOVED_HERE},
+      {1, "A_moved/B",          "normal",       1, "A/B", MOVED_HERE},
+      {2, "A_moved/B",          "base-deleted", NO_COPY_FROM},
+      {2, "A_moved/B/E",        "base-deleted", NO_COPY_FROM},
+      {1, "A_moved/B/E",        "normal",       1, "A/B/E", MOVED_HERE},
+      {1, "A_moved/B/E/alpha",  "normal",       1, "A/B/E/alpha", MOVED_HERE},
+      {2, "A_moved/B/E/alpha",  "base-deleted", NO_COPY_FROM},
+      {1, "A_moved/B/E/beta",   "normal",       1, "A/B/E/beta", MOVED_HERE},
+      {2, "A_moved/B/E/beta",   "base-deleted", NO_COPY_FROM},
+      {1, "A_moved/B/F",        "normal",       1, "A/B/F", MOVED_HERE},
+      {2, "A_moved/B/F",        "base-deleted", NO_COPY_FROM},
+      {1, "A_moved/B/lambda",   "normal",       1, "A/B/lambda", MOVED_HERE},
+      {2, "A_moved/B/lambda",   "base-deleted", NO_COPY_FROM, "A_moved/Z/lambda"},
+      {1, "A_moved/C",          "normal",       1, "A/C", MOVED_HERE},
+      {1, "A_moved/D",          "normal",       1, "A/D", MOVED_HERE},
+      {1, "A_moved/D/G",        "normal",       1, "A/D/G", MOVED_HERE},
+      {1, "A_moved/D/G/pi",     "normal",       1, "A/D/G/pi", MOVED_HERE},
+      {1, "A_moved/D/G/rho",    "normal",       1, "A/D/G/rho", MOVED_HERE},
+      {1, "A_moved/D/G/tau",    "normal",       1, "A/D/G/tau", MOVED_HERE},
+      {1, "A_moved/D/H",        "normal",       1, "A/D/H", MOVED_HERE},
+      {1, "A_moved/D/H/chi",    "normal",       1, "A/D/H/chi", MOVED_HERE},
+      {1, "A_moved/D/H/omega",  "normal",       1, "A/D/H/omega", MOVED_HERE},
+      {1, "A_moved/D/H/psi",    "normal",       1, "A/D/H/psi", MOVED_HERE},
+      {1, "A_moved/D/gamma",    "normal",       1, "A/D/gamma", MOVED_HERE},
+      {2, "A_moved/Z",          "normal",       NO_COPY_FROM},
+      {3, "A_moved/Z/lambda",   "normal",       1, "A/B/lambda", MOVED_HERE},
+      {1, "A_moved/mu",         "normal",       1, "A/mu", MOVED_HERE},
+      {0, "iota", "normal",  1, "iota"},
+
+      {0}
+    };
+
+    SVN_ERR(check_db_rows(&b, "", nodes));
+  }
+
+  return SVN_NO_ERROR;
+}
+
 /* ---------------------------------------------------------------------- */
 /* The list of test functions */
 
@@ -9854,7 +10052,7 @@ static struct svn_test_descriptor_t test
                        "move_replace"),
     SVN_TEST_OPTS_PASS(layered_moved_to,
                        "layered_moved_to"),
-    SVN_TEST_OPTS_XFAIL(update_within_move,
+    SVN_TEST_OPTS_PASS(update_within_move,
                        "update_within_move"),
     SVN_TEST_OPTS_PASS(commit_moved_descendant,
                        "commit_moved_descendant"),
@@ -9876,7 +10074,7 @@ static struct svn_test_descriptor_t test
                        "new_basemove"),
     SVN_TEST_OPTS_PASS(move_back,
                        "move_back (issue 4302)"),
-    SVN_TEST_OPTS_XFAIL(move_update_subtree,
+    SVN_TEST_OPTS_PASS(move_update_subtree,
                        "move_update_subtree (issue 4232)"),
     SVN_TEST_OPTS_PASS(move_parent_into_child,
                        "move_parent_into_child (issue 4333)"),
@@ -9886,7 +10084,7 @@ static struct svn_test_descriptor_t test
                        "move retract (issue 4336)"),
     SVN_TEST_OPTS_PASS(move_delete_file_externals,
                        "move/delete file externals (issue 4293)"),
-    SVN_TEST_OPTS_XFAIL(update_with_tree_conflict,
+    SVN_TEST_OPTS_PASS(update_with_tree_conflict,
                        "update with tree conflict (issue 4347)"),
     SVN_TEST_OPTS_PASS(move_update_parent_replace,
                        "move update with replaced parent (issue 4388)"),
@@ -9916,7 +10114,7 @@ static struct svn_test_descriptor_t test
                        "move4: delete AAA"),
     SVN_TEST_OPTS_PASS(move4_update_add_AAA,
                        "move4: add AAA"),
-    SVN_TEST_OPTS_XFAIL(move4_update_delself_AAA,
+    SVN_TEST_OPTS_PASS(move4_update_delself_AAA,
                        "move4: delete self AAA"),
     SVN_TEST_OPTS_PASS(simple_move_bump,
                        "simple move bump"),
@@ -9924,8 +10122,10 @@ static struct svn_test_descriptor_t test
                        "movedhere extract retract"),
     SVN_TEST_OPTS_PASS(repo_wc_copy,
                        "repo_wc_copy"),
-    SVN_TEST_OPTS_XFAIL(break_move_in_delete,
+    SVN_TEST_OPTS_PASS(break_move_in_delete,
                        "break move in delete (issue 4491)"),
+    SVN_TEST_OPTS_PASS(nested_move_delete,
+                       "nested move delete"),
     SVN_TEST_NULL
   };
 

Modified: subversion/branches/svn-auth-x509/subversion/tests/libsvn_wc/wc-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/tests/libsvn_wc/wc-test.c?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/tests/libsvn_wc/wc-test.c (original)
+++ subversion/branches/svn-auth-x509/subversion/tests/libsvn_wc/wc-test.c Fri Jan 16 14:01:35 2015
@@ -141,7 +141,6 @@ test_node_get_base(const svn_test_opts_t
                                       NULL,
                                       b->wc_ctx, local_abspath,
                                       TRUE /* ignore_enoent */,
-                                      FALSE /* show_hidden */,
                                       b->pool, b->pool));
         SVN_TEST_ASSERT(revision == subtest->base_rev);
         if (SVN_IS_VALID_REVNUM(subtest->base_rev))

Modified: subversion/branches/svn-auth-x509/tools/buildbot/slaves/svn-sparc-solaris/svnbuild.sh
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/tools/buildbot/slaves/svn-sparc-solaris/svnbuild.sh?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/tools/buildbot/slaves/svn-sparc-solaris/svnbuild.sh (original)
+++ subversion/branches/svn-auth-x509/tools/buildbot/slaves/svn-sparc-solaris/svnbuild.sh Fri Jan 16 14:01:35 2015
@@ -28,9 +28,10 @@ SVN_VER_MINOR=`awk '/define SVN_VER_MINO
 cd ../obj
 grep obj/subversion/tests /etc/mnttab > /dev/null || mount-tmpfs
 
-if [ $SVN_VER_MINOR -eq 8 ]; then
-  # A bug causes 1.8 --enable-optimize to add -flto which isn't supported
-  OPTIONS_1_8='--disable-optimize'
+# --enable-optimize adds -flto which breaks the 1.8 C tests because
+# they link main() from a library.
+if [ $SVN_VER_MINOR -gt 8 ]; then
+  OPTIMIZE_OPTION='--enable-optimize'
 fi
 
 echo "============ configure"
@@ -42,7 +43,7 @@ echo "============ configure"
   --with-sqlite=/export/home/wandisco/buildbot/sqlite-amalgamation-3071501/sqlite3.c \
   --enable-optimize \
   --disable-shared \
-  $OPTIONS_1_8 \
+  $OPTIMIZE_OPTION \
   || exit $?
 
 echo "============ make"

Modified: subversion/branches/svn-auth-x509/tools/buildbot/slaves/svn-x64-macosx/svnbuild.sh
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/tools/buildbot/slaves/svn-x64-macosx/svnbuild.sh?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/tools/buildbot/slaves/svn-x64-macosx/svnbuild.sh (original)
+++ subversion/branches/svn-auth-x509/tools/buildbot/slaves/svn-x64-macosx/svnbuild.sh Fri Jan 16 14:01:35 2015
@@ -63,6 +63,14 @@ echo "============ autogen.sh"
 cd ${abssrc}
 ./autogen.sh
 
+svnminor=$(awk '/define *SVN_VER_MINOR/ { print $3 }' subversion/include/svn_version.h)
+
+# --enable-optimize adds -flto which breaks the 1.8 C tests because
+# they link main() from a library.
+if [ ${svnminor} -gt 8 ]; then
+  optimizeconfig=' --enable-optimize'
+fi
+
 #
 # Step 3: Configure
 #
@@ -72,8 +80,7 @@ cd ${absbld}
 env CC=clang CXX=clang++ \
 ${abssrc}/configure \
     --prefix="${absbld}/.install-prefix" \
-    --disable-debug \
-    --enable-optimize \
+    --disable-debug${optimizeconfig} \
     --disable-nls \
     --disable-mod-activation \
     ${aprconfig}${serfconfig} \
@@ -82,6 +89,7 @@ ${abssrc}/configure \
     --enable-javahl \
     --without-jikes \
     --with-junit="${SVNBB_JUNIT}"
+
 test -f config.log && mv config.log "${abssrc}/.test-logs/config.log"
 
 #

Modified: subversion/branches/svn-auth-x509/tools/buildbot/slaves/win32-SharpSvn/svntest-bindings.cmd
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/tools/buildbot/slaves/win32-SharpSvn/svntest-bindings.cmd?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/tools/buildbot/slaves/win32-SharpSvn/svntest-bindings.cmd (original)
+++ subversion/branches/svn-auth-x509/tools/buildbot/slaves/win32-SharpSvn/svntest-bindings.cmd Fri Jan 16 14:01:35 2015
@@ -75,7 +75,7 @@ if "%SVN_BRANCH%" GTR "1.9." (
 
     IF ERRORLEVEL 1 (
         echo [Perl tests reported error !ERRORLEVEL!] 1>&2
-        REM SET result=1
+        SET result=1
     ) ELSE (
         echo Done.
     )

Modified: subversion/branches/svn-auth-x509/tools/dev/unix-build/Makefile.svn
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/tools/dev/unix-build/Makefile.svn?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/tools/dev/unix-build/Makefile.svn (original)
+++ subversion/branches/svn-auth-x509/tools/dev/unix-build/Makefile.svn Fri Jan 16 14:01:35 2015
@@ -1555,6 +1555,9 @@ endif
 	echo >>$@.tmp 'RedirectMatch permanent ^/svn-test-work/repositories/REDIRECT-PERM-(.*)$$ /svn-test-work/repositories/$$1'
 	echo >>$@.tmp 'RedirectMatch ^/svn-test-work/repositories/REDIRECT-TEMP-(.*)$$ /svn-test-work/repositories/$$1'
 	echo >>$@.tmp 'Include "conf/$(SVN_REL_WC)*-custom.conf"'
+	echo >> $@.tmp '#SVNInMemoryCacheSize 0'
+	echo >> $@.tmp '#SVNCacheTextDeltas Off'
+	echo >> $@.tmp '#SVNCacheRevProps Off'
 	mv -f $@.tmp $@
 
 .PHONY: libpath

Modified: subversion/branches/svn-auth-x509/tools/hook-scripts/mailer/tests/mailer-init.sh
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/tools/hook-scripts/mailer/tests/mailer-init.sh?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/tools/hook-scripts/mailer/tests/mailer-init.sh (original)
+++ subversion/branches/svn-auth-x509/tools/hook-scripts/mailer/tests/mailer-init.sh Fri Jan 16 14:01:35 2015
@@ -101,14 +101,14 @@ echo change C6 >> dir6/file4
 svn commit -m "copy dir, then make a change"
 
 # add a binary file and set property to binary value
-echo -e "\x00\x01\x02\x03\x04" > file11
+printf "\x00\x01\x02\x03\x04\n" > file11
 svn add file11
 svn ps svn:mime-type application/octect-stream file11
 svn ps prop2 -F file11 file9 
 svn commit -m "add binary file"
 
 # change the binary file and set property to non binary value
-echo -e "\x20\x01\x02\x20" > file11
+printf "\x20\x01\x02\x20\n" > file11
 svn ps prop2 propval2 file9 
 svn commit -m "change binary file"
 

Modified: subversion/branches/svn-auth-x509/win-tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/win-tests.py?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/win-tests.py (original)
+++ subversion/branches/svn-auth-x509/win-tests.py Fri Jan 16 14:01:35 2015
@@ -866,6 +866,7 @@ elif test_swig == 'perl':
   perl_exe = 'perl.exe'
 
   print('-- Running Swig Perl tests --')
+  sys.stdout.flush()
   old_cwd = os.getcwd()
   try:
     os.chdir(pm_src)
@@ -884,7 +885,6 @@ elif test_swig == 'perl':
   if (r != 0):
     print('[Test runner reported failure]')
     failed = True
-  sys.exit(1)
 elif test_swig == 'python':
   failed = False
   swig_dir = os.path.join(abs_builddir, 'swig')
@@ -916,6 +916,7 @@ elif test_swig == 'python':
                         to_dir=swig_py_svn)
 
   print('-- Running Swig Python tests --')
+  sys.stdout.flush()
 
   pythonpath = swig_py_dir
   if 'PYTHONPATH' in os.environ:
@@ -954,6 +955,7 @@ elif test_swig == 'ruby':
       ]
 
     print('-- Running Swig Ruby tests --')
+    sys.stdout.flush()
     old_cwd = os.getcwd()
     try:
       os.chdir(ruby_subdir)