subversion-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From stef...@apache.org
Subject svn commit: r1476675 [16/17] - in /subversion/branches/fsfs-format7: ./ build/ build/ac-macros/ build/generator/ build/generator/templates/ contrib/hook-scripts/ contrib/server-side/svncutter/ subversion/bindings/cxxhl/include/ subversion/bindings/cxxh...
Date Sat, 27 Apr 2013 21:30:43 GMT
Modified: subversion/branches/fsfs-format7/subversion/tests/libsvn_repos/repos-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_repos/repos-test.c?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/libsvn_repos/repos-test.c (original)
+++ subversion/branches/fsfs-format7/subversion/tests/libsvn_repos/repos-test.c Sat Apr 27 21:30:36 2013
@@ -29,11 +29,13 @@
 #include "svn_pools.h"
 #include "svn_error.h"
 #include "svn_fs.h"
+#include "svn_hash.h"
 #include "svn_repos.h"
 #include "svn_path.h"
 #include "svn_delta.h"
 #include "svn_config.h"
 #include "svn_props.h"
+#include "svn_version.h"
 
 #include "../svn_test_fs.h"
 
@@ -1402,6 +1404,7 @@ in_repo_authz(const svn_test_opts_t *opt
   const char *repos_root;
   const char *repos_url;
   const char *authz_url;
+  const char *noent_authz_url;
   svn_error_t *err;
   struct check_access_tests test_set[] = {
     /* reads */
@@ -1420,15 +1423,15 @@ in_repo_authz(const svn_test_opts_t *opt
    * Create an authz file and put it in the repository.
    * Verify it can be read with an relative URL.
    * Verify it can be read with an absolute URL.
-   * Verify non-existant path does not error out when must_exist is FALSE. 
+   * Verify non-existant path does not error out when must_exist is FALSE.
    * Verify non-existant path does error out when must_exist is TRUE.
    * Verify that an http:// URL produces an error.
    * Verify that an svn:// URL produces an error.
    */
 
   /* What we'll put in the authz file, it's simple since we're not testing
-   * the parsing, just that we got what we expected. */ 
-  authz_contents = 
+   * the parsing, just that we got what we expected. */
+  authz_contents =
     ""                                                                       NL
     ""                                                                       NL
     "[/]"                                                                    NL
@@ -1449,27 +1452,21 @@ in_repo_authz(const svn_test_opts_t *opt
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
   SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
-  /* repos relative URL */
   repos_root = svn_repos_path(repos, pool);
-  SVN_ERR(svn_repos_authz_read2(&authz_cfg, "^/authz", NULL, TRUE,
-                                repos_root, pool));
-  SVN_ERR(authz_check_access(authz_cfg, test_set, pool));
-
-  /* absolute file URL, repos_root is NULL to validate the contract that it
-   * is not needed except when a repos relative URL is passed. */
   SVN_ERR(svn_uri_get_file_url_from_dirent(&repos_url, repos_root, pool));
   authz_url = apr_pstrcat(pool, repos_url, "/authz", (char *)NULL);
-  SVN_ERR(svn_repos_authz_read2(&authz_cfg, authz_url, NULL, TRUE,
-                                NULL, pool));
+  noent_authz_url = apr_pstrcat(pool, repos_url, "/A/authz", (char *)NULL);
+
+  /* absolute file URL. */
+  SVN_ERR(svn_repos_authz_read2(&authz_cfg, authz_url, NULL, TRUE, pool));
   SVN_ERR(authz_check_access(authz_cfg, test_set, pool));
-  
-  /* Non-existant path in the repo with must_exist set to FALSE */ 
-  SVN_ERR(svn_repos_authz_read2(&authz_cfg, "^/A/authz", NULL, FALSE,
-                                repos_root, pool));
-
-  /* Non-existant path in the repo with must_exist set to TRUE */ 
-  err = svn_repos_authz_read2(&authz_cfg, "^/A/authz", NULL, TRUE,
-                              repos_root, pool);
+
+  /* Non-existant path in the repo with must_exist set to FALSE */
+  SVN_ERR(svn_repos_authz_read2(&authz_cfg, noent_authz_url, NULL,
+                                FALSE, pool));
+
+  /* Non-existant path in the repo with must_exist set to TRUE */
+  err = svn_repos_authz_read2(&authz_cfg, noent_authz_url, NULL, TRUE, pool);
   if (!err || err->apr_err != SVN_ERR_ILLEGAL_TARGET)
     return svn_error_createf(SVN_ERR_TEST_FAILED, err,
                              "Got %s error instead of expected "
@@ -1479,7 +1476,7 @@ in_repo_authz(const svn_test_opts_t *opt
 
   /* http:// URL which is unsupported */
   err = svn_repos_authz_read2(&authz_cfg, "http://example.com/repo/authz",
-                              NULL, TRUE, repos_root, pool);
+                              NULL, TRUE, pool);
   if (!err || err->apr_err != SVN_ERR_RA_ILLEGAL_URL)
     return svn_error_createf(SVN_ERR_TEST_FAILED, err,
                              "Got %s error instead of expected "
@@ -1489,7 +1486,7 @@ in_repo_authz(const svn_test_opts_t *opt
 
   /* svn:// URL which is unsupported */
   err = svn_repos_authz_read2(&authz_cfg, "svn://example.com/repo/authz",
-                              NULL, TRUE, repos_root, pool);
+                              NULL, TRUE, pool);
   if (!err || err->apr_err != SVN_ERR_RA_ILLEGAL_URL)
     return svn_error_createf(SVN_ERR_TEST_FAILED, err,
                              "Got %s error instead of expected "
@@ -1518,7 +1515,10 @@ in_repo_groups_authz(const svn_test_opts
   const char *repos_root;
   const char *repos_url;
   const char *groups_url;
+  const char *noent_groups_url;
   const char *authz_url;
+  const char *empty_authz_url;
+  const char *noent_authz_url;
   svn_error_t *err;
   struct check_access_tests test_set[] = {
     /* reads */
@@ -1590,38 +1590,34 @@ in_repo_groups_authz(const svn_test_opts
   SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
   SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
 
-  /* repos relative URLs */
+  /* Calculate URLs */
   repos_root = svn_repos_path(repos, pool);
-  SVN_ERR(svn_repos_authz_read2(&authz_cfg, "^/authz", "^/groups",
-                                TRUE, repos_root, pool));
-  SVN_ERR(authz_check_access(authz_cfg, test_set, pool));
-
-  /* absolute file URLs, repos_root is NULL to validate the contract that it
-   * is not needed except when a repos relative URLs are passed. */
   SVN_ERR(svn_uri_get_file_url_from_dirent(&repos_url, repos_root, pool));
   authz_url = apr_pstrcat(pool, repos_url, "/authz", (char *)NULL);
+  empty_authz_url = apr_pstrcat(pool, repos_url, "/empty-authz", (char *)NULL);
+  noent_authz_url = apr_pstrcat(pool, repos_url, "/A/authz", (char *)NULL);
   groups_url = apr_pstrcat(pool, repos_url, "/groups", (char *)NULL);
-  SVN_ERR(svn_repos_authz_read2(&authz_cfg, authz_url, groups_url,
-                                TRUE, NULL, pool));
+  noent_groups_url = apr_pstrcat(pool, repos_url, "/A/groups", (char *)NULL);
+
+
+  /* absolute file URLs. */
+  SVN_ERR(svn_repos_authz_read2(&authz_cfg, authz_url, groups_url, TRUE, pool));
   SVN_ERR(authz_check_access(authz_cfg, test_set, pool));
 
   /* Non-existent path for the groups file with must_exist
    * set to TRUE */
-  SVN_ERR(svn_repos_authz_read2(&authz_cfg, "^/empty-authz",
-                                "^/A/groups", FALSE,
-                                repos_root, pool));
+  SVN_ERR(svn_repos_authz_read2(&authz_cfg, empty_authz_url, noent_groups_url,
+                                FALSE, pool));
 
   /* Non-existent paths for both the authz and the groups files
    * with must_exist set to TRUE */
-  SVN_ERR(svn_repos_authz_read2(&authz_cfg, "^/A/authz",
-                                "^/A/groups", FALSE,
-                                repos_root, pool));
+  SVN_ERR(svn_repos_authz_read2(&authz_cfg, noent_authz_url, noent_groups_url,
+                                FALSE, pool));
 
   /* Non-existent path for the groups file with must_exist
    * set to TRUE */
-  err = svn_repos_authz_read2(&authz_cfg, "^/empty-authz",
-                              "^/A/groups", TRUE,
-                              repos_root, pool);
+  err = svn_repos_authz_read2(&authz_cfg, empty_authz_url, noent_groups_url,
+                              TRUE, pool);
   if (!err || err->apr_err != SVN_ERR_ILLEGAL_TARGET)
     return svn_error_createf(SVN_ERR_TEST_FAILED, err,
                              "Got %s error instead of expected "
@@ -1630,9 +1626,9 @@ in_repo_groups_authz(const svn_test_opts
   svn_error_clear(err);
 
   /* http:// URL which is unsupported */
-  err = svn_repos_authz_read2(&authz_cfg, "^/empty-authz",
+  err = svn_repos_authz_read2(&authz_cfg, empty_authz_url,
                               "http://example.com/repo/groups",
-                              TRUE, repos_root, pool);
+                              TRUE, pool);
   if (!err || err->apr_err != SVN_ERR_RA_ILLEGAL_URL)
     return svn_error_createf(SVN_ERR_TEST_FAILED, err,
                              "Got %s error instead of expected "
@@ -1641,9 +1637,9 @@ in_repo_groups_authz(const svn_test_opts
   svn_error_clear(err);
 
   /* svn:// URL which is unsupported */
-  err = svn_repos_authz_read2(&authz_cfg, "^/empty-authz",
+  err = svn_repos_authz_read2(&authz_cfg, empty_authz_url,
                               "http://example.com/repo/groups",
-                              TRUE, repos_root, pool);
+                              TRUE, pool);
   if (!err || err->apr_err != SVN_ERR_RA_ILLEGAL_URL)
     return svn_error_createf(SVN_ERR_TEST_FAILED, err,
                              "Got %s error instead of expected "
@@ -1687,7 +1683,7 @@ authz_groups_get_handle(svn_authz_t **au
 
       /* Read the authz configuration back and start testing. */
       SVN_ERR_W(svn_repos_authz_read2(authz_p, authz_file_path,
-                                      groups_file_path, TRUE, NULL, pool),
+                                      groups_file_path, TRUE, pool),
                 "Opening test authz and groups files");
 
       /* Done with the files. */
@@ -2038,6 +2034,9 @@ test_path_authz(svn_repos_t *repos,
                                     path_action->copyfrom_path, youngest_rev,
                                     scratch_pool, &out_baton);
         break;
+
+      default:
+        SVN_TEST_ASSERT(FALSE);
     }
 
   /* Don't worry about closing batons, just abort the edit.  Since errors
@@ -3192,7 +3191,7 @@ filename_with_control_chars(const svn_te
   const svn_delta_editor_t *editor;
 
   /* Create the repository. */
-  SVN_ERR(svn_test__create_repos(&repos, "test-repos-filename-with-cntrl-chars",
+  SVN_ERR(svn_test__create_repos(&repos, "test-repo-filename-with-cntrl-chars",
                                  opts, pool));
   fs = svn_repos_fs(repos);
 
@@ -3259,6 +3258,45 @@ filename_with_control_chars(const svn_te
 
   return SVN_NO_ERROR;
 }
+
+static svn_error_t *
+test_repos_info(const svn_test_opts_t *opts,
+                apr_pool_t *pool)
+{
+  svn_repos_t *repos;
+  svn_test_opts_t opts2;
+  apr_hash_t *capabilities;
+  svn_version_t *supports_version;
+  svn_version_t v1_0_0 = {1, 0, 0, ""};
+  svn_version_t v1_4_0 = {1, 4, 0, ""};
+  int repos_format;
+
+  opts2 = *opts;
+
+  opts2.server_minor_version = 3;
+  SVN_ERR(svn_test__create_repos(&repos, "test-repo-info-3",
+                                 &opts2, pool));
+  SVN_ERR(svn_repos_capabilities(&capabilities, repos, pool, pool));
+  SVN_TEST_ASSERT(apr_hash_count(capabilities) == 0);
+  SVN_ERR(svn_repos_info_format(&repos_format, &supports_version, repos,
+                                pool, pool));
+  SVN_TEST_ASSERT(repos_format == 3);
+  SVN_TEST_ASSERT(svn_ver_equal(supports_version, &v1_0_0));
+
+  opts2.server_minor_version = 8;
+  SVN_ERR(svn_test__create_repos(&repos, "test-repo-info-8",
+                                 &opts2, pool));
+  SVN_ERR(svn_repos_capabilities(&capabilities, repos, pool, pool));
+  SVN_TEST_ASSERT(apr_hash_count(capabilities) == 1);
+  SVN_TEST_ASSERT(svn_hash_gets(capabilities, SVN_REPOS_CAPABILITY_MERGEINFO));
+  SVN_ERR(svn_repos_info_format(&repos_format, &supports_version, repos,
+                                pool, pool));
+  SVN_TEST_ASSERT(repos_format == 5);
+  SVN_TEST_ASSERT(svn_ver_equal(supports_version, &v1_4_0));
+
+  return SVN_NO_ERROR;
+}
+
 
 /* The test table.  */
 
@@ -3305,5 +3343,7 @@ struct svn_test_descriptor_t test_funcs[
                        "test svn_repos_delete"),
     SVN_TEST_OPTS_PASS(filename_with_control_chars,
                        "test filenames with control characters"),
+    SVN_TEST_OPTS_PASS(test_repos_info,
+                       "test svn_repos_info_*"),
     SVN_TEST_NULL
   };

Propchange: subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Sat Apr 27 21:30:36 2013
@@ -13,6 +13,7 @@ compat-test
 config-test
 crypto-test
 error-test
+error-code-test
 hashdump-test
 hashdump.out
 hashdump2.out
@@ -40,3 +41,4 @@ named_atomic-test
 named_atomic-proc-test
 io-test
 io-test-temp
+auth-clear

Modified: subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/auth-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/auth-test.c?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/auth-test.c (original)
+++ subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/auth-test.c Sat Apr 27 21:30:36 2013
@@ -208,20 +208,21 @@ test_platform_specific_auth_providers(ap
   return SVN_NO_ERROR;
 }
 
-/* Helper for test_auth_clear(). Implements svn_auth_cleanup_callback */
+/* Helper for test_auth_clear(). Implements svn_config_auth_walk_func_t */
 static svn_error_t *
 cleanup_callback(svn_boolean_t *delete_cred,
-                 void *cleanup_baton,
+                 void *walk_baton,
                  const char *cred_kind,
                  const char *realmstring,
-                 const char *provider,
+                 apr_hash_t *cred_hash,
                  apr_pool_t *scratch_pool)
 {
-  if (!strcmp(provider, SVN_AUTH__SIMPLE_PASSWORD_TYPE))
-    return SVN_NO_ERROR;
+  svn_auth_baton_t *b = walk_baton;
 
-  SVN_TEST_ASSERT(! strcmp(cred_kind, SVN_AUTH_CRED_SIMPLE));
-  SVN_TEST_ASSERT(! strcmp(realmstring, "<http://my.host> My realm"));
+  SVN_TEST_ASSERT(strcmp(cred_kind, SVN_AUTH_CRED_SIMPLE) == 0);
+  SVN_TEST_ASSERT(strcmp(realmstring, "<http://my.host> My realm") == 0);
+
+  SVN_ERR(svn_auth_forget_credentials(b, cred_kind, realmstring, scratch_pool));
 
   *delete_cred = TRUE;
 
@@ -270,7 +271,7 @@ test_auth_clear(apr_pool_t *pool)
                                      pool));
 
   creds = credentials;
-  SVN_TEST_ASSERT(! strcmp(creds->username, "jrandom"));
+  SVN_TEST_ASSERT(strcmp(creds->username, "jrandom") == 0);
   SVN_TEST_ASSERT(creds->may_save);
 
   /* And tell that they are ok and can be saved */
@@ -290,14 +291,14 @@ test_auth_clear(apr_pool_t *pool)
 
   SVN_TEST_ASSERT(credentials);
   creds = credentials;
-  SVN_TEST_ASSERT(! strcmp(creds->username, "jrandom"));
+  SVN_TEST_ASSERT(strcmp(creds->username, "jrandom") == 0);
   SVN_TEST_ASSERT(creds->may_save);
 
+  /* Use our walker function to delete credentials (and forget them
+     from the auth baton). */
+  SVN_ERR(svn_config_walk_auth_data(auth_dir, cleanup_callback, baton, pool));
 
-  SVN_ERR(svn_auth_cleanup_walk(baton,
-                                cleanup_callback, NULL,
-                                pool));
-
+  /* Finally, they should be gone! */
   SVN_ERR(svn_auth_first_credentials(&credentials,
                                      &state,
                                      SVN_AUTH_CRED_SIMPLE,

Modified: subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/cache-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/cache-test.c?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/cache-test.c (original)
+++ subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/cache-test.c Sat Apr 27 21:30:36 2013
@@ -155,8 +155,8 @@ test_memcache_basic(const svn_test_opts_
 
   if (opts->config_file)
     {
-      SVN_ERR(svn_config_read2(&config, opts->config_file,
-                               TRUE, FALSE, pool));
+      SVN_ERR(svn_config_read3(&config, opts->config_file,
+                               TRUE, FALSE, FALSE, pool));
       SVN_ERR(svn_cache__make_memcache_from_config(&memcache, config, pool));
     }
 
@@ -224,8 +224,8 @@ test_memcache_long_key(const svn_test_op
 
   if (opts->config_file)
     {
-      SVN_ERR(svn_config_read2(&config, opts->config_file,
-                               TRUE, FALSE, pool));
+      SVN_ERR(svn_config_read3(&config, opts->config_file,
+                               TRUE, FALSE, FALSE, pool));
       SVN_ERR(svn_cache__make_memcache_from_config(&memcache, config, pool));
     }
 

Modified: subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/checksum-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/checksum-test.c?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/checksum-test.c (original)
+++ subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/checksum-test.c Sat Apr 27 21:30:36 2013
@@ -103,7 +103,7 @@ test_pseudo_md5(apr_pool_t *pool)
   /* the checksums shall also be different from "proper" MD5 */
   SVN_ERR(svn_checksum(&checksum, svn_checksum_md5, input, 15, pool));
   SVN_TEST_ASSERT(memcmp(digest_15, checksum->digest, sizeof(digest_15)));
-  
+
   SVN_ERR(svn_checksum(&checksum, svn_checksum_md5, input, 31, pool));
   SVN_TEST_ASSERT(memcmp(digest_31, checksum->digest, sizeof(digest_15)));
 
@@ -122,8 +122,8 @@ zero_match(apr_pool_t *pool)
   svn_checksum_t *B_md5;
   svn_checksum_t *A_sha1;
   svn_checksum_t *B_sha1;
-  
-  
+
+
   zero_md5 = svn_checksum_create(svn_checksum_md5, pool);
   SVN_ERR(svn_checksum_clear(zero_md5));
   SVN_ERR(svn_checksum(&A_md5, svn_checksum_md5, "A", 1, pool));

Modified: subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/compat-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/compat-test.c?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/compat-test.c (original)
+++ subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/compat-test.c Sat Apr 27 21:30:36 2013
@@ -162,7 +162,7 @@ test_version_parsing(apr_pool_t *pool)
         }
     }
   svn_pool_destroy(iterpool);
-  
+
   return SVN_NO_ERROR;
 }
 
@@ -204,7 +204,7 @@ test_version_at_least(apr_pool_t *pool)
         return svn_error_create(SVN_ERR_TEST_FAILED, NULL,
                                 "Expected at-least to be TRUE; got FALSE");
     }
-  
+
   return SVN_NO_ERROR;
 }
 

Modified: subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/config-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/config-test.c?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/config-test.c (original)
+++ subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/config-test.c Sat Apr 27 21:30:36 2013
@@ -109,7 +109,7 @@ test_text_retrieval(apr_pool_t *pool)
     SVN_ERR(init_params(pool));
 
   cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", (char *)NULL);
-  SVN_ERR(svn_config_read2(&cfg, cfg_file, TRUE, FALSE, pool));
+  SVN_ERR(svn_config_read3(&cfg, cfg_file, TRUE, FALSE, FALSE, pool));
 
   /* Test values retrieved from our ConfigParser instance against
      values retrieved using svn_config. */
@@ -160,7 +160,7 @@ test_boolean_retrieval(apr_pool_t *pool)
     SVN_ERR(init_params(pool));
 
   cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", (char *)NULL);
-  SVN_ERR(svn_config_read2(&cfg, cfg_file, TRUE, FALSE, pool));
+  SVN_ERR(svn_config_read3(&cfg, cfg_file, TRUE, FALSE, FALSE, pool));
 
   for (i = 0; true_keys[i] != NULL; i++)
     {
@@ -220,7 +220,7 @@ test_has_section_case_insensitive(apr_po
     SVN_ERR(init_params(pool));
 
   cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", (char *)NULL);
-  SVN_ERR(svn_config_read2(&cfg, cfg_file, TRUE, FALSE, pool));
+  SVN_ERR(svn_config_read3(&cfg, cfg_file, TRUE, FALSE, FALSE, pool));
 
   if (! svn_config_has_section(cfg, "section1"))
     return fail(pool, "Failed to find section1");
@@ -250,7 +250,7 @@ test_has_section_case_sensitive(apr_pool
     SVN_ERR(init_params(pool));
 
   cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", (char *)NULL);
-  SVN_ERR(svn_config_read2(&cfg, cfg_file, TRUE, TRUE, pool));
+  SVN_ERR(svn_config_read3(&cfg, cfg_file, TRUE, TRUE, FALSE, pool));
 
   if (! svn_config_has_section(cfg, "section1"))
     return fail(pool, "Failed to find section1");
@@ -271,6 +271,48 @@ test_has_section_case_sensitive(apr_pool
 }
 
 static svn_error_t *
+test_has_option_case_sensitive(apr_pool_t *pool)
+{
+  svn_config_t *cfg;
+  const char *cfg_file;
+  apr_int64_t value;
+  int i;
+
+  static struct test_dataset {
+    const char *option;
+    apr_int64_t value;
+  } const test_data[] = {
+    { "a", 1 },
+    { "A", 2 },
+    { "B", 3 },
+    { "b", 4 }
+  };
+  static const int test_data_size = sizeof(test_data)/sizeof(*test_data);
+
+  if (!srcdir)
+    SVN_ERR(init_params(pool));
+
+  cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", (char *)NULL);
+  SVN_ERR(svn_config_read3(&cfg, cfg_file, TRUE, TRUE, TRUE, pool));
+
+  for (i = 0; i < test_data_size; ++i)
+    {
+      SVN_ERR(svn_config_get_int64(cfg, &value, "case-sensitive-option",
+                                   test_data[i].option, -1));
+      if (test_data[i].value != value)
+        return fail(pool,
+                    apr_psprintf(pool,
+                                 "case-sensitive-option.%s != %"
+                                 APR_INT64_T_FMT" but %"APR_INT64_T_FMT,
+                                 test_data[i].option,
+                                 test_data[i].value,
+                                 value));
+    }
+
+  return SVN_NO_ERROR;
+}
+
+static svn_error_t *
 test_stream_interface(apr_pool_t *pool)
 {
   svn_config_t *cfg;
@@ -283,7 +325,7 @@ test_stream_interface(apr_pool_t *pool)
   cfg_file = apr_pstrcat(pool, srcdir, "/", "config-test.cfg", (char *)NULL);
   SVN_ERR(svn_stream_open_readonly(&stream, cfg_file, pool, pool));
 
-  SVN_ERR(svn_config_parse(&cfg, stream, TRUE, pool));
+  SVN_ERR(svn_config_parse(&cfg, stream, TRUE, TRUE, pool));
 
   /* nominal test to make sure cfg is populated with something since
    * svn_config_parse will happily return an empty cfg if the stream is
@@ -313,6 +355,8 @@ struct svn_test_descriptor_t test_funcs[
                    "test svn_config_has_section (case insensitive)"),
     SVN_TEST_PASS2(test_has_section_case_sensitive,
                    "test svn_config_has_section (case sensitive)"),
+    SVN_TEST_PASS2(test_has_option_case_sensitive,
+                   "test case-sensitive option name lookup"),
     SVN_TEST_PASS2(test_stream_interface,
                    "test svn_config_parse"),
     SVN_TEST_NULL

Modified: subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/config-test.cfg
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/config-test.cfg?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/config-test.cfg (original)
+++ subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/config-test.cfg Sat Apr 27 21:30:36 2013
@@ -55,3 +55,9 @@ false2 = no
 false3 = oFf
 false4 = 0
 bad_false = nyet!
+
+[case-sensitive-option]
+a = 1
+A = 2
+B = 3
+b = 4

Modified: subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/error-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/error-test.c?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/error-test.c (original)
+++ subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/error-test.c Sat Apr 27 21:30:36 2013
@@ -182,6 +182,49 @@ test_error_purge_tracing(apr_pool_t *poo
   return SVN_NO_ERROR;
 }
 
+static svn_error_t *
+test_error_symbolic_name(apr_pool_t *pool)
+{
+  struct {
+    svn_errno_t errcode;
+    const char *errname;
+  } errors[] = {
+    { SVN_ERR_BAD_CONTAINING_POOL, "SVN_ERR_BAD_CONTAINING_POOL" },
+    { SVN_ERR_BAD_FILENAME, "SVN_ERR_BAD_FILENAME" },
+    { SVN_ERR_XML_ATTRIB_NOT_FOUND, "SVN_ERR_XML_ATTRIB_NOT_FOUND" },
+    { SVN_ERR_ENTRY_NOT_FOUND, "SVN_ERR_ENTRY_NOT_FOUND" },
+    { SVN_ERR_ENTRY_CATEGORY_START + 1, NULL }, /* unused slot */
+    { SVN_ERR_ENTRY_EXISTS, "SVN_ERR_ENTRY_EXISTS" },
+    { SVN_ERR_ASSERTION_ONLY_TRACING_LINKS, "SVN_ERR_ASSERTION_ONLY_TRACING_LINKS" },
+    { SVN_ERR_FS_CORRUPT, "SVN_ERR_FS_CORRUPT" },
+    /* The following two error codes can return either of their names
+       as the string. For simplicity, test what the current implementation
+       returns; but if it starts returning "SVN_ERR_WC_NOT_DIRECTORY",
+       that's fine (and permitted by the API contract). */
+    { SVN_ERR_WC_NOT_DIRECTORY, "SVN_ERR_WC_NOT_WORKING_COPY" },
+    { SVN_ERR_WC_NOT_WORKING_COPY, "SVN_ERR_WC_NOT_WORKING_COPY" },
+    /* Test an implementation detail. */
+    { SVN_ERR_BAD_CATEGORY_START, "SVN_ERR_BAD_CONTAINING_POOL" },
+#ifdef SVN_DEBUG
+    { ENOENT, "ENOENT" },
+#endif
+    /* Test non-errors. */
+    { -1, NULL },
+    { SVN_ERR_WC_CATEGORY_START - 1, NULL },
+    /* Whitebox-test exceptional cases. */
+    { SVN_WARNING, "SVN_WARNING" },
+    { 0, "SVN_NO_ERROR" }
+    /* No sentinel. */
+  };
+  int i;
+
+  for (i = 0; i < sizeof(errors) / sizeof(errors[0]); i++)
+    SVN_TEST_STRING_ASSERT(svn_error_symbolic_name(errors[i].errcode),
+                           errors[i].errname);
+
+  return SVN_NO_ERROR;
+}
+
 
 /* The test table.  */
 
@@ -192,5 +235,7 @@ struct svn_test_descriptor_t test_funcs[
                    "test svn_error_root_cause"),
     SVN_TEST_PASS2(test_error_purge_tracing,
                    "test svn_error_purge_tracing"),
+    SVN_TEST_PASS2(test_error_symbolic_name,
+                   "test svn_error_symbolic_name"),
     SVN_TEST_NULL
   };

Modified: subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/named_atomic-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/named_atomic-test.c?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/named_atomic-test.c (original)
+++ subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/named_atomic-test.c Sat Apr 27 21:30:36 2013
@@ -118,7 +118,7 @@ static apr_status_t
 cleanup_test_shm(void *arg)
 {
   apr_pool_t *pool = arg;
-  
+
   svn_error_clear(svn_atomic_namespace__cleanup(name_namespace, pool));
   svn_error_clear(svn_atomic_namespace__cleanup(name_namespace1, pool));
   svn_error_clear(svn_atomic_namespace__cleanup(name_namespace2, pool));

Modified: subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/path-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/path-test.c?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/path-test.c (original)
+++ subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/path-test.c Sat Apr 27 21:30:36 2013
@@ -1685,7 +1685,7 @@ test_path_resolve_repos_relative_url(apr
                                  tests[i].repos_root_url,
                                  result, tests[i].absolute_url);
     }
-  
+
   return SVN_NO_ERROR;
 }
 

Modified: subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/string-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/string-test.c?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/string-test.c (original)
+++ subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/string-test.c Sat Apr 27 21:30:36 2013
@@ -564,7 +564,7 @@ test_stringbuf_insert(apr_pool_t *pool)
 
   svn_stringbuf_insert(a, 6, a->data + 1, 1);
   SVN_TEST_STRING_ASSERT(a->data, "test hello, ");
-  
+
   svn_stringbuf_insert(a, 12, "world class", 5);
   SVN_TEST_STRING_ASSERT(a->data, "test hello, world");
 

Modified: subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/subst_translate-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/subst_translate-test.c?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/subst_translate-test.c (original)
+++ subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/subst_translate-test.c Sat Apr 27 21:30:36 2013
@@ -23,12 +23,14 @@
 
 #include <locale.h>
 #include <string.h>
+#include <apr_time.h>
 
 #include "../svn_test.h"
 
 #include "svn_types.h"
 #include "svn_string.h"
 #include "svn_subst.h"
+#include "svn_hash.h"
 
 #define ARRAY_LEN(ary) ((sizeof (ary)) / (sizeof ((ary)[0])))
 
@@ -246,6 +248,253 @@ test_svn_subst_translate_cstring2(apr_po
   return SVN_NO_ERROR;
 }
 
+static svn_error_t *
+test_svn_subst_build_keywords3(apr_pool_t *pool)
+{
+  /* Test expansion of custom keywords. */
+  struct keywords_tests_data
+    {
+      const char *keyword_name;
+      const char *keywords_string;
+      const char *expanded_keyword;
+      const char *rev;
+      const char *url;
+      const char *repos_root_url;
+      /* Can't test date since expanded value depends on local clock. */
+      const char *author;
+    }
+  tests[] =
+    {
+      {"FOO", "FOO=%P%_%a%_%b%_%%",
+       "trunk/foo.txt stsp foo.txt %",
+       "1234", "http://svn.example.com/repos/trunk/foo.txt",
+       "http://svn.example.com/repos", "stsp"},
+      {"MyKeyword", "MyKeyword=%r%_%u%_%_%a",
+       "4567 http://svn.example.com/svn/branches/myfile  jrandom",
+       "4567", "http://svn.example.com/svn/branches/myfile",
+       "http://svn.example.com/svn", "jrandom"},
+      {"FreeBSD", "FreeBSD=%H",
+       "head/README 222812  joel", /* date is not expanded in this test */
+       "222812", "http://svn.freebsd.org/base/head/README",
+       "http://svn.freebsd.org/base", "joel"},
+      {"FreeBSD", "FreeBSD=%I",
+       "README 222812  joel", /* date is not expanded in this test */
+       "222812", "http://svn.freebsd.org/base/head/README",
+       "http://svn.freebsd.org/base", "joel"},
+      { NULL, NULL, NULL, NULL, NULL, NULL, NULL}
+  };
+
+  const struct keywords_tests_data *t;
+
+  for (t = tests; t->keyword_name != NULL; t++)
+    {
+      apr_hash_t *kw;
+      svn_string_t *expanded_keyword;
+
+      SVN_ERR(svn_subst_build_keywords3(&kw, t->keywords_string,
+                                        t->rev, t->url, t->repos_root_url,
+                                        0 /* date */, t->author, pool));
+      expanded_keyword = svn_hash_gets(kw, t->keyword_name);
+      SVN_TEST_STRING_ASSERT(expanded_keyword->data, t->expanded_keyword);
+    }
+
+  return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_svn_subst_truncated_keywords(apr_pool_t *pool)
+{
+  svn_string_t *src_string
+    = svn_string_create("$Qq: "
+                        "01234567890123456789012345678901234567890123456789"
+                        "01234567890123456789012345678901234567890123456789"
+                        "01234567890123456789012345678901234567890123456789"
+                        "01234567890123456789012345678901234567890123456789"
+                        "012345678901234567890123456789012345678901234567"
+                        " $", pool);
+  svn_stream_t *src_stream = svn_stream_from_string(src_string, pool);
+  svn_stringbuf_t *dst_stringbuf = svn_stringbuf_create_empty(pool);
+  svn_stream_t *dst_stream = svn_stream_from_stringbuf(dst_stringbuf, pool);
+  apr_hash_t *keywords = apr_hash_make(pool);
+  svn_string_t *expanded
+    = svn_string_create("01234567890123456789012345678901234567890123456789"
+                        "01234567890123456789012345678901234567890123456789"
+                        "01234567890123456789012345678901234567890123456789"
+                        "01234567890123456789012345678901234567890123456789"
+                        "012345678901234567890123456789012345678901234567"
+                        "xxxxxxxxxx",
+                        pool);
+
+  /* The source is already at the maximum length. */
+  SVN_TEST_ASSERT(src_string->len == SVN_KEYWORD_MAX_LEN);
+
+  svn_hash_sets(keywords, "Qq", expanded);
+  dst_stream = svn_subst_stream_translated(dst_stream, NULL, FALSE, keywords,
+                                           TRUE, pool);
+  SVN_ERR(svn_stream_copy3(src_stream, dst_stream, NULL, NULL, pool));
+
+  /* The expanded value would make the keyword longer than the maximum
+     allowed so it must be truncated; the remaining part of the
+     expanded value is the same as the source. */
+  SVN_TEST_STRING_ASSERT(dst_stringbuf->data, src_string->data);
+
+  return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_one_long_keyword(const char *keyword,
+                      const char *expected,
+                      apr_pool_t *pool)
+{
+  svn_string_t *src_string;
+  svn_stream_t *src_stream, *dst_stream;
+  svn_stringbuf_t *dst_stringbuf, *src_stringbuf;
+  apr_hash_t *keywords = apr_hash_make(pool);
+  svn_string_t *expanded = svn_string_create("abcdefg", pool);
+
+  svn_hash_sets(keywords, keyword, expanded);
+
+  /* Expand */
+  src_string = svn_string_createf(pool, "$%s$", keyword);
+  src_stream = svn_stream_from_string(src_string, pool);
+  dst_stringbuf = svn_stringbuf_create_empty(pool);
+  dst_stream = svn_stream_from_stringbuf(dst_stringbuf, pool);
+  dst_stream = svn_subst_stream_translated(dst_stream, NULL, FALSE, keywords,
+                                           TRUE, pool);
+  SVN_ERR(svn_stream_copy3(src_stream, dst_stream, NULL, NULL, pool));
+
+  SVN_TEST_STRING_ASSERT(dst_stringbuf->data, expected);
+
+  /* Unexpand */
+  src_stringbuf = dst_stringbuf;
+  src_stream = svn_stream_from_stringbuf(src_stringbuf, pool);
+  dst_stringbuf = svn_stringbuf_create_empty(pool);
+  dst_stream = svn_stream_from_stringbuf(dst_stringbuf, pool);
+  dst_stream = svn_subst_stream_translated(dst_stream, NULL, FALSE, keywords,
+                                           FALSE, pool);
+  SVN_ERR(svn_stream_copy3(src_stream, dst_stream, NULL, NULL, pool));
+
+  SVN_TEST_STRING_ASSERT(dst_stringbuf->data, src_string->data);
+
+  return SVN_NO_ERROR;
+}
+
+static svn_error_t *
+test_svn_subst_long_keywords(apr_pool_t *pool)
+{
+  /* The longest keyword that can be expanded to a value: there is
+     space for one character in the expanded value. */
+  const char keyword_p1[]
+    = "Q"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "012345678901234567890123456789012345678901234567";
+
+  /* The longest keyword that can be expanded: the value is empty. */ 
+  const char keyword_z[]
+    = "Q"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "0123456789012345678901234567890123456789012345678";
+
+  /* One more than the longest keyword that can be expanded. */
+  const char keyword_m1[]
+    = "Q"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789";
+
+  /* Two more than the longest keyword that can be expanded. */
+  const char keyword_m2[]
+    = "Q"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "0";
+
+  /* Three more than the longest keyword that can be expanded. */
+  const char keyword_m3[]
+    = "Q"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01";
+
+  /* Four more than the longest keyword that can be expanded. */
+  const char keyword_m4[]
+    = "Q"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "012";
+
+  /* Five more than the longest keyword that can be expanded. */
+  const char keyword_m5[]
+    = "Q"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "0123";
+
+  /* Six more than the longest keyword that can be expanded. */
+  const char keyword_m6[]
+    = "Q"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234567890123456789012345678901234567890123456789"
+      "01234";
+
+  SVN_ERR(test_one_long_keyword(keyword_p1,
+                                apr_psprintf(pool, "$%s: a $", keyword_p1),
+                                pool));
+
+  SVN_ERR(test_one_long_keyword(keyword_z,
+                                apr_psprintf(pool, "$%s:  $", keyword_z),
+                                pool));
+
+  SVN_ERR(test_one_long_keyword(keyword_m1,
+                                apr_psprintf(pool, "$%s$", keyword_m1),
+                                pool));
+
+  SVN_ERR(test_one_long_keyword(keyword_m2,
+                                apr_psprintf(pool, "$%s$", keyword_m2),
+                                pool));
+
+  SVN_ERR(test_one_long_keyword(keyword_m3,
+                                apr_psprintf(pool, "$%s$", keyword_m3),
+                                pool));
+
+  SVN_ERR(test_one_long_keyword(keyword_m4,
+                                apr_psprintf(pool, "$%s$", keyword_m4),
+                                pool));
+
+  SVN_ERR(test_one_long_keyword(keyword_m5,
+                                apr_psprintf(pool, "$%s$", keyword_m5),
+                                pool));
+
+  SVN_ERR(test_one_long_keyword(keyword_m6,
+                                apr_psprintf(pool, "$%s$", keyword_m6),
+                                pool));
+
+  return SVN_NO_ERROR;
+}
+
 struct svn_test_descriptor_t test_funcs[] =
   {
     SVN_TEST_NULL,
@@ -257,5 +506,11 @@ struct svn_test_descriptor_t test_funcs[
                    "test repairing svn_subst_translate_string2()"),
     SVN_TEST_PASS2(test_svn_subst_translate_cstring2,
                    "test svn_subst_translate_cstring2()"),
+    SVN_TEST_PASS2(test_svn_subst_build_keywords3,
+                   "test svn_subst_build_keywords3()"),
+    SVN_TEST_PASS2(test_svn_subst_truncated_keywords,
+                   "test truncated keywords (issue 4349)"),
+    SVN_TEST_PASS2(test_svn_subst_long_keywords,
+                   "test long keywords (issue 4350)"),
     SVN_TEST_NULL
   };

Modified: subversion/branches/fsfs-format7/subversion/tests/libsvn_wc/op-depth-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_wc/op-depth-test.c?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/libsvn_wc/op-depth-test.c (original)
+++ subversion/branches/fsfs-format7/subversion/tests/libsvn_wc/op-depth-test.c Sat Apr 27 21:30:36 2013
@@ -8035,6 +8035,119 @@ move_delete_file_externals(const svn_tes
   return SVN_NO_ERROR;
 }
 
+static svn_error_t *
+update_with_tree_conflict(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+  svn_test__sandbox_t b;
+
+  SVN_ERR(svn_test__sandbox_create(&b, "update_with_tree_conflict", opts,
+                                   pool));
+
+  SVN_ERR(sbox_wc_mkdir(&b, "A"));
+  SVN_ERR(sbox_wc_mkdir(&b, "A/B"));
+  SVN_ERR(sbox_wc_commit(&b, ""));
+  SVN_ERR(sbox_wc_mkdir(&b, "A/B/C"));
+  SVN_ERR(sbox_wc_commit(&b, ""));
+  SVN_ERR(sbox_wc_update(&b, "", 1));
+  SVN_ERR(sbox_wc_move(&b, "A", "A2"));
+
+  SVN_ERR(sbox_wc_update_depth(&b, "A", 2, svn_depth_empty, FALSE));
+  {
+    nodes_row_t nodes[] = {
+      {0, "",       "normal",       1, ""},
+      {0, "A",      "normal",       2, "A"},
+      {0, "A/B",    "normal",       1, "A/B"},
+      {1, "A",      "base-deleted", NO_COPY_FROM, "A2"},
+      {1, "A/B",    "base-deleted", NO_COPY_FROM},
+      {1, "A2",     "normal",       1, "A", MOVED_HERE},
+      {1, "A2/B",   "normal",       1, "A/B", MOVED_HERE},
+      {0}
+    };
+    SVN_ERR(check_db_rows(&b, "", nodes));
+  }
+
+  SVN_ERR(sbox_wc_update(&b, "A", 2));
+  {
+    nodes_row_t nodes[] = {
+      {0, "",       "normal",       1, ""},
+      {0, "A",      "normal",       2, "A"},
+      {0, "A/B",    "normal",       2, "A/B"},
+      {0, "A/B/C",  "normal",       2, "A/B/C"},
+      {1, "A",      "base-deleted", NO_COPY_FROM, "A2"},
+      {1, "A/B",    "base-deleted", NO_COPY_FROM},
+      {1, "A/B/C",  "base-deleted", NO_COPY_FROM},
+      {1, "A2",     "normal",       1, "A", MOVED_HERE},
+      {1, "A2/B",   "normal",       1, "A/B", MOVED_HERE},
+      {0}
+    };
+    SVN_ERR(check_db_rows(&b, "", nodes));
+  }
+
+  /* Second update overwrote the existing tree-conflict and that
+     causes the move-update to assert. */
+  SVN_ERR(sbox_wc_resolve(&b, "A", svn_depth_infinity,
+                          svn_wc_conflict_choose_mine_conflict));
+  {
+    nodes_row_t nodes[] = {
+      {0, "",       "normal",       1, ""},
+      {0, "A",      "normal",       2, "A"},
+      {0, "A/B",    "normal",       2, "A/B"},
+      {0, "A/B/C",  "normal",       2, "A/B/C"},
+      {1, "A",      "base-deleted", NO_COPY_FROM, "A2"},
+      {1, "A/B",    "base-deleted", NO_COPY_FROM},
+      {1, "A/B/C",  "base-deleted", NO_COPY_FROM},
+      {1, "A2",     "normal",       2, "A", MOVED_HERE},
+      {1, "A2/B",   "normal",       2, "A/B", MOVED_HERE},
+      {1, "A2/B/C", "normal",       2, "A/B/C", MOVED_HERE},
+      {0}
+    };
+    SVN_ERR(check_db_rows(&b, "", nodes));
+  }
+
+  /* Same again but second update is A/B rather than A which triggers
+     the problem through open_root rather than open_directory. */
+  SVN_ERR(sbox_wc_revert(&b, "", svn_depth_infinity));
+  SVN_ERR(sbox_wc_update(&b, "", 1));
+  SVN_ERR(sbox_wc_move(&b, "A", "A2"));
+  SVN_ERR(sbox_wc_update_depth(&b, "A", 2, svn_depth_empty, FALSE));
+  SVN_ERR(sbox_wc_update(&b, "A/B", 2));
+  {
+    nodes_row_t nodes[] = {
+      {0, "",       "normal",       1, ""},
+      {0, "A",      "normal",       2, "A"},
+      {0, "A/B",    "normal",       2, "A/B"},
+      {0, "A/B/C",  "normal",       2, "A/B/C"},
+      {1, "A",      "base-deleted", NO_COPY_FROM, "A2"},
+      {1, "A/B",    "base-deleted", NO_COPY_FROM},
+      {1, "A/B/C",  "base-deleted", NO_COPY_FROM},
+      {1, "A2",     "normal",       1, "A", MOVED_HERE},
+      {1, "A2/B",   "normal",       1, "A/B", MOVED_HERE},
+      {0}
+    };
+    SVN_ERR(check_db_rows(&b, "", nodes));
+  }
+  SVN_ERR(sbox_wc_resolve(&b, "A", svn_depth_infinity,
+                          svn_wc_conflict_choose_mine_conflict));
+  {
+    nodes_row_t nodes[] = {
+      {0, "",       "normal",       1, ""},
+      {0, "A",      "normal",       2, "A"},
+      {0, "A/B",    "normal",       2, "A/B"},
+      {0, "A/B/C",  "normal",       2, "A/B/C"},
+      {1, "A",      "base-deleted", NO_COPY_FROM, "A2"},
+      {1, "A/B",    "base-deleted", NO_COPY_FROM},
+      {1, "A/B/C",  "base-deleted", NO_COPY_FROM},
+      {1, "A2",     "normal",       2, "A", MOVED_HERE},
+      {1, "A2/B",   "normal",       2, "A/B", MOVED_HERE},
+      {1, "A2/B/C", "normal",       2, "A/B/C", MOVED_HERE},
+      {0}
+    };
+    SVN_ERR(check_db_rows(&b, "", nodes));
+  }
+
+  return SVN_NO_ERROR;
+}
+
 /* ---------------------------------------------------------------------- */
 /* The list of test functions */
 
@@ -8186,5 +8299,7 @@ struct svn_test_descriptor_t test_funcs[
                        "move retract (issue 4336)"),
     SVN_TEST_OPTS_PASS(move_delete_file_externals,
                        "move/delete file externals (issue 4293)"),
+    SVN_TEST_OPTS_PASS(update_with_tree_conflict,
+                       "update with tree conflict (issue 4347)"),
     SVN_TEST_NULL
   };

Modified: subversion/branches/fsfs-format7/subversion/tests/svn_test_main.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/svn_test_main.c?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/svn_test_main.c (original)
+++ subversion/branches/fsfs-format7/subversion/tests/svn_test_main.c Sat Apr 27 21:30:36 2013
@@ -73,7 +73,8 @@ enum svn_test_mode_t mode_filter = svn_t
 
 /* Option parsing enums and structures */
 enum {
-  cleanup_opt = SVN_OPT_FIRST_LONGOPT_ID,
+  help_opt = SVN_OPT_FIRST_LONGOPT_ID,
+  cleanup_opt,
   fstype_opt,
   list_opt,
   verbose_opt,
@@ -87,6 +88,8 @@ enum {
 
 static const apr_getopt_option_t cl_options[] =
 {
+  {"help",          help_opt, 0,
+                    N_("display this help")},
   {"cleanup",       cleanup_opt, 0,
                     N_("remove test directories after success")},
   {"config-file",   config_opt, 1,
@@ -97,11 +100,11 @@ static const apr_getopt_option_t cl_opti
                     N_("lists all the tests with their short description")},
   {"mode-filter",   mode_filter_opt, 1,
                     N_("only run/list tests with expected mode ARG = PASS, "
-                       "XFAIL, SKIP, or ALL (default)\n")},
+                       "XFAIL, SKIP, or ALL (default)")},
   {"verbose",       verbose_opt, 0,
                     N_("print extra information")},
   {"server-minor-version", server_minor_version_opt, 1,
-                    N_("set the minor version for the server ('3', '4',\n"
+                    N_("set the minor version for the server ('3', '4', "
                        "'5', or '6')")},
   {"quiet",         quiet_opt, 0,
                     N_("print only unexpected results")},
@@ -343,6 +346,26 @@ do_test_num(const char *progname,
 }
 
 
+static void help(const char *progname, apr_pool_t *pool)
+{
+  int i;
+
+  svn_error_clear(svn_cmdline_fprintf(stdout, pool,
+                                      _("usage: %s [options] [test-numbers]\n"
+                                      "\n"
+                                      "Valid options:\n"),
+                                      progname));
+  for (i = 0; cl_options[i].name && cl_options[i].optch; i++)
+    {
+      const char *optstr;
+
+      svn_opt_format_option(&optstr, cl_options + i, TRUE, pool);
+      svn_error_clear(svn_cmdline_fprintf(stdout, pool, "  %s\n", optstr));
+    }
+  svn_error_clear(svn_cmdline_fprintf(stdout, pool, "\n"));
+}
+
+
 /* Standard svn test program */
 int
 main(int argc, const char *argv[])
@@ -440,6 +463,9 @@ main(int argc, const char *argv[])
         }
 
       switch (opt_id) {
+        case help_opt:
+          help(prog_name, pool);
+          exit(0);
         case cleanup_opt:
           cleanup_mode = TRUE;
           break;

Modified: subversion/branches/fsfs-format7/tools/buildbot/slaves/centos/svnclean.sh
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/buildbot/slaves/centos/svnclean.sh?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/buildbot/slaves/centos/svnclean.sh (original)
+++ subversion/branches/fsfs-format7/tools/buildbot/slaves/centos/svnclean.sh Sat Apr 27 21:30:36 2013
@@ -27,6 +27,6 @@ echo "========= unmount RAM disc"
 test -e ../unmount-ramdrive && ../unmount-ramdrive
 
 echo "========= make extraclean"
-test -e Makefile && (make extraclean || exit $?)
+test -e Makefile && { make extraclean || exit $?; }
 
 exit 0

Modified: subversion/branches/fsfs-format7/tools/buildbot/slaves/i686-debian-sarge1/svnclean.sh
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/buildbot/slaves/i686-debian-sarge1/svnclean.sh?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/buildbot/slaves/i686-debian-sarge1/svnclean.sh (original)
+++ subversion/branches/fsfs-format7/tools/buildbot/slaves/i686-debian-sarge1/svnclean.sh Sat Apr 27 21:30:36 2013
@@ -27,6 +27,6 @@ echo "========= unmount RAM disc"
 test -e ../unmount-ramdrive && ../unmount-ramdrive
 
 echo "========= make extraclean"
-test -e Makefile && (make extraclean || exit $?)
+test -e Makefile && { make extraclean || exit $?; }
 
 exit 0

Modified: subversion/branches/fsfs-format7/tools/buildbot/slaves/svn-x64-macosx-gnu-shared-daily-ra_serf/svnclean.sh
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/buildbot/slaves/svn-x64-macosx-gnu-shared-daily-ra_serf/svnclean.sh?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/buildbot/slaves/svn-x64-macosx-gnu-shared-daily-ra_serf/svnclean.sh (original)
+++ subversion/branches/fsfs-format7/tools/buildbot/slaves/svn-x64-macosx-gnu-shared-daily-ra_serf/svnclean.sh Sat Apr 27 21:30:36 2013
@@ -23,7 +23,7 @@
 # ../unmount_ramd.sh
 
 echo "========= make extraclean"
-test -e Makefile && (make extraclean || exit $?)
+test -e Makefile && { make extraclean || exit $?; }
 rm -rf ../build/*
 rm -rf .svn
 rm -rf .buildbot-sourcedata

Modified: subversion/branches/fsfs-format7/tools/buildbot/slaves/svn-x64-macosx-gnu-shared/svnclean.sh
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/buildbot/slaves/svn-x64-macosx-gnu-shared/svnclean.sh?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/buildbot/slaves/svn-x64-macosx-gnu-shared/svnclean.sh (original)
+++ subversion/branches/fsfs-format7/tools/buildbot/slaves/svn-x64-macosx-gnu-shared/svnclean.sh Sat Apr 27 21:30:36 2013
@@ -23,7 +23,7 @@
 # ../unmount_ramd.sh
 
 echo "========= make extraclean"
-test -e Makefile && (make extraclean || exit $?)
+test -e Makefile && { make extraclean || exit $?; }
 rm -rf ../build/*
 rm -rf .svn
 rm -rf .buildbot-sourcedata

Modified: subversion/branches/fsfs-format7/tools/buildbot/slaves/ubuntu-x64/svnclean.sh
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/buildbot/slaves/ubuntu-x64/svnclean.sh?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/buildbot/slaves/ubuntu-x64/svnclean.sh (original)
+++ subversion/branches/fsfs-format7/tools/buildbot/slaves/ubuntu-x64/svnclean.sh Sat Apr 27 21:30:36 2013
@@ -24,6 +24,6 @@ set -x
 
 echo "========= make extraclean"
 cd build
-test -e Makefile && (make extraclean || exit $?)
+test -e Makefile && { make extraclean || exit $?; }
 
 exit 0

Modified: subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-bindings.cmd
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-bindings.cmd?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-bindings.cmd (original)
+++ subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-bindings.cmd Sat Apr 27 21:30:36 2013
@@ -7,9 +7,9 @@ REM   regarding copyright ownership.  Th
 REM   to you under the Apache License, Version 2.0 (the
 REM   "License"); you may not use this file except in compliance
 REM   with the License.  You may obtain a copy of the License at
-REM  
+REM
 REM     http://www.apache.org/licenses/LICENSE-2.0
-REM  
+REM
 REM   Unless required by applicable law or agreed to in writing,
 REM   software distributed under the License is distributed on an
 REM   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

Modified: subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-build-bindings.cmd
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-build-bindings.cmd?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-build-bindings.cmd (original)
+++ subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-build-bindings.cmd Sat Apr 27 21:30:36 2013
@@ -7,9 +7,9 @@ REM   regarding copyright ownership.  Th
 REM   to you under the Apache License, Version 2.0 (the
 REM   "License"); you may not use this file except in compliance
 REM   with the License.  You may obtain a copy of the License at
-REM  
+REM
 REM     http://www.apache.org/licenses/LICENSE-2.0
-REM  
+REM
 REM   Unless required by applicable law or agreed to in writing,
 REM   software distributed under the License is distributed on an
 REM   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -30,7 +30,7 @@ IF ERRORLEVEL 1 (
 )
 
 msbuild subversion_vcnet.sln /p:Configuration=Debug /p:Platform=win32 /t:__JAVAHL__ /t:__JAVAHL_TESTS__
-IF ERRORLEVEL 1 EXIT /B 1 
+IF ERRORLEVEL 1 EXIT /B 1
 
 msbuild subversion_vcnet.sln /p:Configuration=Release /p:Platform=win32 /t:__SWIG_PYTHON__ /t:__SWIG_PERL__
-IF ERRORLEVEL 1 EXIT /B 1 
+IF ERRORLEVEL 1 EXIT /B 1

Modified: subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-build.cmd
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-build.cmd?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-build.cmd (original)
+++ subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-build.cmd Sat Apr 27 21:30:36 2013
@@ -7,9 +7,9 @@ REM   regarding copyright ownership.  Th
 REM   to you under the Apache License, Version 2.0 (the
 REM   "License"); you may not use this file except in compliance
 REM   with the License.  You may obtain a copy of the License at
-REM  
+REM
 REM     http://www.apache.org/licenses/LICENSE-2.0
-REM  
+REM
 REM   Unless required by applicable law or agreed to in writing,
 REM   software distributed under the License is distributed on an
 REM   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

Modified: subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-cleanup.cmd
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-cleanup.cmd?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-cleanup.cmd (original)
+++ subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-cleanup.cmd Sat Apr 27 21:30:36 2013
@@ -7,9 +7,9 @@ REM   regarding copyright ownership.  Th
 REM   to you under the Apache License, Version 2.0 (the
 REM   "License"); you may not use this file except in compliance
 REM   with the License.  You may obtain a copy of the License at
-REM  
+REM
 REM     http://www.apache.org/licenses/LICENSE-2.0
-REM  
+REM
 REM   Unless required by applicable law or agreed to in writing,
 REM   software distributed under the License is distributed on an
 REM   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

Modified: subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-template.cmd
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-template.cmd?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-template.cmd (original)
+++ subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-template.cmd Sat Apr 27 21:30:36 2013
@@ -7,9 +7,9 @@ REM   regarding copyright ownership.  Th
 REM   to you under the Apache License, Version 2.0 (the
 REM   "License"); you may not use this file except in compliance
 REM   with the License.  You may obtain a copy of the License at
-REM  
+REM
 REM     http://www.apache.org/licenses/LICENSE-2.0
-REM  
+REM
 REM   Unless required by applicable law or agreed to in writing,
 REM   software distributed under the License is distributed on an
 REM   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

Modified: subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-test.cmd
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-test.cmd?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-test.cmd (original)
+++ subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-SharpSvn/svntest-test.cmd Sat Apr 27 21:30:36 2013
@@ -7,9 +7,9 @@ REM   regarding copyright ownership.  Th
 REM   to you under the Apache License, Version 2.0 (the
 REM   "License"); you may not use this file except in compliance
 REM   with the License.  You may obtain a copy of the License at
-REM  
+REM
 REM     http://www.apache.org/licenses/LICENSE-2.0
-REM  
+REM
 REM   Unless required by applicable law or agreed to in writing,
 REM   software distributed under the License is distributed on an
 REM   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

Modified: subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/config.bat
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/config.bat?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/config.bat (original)
+++ subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/config.bat Sat Apr 27 21:30:36 2013
@@ -5,9 +5,9 @@ REM     regarding copyright ownership.  
 REM     to you under the Apache License, Version 2.0 (the
 REM     "License"); you may not use this file except in compliance
 REM     with the License.  You may obtain a copy of the License at
-REM    
+REM
 REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
+REM
 REM     Unless required by applicable law or agreed to in writing,
 REM     software distributed under the License is distributed on an
 REM     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

Modified: subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/do_all.bat
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/do_all.bat?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/do_all.bat (original)
+++ subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/do_all.bat Sat Apr 27 21:30:36 2013
@@ -5,9 +5,9 @@ REM     regarding copyright ownership.  
 REM     to you under the Apache License, Version 2.0 (the
 REM     "License"); you may not use this file except in compliance
 REM     with the License.  You may obtain a copy of the License at
-REM    
+REM
 REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
+REM
 REM     Unless required by applicable law or agreed to in writing,
 REM     software distributed under the License is distributed on an
 REM     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

Modified: subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/svnbuild.bat
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/svnbuild.bat?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/svnbuild.bat (original)
+++ subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/svnbuild.bat Sat Apr 27 21:30:36 2013
@@ -5,9 +5,9 @@ REM     regarding copyright ownership.  
 REM     to you under the Apache License, Version 2.0 (the
 REM     "License"); you may not use this file except in compliance
 REM     with the License.  You may obtain a copy of the License at
-REM    
+REM
 REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
+REM
 REM     Unless required by applicable law or agreed to in writing,
 REM     software distributed under the License is distributed on an
 REM     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

Modified: subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/svncheck.bat
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/svncheck.bat?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/svncheck.bat (original)
+++ subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/svncheck.bat Sat Apr 27 21:30:36 2013
@@ -5,9 +5,9 @@ REM     regarding copyright ownership.  
 REM     to you under the Apache License, Version 2.0 (the
 REM     "License"); you may not use this file except in compliance
 REM     with the License.  You may obtain a copy of the License at
-REM    
+REM
 REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
+REM
 REM     Unless required by applicable law or agreed to in writing,
 REM     software distributed under the License is distributed on an
 REM     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -34,7 +34,7 @@ EXIT 3
 
 :ra_local
 time /T
-python win-tests.py %TEST_DIR%\%FS_TYPE% -f %FS_TYPE% -c -r 
+python win-tests.py %TEST_DIR%\%FS_TYPE% -f %FS_TYPE% -c -r
 if ERRORLEVEL 1 set ERR=1
 time /T
 echo.

Modified: subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/svnclean.bat
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/svnclean.bat?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/svnclean.bat (original)
+++ subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/svnclean.bat Sat Apr 27 21:30:36 2013
@@ -5,9 +5,9 @@ REM     regarding copyright ownership.  
 REM     to you under the Apache License, Version 2.0 (the
 REM     "License"); you may not use this file except in compliance
 REM     with the License.  You may obtain a copy of the License at
-REM    
+REM
 REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
+REM
 REM     Unless required by applicable law or agreed to in writing,
 REM     software distributed under the License is distributed on an
 REM     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

Modified: subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/svnlog.bat
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/svnlog.bat?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/svnlog.bat (original)
+++ subversion/branches/fsfs-format7/tools/buildbot/slaves/win32-xp-VS2005/svnlog.bat Sat Apr 27 21:30:36 2013
@@ -5,9 +5,9 @@ REM     regarding copyright ownership.  
 REM     to you under the Apache License, Version 2.0 (the
 REM     "License"); you may not use this file except in compliance
 REM     with the License.  You may obtain a copy of the License at
-REM    
+REM
 REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
+REM
 REM     Unless required by applicable law or agreed to in writing,
 REM     software distributed under the License is distributed on an
 REM     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

Modified: subversion/branches/fsfs-format7/tools/buildbot/slaves/xp-vc60-ia32/svnbuild.bat
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/buildbot/slaves/xp-vc60-ia32/svnbuild.bat?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/buildbot/slaves/xp-vc60-ia32/svnbuild.bat (original)
+++ subversion/branches/fsfs-format7/tools/buildbot/slaves/xp-vc60-ia32/svnbuild.bat Sat Apr 27 21:30:36 2013
@@ -5,9 +5,9 @@ REM     regarding copyright ownership.  
 REM     to you under the Apache License, Version 2.0 (the
 REM     "License"); you may not use this file except in compliance
 REM     with the License.  You may obtain a copy of the License at
-REM    
+REM
 REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
+REM
 REM     Unless required by applicable law or agreed to in writing,
 REM     software distributed under the License is distributed on an
 REM     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

Modified: subversion/branches/fsfs-format7/tools/buildbot/slaves/xp-vc60-ia32/svncheck.bat
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/buildbot/slaves/xp-vc60-ia32/svncheck.bat?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/buildbot/slaves/xp-vc60-ia32/svncheck.bat (original)
+++ subversion/branches/fsfs-format7/tools/buildbot/slaves/xp-vc60-ia32/svncheck.bat Sat Apr 27 21:30:36 2013
@@ -5,9 +5,9 @@ REM     regarding copyright ownership.  
 REM     to you under the Apache License, Version 2.0 (the
 REM     "License"); you may not use this file except in compliance
 REM     with the License.  You may obtain a copy of the License at
-REM    
+REM
 REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
+REM
 REM     Unless required by applicable law or agreed to in writing,
 REM     software distributed under the License is distributed on an
 REM     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -32,7 +32,7 @@ echo Unknown ra method '%RA_TYPE%'
 EXIT 3
 
 :ra_local
-python win-tests.py %TEST_DIR% -f %FS_TYPE% -c -r 
+python win-tests.py %TEST_DIR% -f %FS_TYPE% -c -r
 if ERRORLEVEL 1 set ERR=1
 EXIT %ERR%
 

Modified: subversion/branches/fsfs-format7/tools/buildbot/slaves/xp-vc60-ia32/svnclean.bat
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/buildbot/slaves/xp-vc60-ia32/svnclean.bat?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/buildbot/slaves/xp-vc60-ia32/svnclean.bat (original)
+++ subversion/branches/fsfs-format7/tools/buildbot/slaves/xp-vc60-ia32/svnclean.bat Sat Apr 27 21:30:36 2013
@@ -5,9 +5,9 @@ REM     regarding copyright ownership.  
 REM     to you under the Apache License, Version 2.0 (the
 REM     "License"); you may not use this file except in compliance
 REM     with the License.  You may obtain a copy of the License at
-REM    
+REM
 REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
+REM
 REM     Unless required by applicable law or agreed to in writing,
 REM     software distributed under the License is distributed on an
 REM     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

Modified: subversion/branches/fsfs-format7/tools/buildbot/slaves/xp-vc60-ia32/svnlog.bat
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/buildbot/slaves/xp-vc60-ia32/svnlog.bat?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/buildbot/slaves/xp-vc60-ia32/svnlog.bat (original)
+++ subversion/branches/fsfs-format7/tools/buildbot/slaves/xp-vc60-ia32/svnlog.bat Sat Apr 27 21:30:36 2013
@@ -5,9 +5,9 @@ REM     regarding copyright ownership.  
 REM     to you under the Apache License, Version 2.0 (the
 REM     "License"); you may not use this file except in compliance
 REM     with the License.  You may obtain a copy of the License at
-REM    
+REM
 REM       http://www.apache.org/licenses/LICENSE-2.0
-REM    
+REM
 REM     Unless required by applicable law or agreed to in writing,
 REM     software distributed under the License is distributed on an
 REM     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

Modified: subversion/branches/fsfs-format7/tools/client-side/svn-bench/client_errors.h
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/client-side/svn-bench/client_errors.h?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/client-side/svn-bench/client_errors.h (original)
+++ subversion/branches/fsfs-format7/tools/client-side/svn-bench/client_errors.h Sat Apr 27 21:30:36 2013
@@ -43,6 +43,8 @@ extern "C" {
 
 #if defined(SVN_ERROR_BUILD_ARRAY)
 
+#error "Need to update err_defn for r1464679 and un-typo 'CDMLINE'"
+
 #define SVN_ERROR_START \
         static const err_defn error_table[] = { \
           { SVN_ERR_CDMLINE__WARNING, "Warning" },

Modified: subversion/branches/fsfs-format7/tools/client-side/svn-bench/null-export-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/client-side/svn-bench/null-export-cmd.c?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/client-side/svn-bench/null-export-cmd.c (original)
+++ subversion/branches/fsfs-format7/tools/client-side/svn-bench/null-export-cmd.c Sat Apr 27 21:30:36 2013
@@ -141,7 +141,7 @@ change_file_prop(void *file_baton,
   edit_baton_t *eb = file_baton;
   eb->prop_count++;
   eb->prop_byte_count += value->len;
-  
+
   return SVN_NO_ERROR;
 }
 
@@ -250,13 +250,15 @@ bench_null_export(svn_revnum_t *result_r
                                                       pool));
 
           /* Manufacture a basic 'report' to the update reporter. */
-          SVN_ERR(svn_ra_do_update2(ra_session,
+          SVN_ERR(svn_ra_do_update3(ra_session,
                                     &reporter, &report_baton,
                                     loc->rev,
                                     "", /* no sub-target */
                                     depth,
                                     FALSE, /* don't want copyfrom-args */
-                                    export_editor, edit_baton, pool));
+                                    FALSE, /* don't want ignore_ancestry */
+                                    export_editor, edit_baton,
+                                    pool, pool));
 
           SVN_ERR(reporter->set_path(report_baton, "", loc->rev,
                                      /* Depth is irrelevant, as we're

Modified: subversion/branches/fsfs-format7/tools/client-side/svn-bench/null-log-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/client-side/svn-bench/null-log-cmd.c?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/client-side/svn-bench/null-log-cmd.c (original)
+++ subversion/branches/fsfs-format7/tools/client-side/svn-bench/null-log-cmd.c Sat Apr 27 21:30:36 2013
@@ -95,7 +95,7 @@ log_entry_receiver(void *baton,
   svn_compat_log_revprops_out(&author, &date, &message, log_entry->revprops);
   if (log_entry->revision == 0 && message == NULL)
     return SVN_NO_ERROR;
-  
+
   lb->revisions++;
   if (lb->merge_depth)
     lb->merged_revs++;

Modified: subversion/branches/fsfs-format7/tools/client-side/svn-bench/svn-bench.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/client-side/svn-bench/svn-bench.c?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/client-side/svn-bench/svn-bench.c (original)
+++ subversion/branches/fsfs-format7/tools/client-side/svn-bench/svn-bench.c Sat Apr 27 21:30:36 2013
@@ -253,7 +253,7 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "  affected paths for that revision were explicitly requested.  Logs\n"
      "  follow copy history by default.  Use --stop-on-copy to disable this\n"
      "  behavior, which can be useful for determining branchpoints.\n"),
-    {'r', 'q', 'v', 'g', 'c', opt_targets, opt_stop_on_copy, 
+    {'r', 'q', 'v', 'g', 'c', opt_targets, opt_stop_on_copy,
      'l', opt_with_all_revprops, opt_with_no_revprops, opt_with_revprop,
      'x',},
     {{opt_with_revprop, N_("retrieve revision property ARG")},
@@ -363,7 +363,7 @@ sub_main(int argc, const char *argv[], a
   /* No args?  Show usage. */
   if (argc <= 1)
     {
-      svn_cl__help(NULL, NULL, pool);
+      SVN_INT_ERR(svn_cl__help(NULL, NULL, pool));
       return EXIT_FAILURE;
     }
 
@@ -383,7 +383,7 @@ sub_main(int argc, const char *argv[], a
         break;
       else if (apr_err)
         {
-          svn_cl__help(NULL, NULL, pool);
+          SVN_INT_ERR(svn_cl__help(NULL, NULL, pool));
           return EXIT_FAILURE;
         }
 
@@ -668,7 +668,7 @@ sub_main(int argc, const char *argv[], a
               svn_error_clear
                 (svn_cmdline_fprintf(stderr, pool,
                                      _("Subcommand argument required\n")));
-              svn_cl__help(NULL, NULL, pool);
+              SVN_INT_ERR(svn_cl__help(NULL, NULL, pool));
               return EXIT_FAILURE;
             }
         }
@@ -686,7 +686,7 @@ sub_main(int argc, const char *argv[], a
                 (svn_cmdline_fprintf(stderr, pool,
                                      _("Unknown subcommand: '%s'\n"),
                                      first_arg_utf8));
-              svn_cl__help(NULL, NULL, pool);
+              SVN_INT_ERR(svn_cl__help(NULL, NULL, pool));
               return EXIT_FAILURE;
             }
         }
@@ -713,7 +713,7 @@ sub_main(int argc, const char *argv[], a
                                           subcommand, pool);
           svn_opt_format_option(&optstr, badopt, FALSE, pool);
           if (subcommand->name[0] == '-')
-            svn_cl__help(NULL, NULL, pool);
+            SVN_INT_ERR(svn_cl__help(NULL, NULL, pool));
           else
             svn_error_clear
               (svn_cmdline_fprintf

Modified: subversion/branches/fsfs-format7/tools/dev/benchmarks/suite1/benchmark.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/dev/benchmarks/suite1/benchmark.py?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/dev/benchmarks/suite1/benchmark.py (original)
+++ subversion/branches/fsfs-format7/tools/dev/benchmarks/suite1/benchmark.py Sat Apr 27 21:30:36 2013
@@ -20,10 +20,10 @@
 """Usage: benchmark.py run|list|compare|show|chart <selection> ...
 
 SELECTING TIMINGS -- B@R,LxS
- 
+
 In the subcommands below, a timings selection consists of a string with up to
 four elements:
-  <branch>@<revision>,<levels>x<spread> 
+  <branch>@<revision>,<levels>x<spread>
 abbreviated as:
   B@R,LxS
 
@@ -214,9 +214,9 @@ def next_unique_basename(prefix):
 
 si_units = [
     (1000 ** 5, 'P'),
-    (1000 ** 4, 'T'), 
-    (1000 ** 3, 'G'), 
-    (1000 ** 2, 'M'), 
+    (1000 ** 4, 'T'),
+    (1000 ** 3, 'G'),
+    (1000 ** 2, 'M'),
     (1000 ** 1, 'K'),
     (1000 ** 0, ''),
     ]
@@ -308,7 +308,7 @@ def parse_timings_selections(db, *args):
       run_kinds.append(run_kind)
 
   return run_kinds
-  
+
 def parse_one_timing_selection(db, *args):
   run_kinds = parse_timings_selections(db, *args)
   if len(run_kinds) != 1:
@@ -433,7 +433,7 @@ class Run:
       kind_id = c.lastrowid
 
     self.started = time_str()
-    
+
     c.execute("""
         INSERT INTO run
           (batch_id, run_kind_id, started)
@@ -595,7 +595,7 @@ class TimingQuery:
     for command_name in self.get_sorted_command_names():
       self.timings[command_name] = self.get_command_timings(command_name)
     return self.timings
-      
+
 
 # ------------------------------------------------------------ run tests
 
@@ -890,10 +890,10 @@ def perform_run(batch, run_kind,
 
 # ---------------------------------------------------------------------
 
-    
+
 def cmdline_run(db, options, run_kind_str, N=1):
   run_kind = parse_one_timing_selection(db, run_kind_str)
-    
+
   N = int(N)
 
   print 'Hi, going to run a Subversion benchmark series of %d runs...' % N
@@ -938,7 +938,7 @@ def cmdline_list(db, options, *args):
     print 'I found:'
 
     d = TimingQuery(db, run_kind)
-    
+
     cmd_names = d.get_sorted_command_names()
     if cmd_names:
       print '\n%d command names:\n ' % len(cmd_names), '\n  '.join(cmd_names)
@@ -1097,7 +1097,7 @@ def cmdline_chart_compare(db, options, *
     chart_path = 'compare_' + '_'.join(
       [ filesystem_safe_string(l) for l in labels ]
       ) + '.svg'
-                  
+
   N = len(command_names)
   M = len(timing_sets) - 1
   if M < 2:
@@ -1238,7 +1238,7 @@ class IndentedHelpFormatterWithNL(optpar
         subsequent_indent=indent)
       for bit in bits]
     result = "\n".join(formatted_bits) + "\n"
-    return result 
+    return result
 
 if __name__ == '__main__':
   parser = optparse.OptionParser(formatter=IndentedHelpFormatterWithNL())

Modified: subversion/branches/fsfs-format7/tools/dev/fsfs-access-map.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/dev/fsfs-access-map.c?rev=1476675&r1=1476674&r2=1476675&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/dev/fsfs-access-map.c (original)
+++ subversion/branches/fsfs-format7/tools/dev/fsfs-access-map.c Sat Apr 27 21:30:36 2013
@@ -227,7 +227,7 @@ read_file(int handle, apr_int64_t count)
   if (handle_info)
     {
       /* known file handle -> expand current read sequence */
-      
+
       handle_info->last_read_size += count;
       handle_info->file->read_count++;
       handle_info->file->read_size += count;
@@ -247,7 +247,7 @@ seek_file(int handle, apr_int64_t locati
       apr_size_t cluster = (apr_size_t)(location / cluster_size);
 
       store_read_info(handle_info);
-      
+
       handle_info->last_read_size = 0;
       handle_info->last_read_start = location;
       handle_info->file->seek_count++;
@@ -308,14 +308,14 @@ parse_line(svn_stringbuf_t *line)
   /* (try to) convert the return value into an integer.
    * If that fails, continue anyway as defaulting to 0 will be safe for us. */
   svn_error_clear(svn_cstring_atoi64(&func_return, return_value));
-  
+
   /* process those operations that we care about */
   if (strcmp(func_start, "open") == 0)
     {
       /* remove double quotes from file name parameter */
       *func_end++ = 0;
       *--first_param_end = 0;
-      
+
       open_file(func_end, (int)func_return);
     }
   else if (strcmp(func_start, "read") == 0)
@@ -607,14 +607,14 @@ print_stats(apr_pool_t *pool)
   apr_int64_t clusters_read = 0;
   apr_int64_t unique_clusters_read = 0;
   apr_int64_t uncached_seek_count = 0;
-  
+
   apr_hash_index_t *hi;
   for (hi = apr_hash_first(pool, files); hi; hi = apr_hash_next(hi))
     {
       const char *name = NULL;
       apr_ssize_t len = 0;
       file_stats_t *file = NULL;
-      
+
       apr_hash_this(hi, (const void **)&name, &len, (void**)&file);
 
       open_count += file->open_count;
@@ -656,7 +656,7 @@ int main(int argc, const char *argv[])
 {
   apr_pool_t *pool = NULL;
   apr_file_t *file = NULL;
-  
+
   apr_initialize();
   atexit(apr_terminate);
 
@@ -676,7 +676,7 @@ int main(int argc, const char *argv[])
   apr_file_close(file);
 
   print_stats(pool);
-  
+
   apr_file_open(&file, "access.bmp",
                 APR_WRITE | APR_CREATE | APR_TRUNCATE | APR_BUFFERED,
                 APR_OS_DEFAULT, pool);



Mime
View raw message