Modified: 
subversion/branches/remove-log-addressing/subversion/tests/cmdline/svntest/actions.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/svntest/actions.py?rev=1620589&r1=1620588&r2=1620589&view=diff
==============================================================================
--- 
subversion/branches/remove-log-addressing/subversion/tests/cmdline/svntest/actions.py
 (original)
+++ 
subversion/branches/remove-log-addressing/subversion/tests/cmdline/svntest/actions.py
 Tue Aug 26 13:00:03 2014
@@ -76,46 +76,49 @@ def setup_pristine_greek_repository():
 
   # If there's no pristine repos, create one.
   if not os.path.exists(main.pristine_greek_repos_dir):
-    main.create_repos(main.pristine_greek_repos_dir)
+    if main.options.fsfs_version is not None:
+      main.unpack_greek_repos(main.pristine_greek_repos_dir)
+    else:
+      main.create_repos(main.pristine_greek_repos_dir)
 
-    # if this is dav, gives us access rights to import the greek tree.
-    if main.is_ra_type_dav():
-      authz_file = os.path.join(main.work_dir, "authz")
-      main.file_write(authz_file, "[/]\n* = rw\n")
-
-    # dump the greek tree to disk.
-    main.greek_state.write_to_disk(main.greek_dump_dir)
-
-    # import the greek tree, using l:foo/p:bar
-    ### todo: svn should not be prompting for auth info when using
-    ### repositories with no auth/auth requirements
-    _, output, _ = main.run_svn(None, 'import', '-m',
-                                'Log message for revision 1.',
-                                main.greek_dump_dir,
-                                main.pristine_greek_repos_url)
+      # if this is dav, gives us access rights to import the greek tree.
+      if main.is_ra_type_dav():
+        authz_file = os.path.join(main.work_dir, "authz")
+        main.file_write(authz_file, "[/]\n* = rw\n")
+
+      # dump the greek tree to disk.
+      main.greek_state.write_to_disk(main.greek_dump_dir)
+
+      # import the greek tree, using l:foo/p:bar
+      ### todo: svn should not be prompting for auth info when using
+      ### repositories with no auth/auth requirements
+      _, output, _ = main.run_svn(None, 'import', '-m',
+                                  'Log message for revision 1.',
+                                  main.greek_dump_dir,
+                                  main.pristine_greek_repos_url)
 
-    # verify the printed output of 'svn import'.
-    lastline = output.pop().strip()
-    match = re.search("(Committed|Imported) revision [0-9]+.", lastline)
-    if not match:
-      logger.error("import did not succeed, while creating greek repos.")
-      logger.error("The final line from 'svn import' was:")
-      logger.error(lastline)
-      sys.exit(1)
-    output_tree = wc.State.from_commit(output)
-
-    expected_output_tree = main.greek_state.copy(main.greek_dump_dir)
-    expected_output_tree.tweak(verb='Adding',
-                               contents=None)
+      # verify the printed output of 'svn import'.
+      lastline = output.pop().strip()
+      match = re.search("(Committed|Imported) revision [0-9]+.", lastline)
+      if not match:
+        logger.error("import did not succeed, while creating greek repos.")
+        logger.error("The final line from 'svn import' was:")
+        logger.error(lastline)
+        sys.exit(1)
+      output_tree = wc.State.from_commit(output)
+
+      expected_output_tree = main.greek_state.copy(main.greek_dump_dir)
+      expected_output_tree.tweak(verb='Adding',
+                                 contents=None)
 
-    try:
-      expected_output_tree.compare_and_display('output', output_tree)
-    except tree.SVNTreeUnequal:
-      verify.display_trees("ERROR:  output of import command is unexpected.",
-                           "OUTPUT TREE",
-                           expected_output_tree.old_tree(),
-                           output_tree.old_tree())
-      sys.exit(1)
+      try:
+        expected_output_tree.compare_and_display('output', output_tree)
+      except tree.SVNTreeUnequal:
+        verify.display_trees("ERROR:  output of import command is unexpected.",
+                             "OUTPUT TREE",
+                             expected_output_tree.old_tree(),
+                             output_tree.old_tree())
+        sys.exit(1)
 
     # Finally, disallow any changes to the "pristine" repos.
     error_msg = "Don't modify the pristine repository"
@@ -153,7 +156,12 @@ def guarantee_greek_repository(path, min
 
   # copy the pristine repository to PATH.
   main.safe_rmtree(path)
-  if main.copy_repos(main.pristine_greek_repos_dir, path, 1, 1, minor_version):
+  if (main.options.fsfs_version is not None):
+    failed = main.unpack_greek_repos(path)
+  else:
+    failed = main.copy_repos(main.pristine_greek_repos_dir,
+                             path, 1, 1, minor_version)
+  if failed:
     logger.error("copying repository failed.")
     sys.exit(1)
 

Modified: 
subversion/branches/remove-log-addressing/subversion/tests/cmdline/svntest/main.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/svntest/main.py?rev=1620589&r1=1620588&r2=1620589&view=diff
==============================================================================
--- 
subversion/branches/remove-log-addressing/subversion/tests/cmdline/svntest/main.py
 (original)
+++ 
subversion/branches/remove-log-addressing/subversion/tests/cmdline/svntest/main.py
 Tue Aug 26 13:00:03 2014
@@ -36,6 +36,7 @@ import xml
 import urllib
 import logging
 import hashlib
+import zipfile
 from urlparse import urlparse
 
 try:
@@ -155,6 +156,7 @@ svnsync_binary = P('svnsync/svnsync')
 svnversion_binary = P('svnversion/svnversion')
 svndumpfilter_binary = P('svndumpfilter/svndumpfilter')
 svnmucc_binary = P('svnmucc/svnmucc')
+svnfsfs_binary = P('svnfsfs/svnfsfs')
 entriesdump_binary = P('tests/cmdline/entries-dump')
 lock_helper_binary = P('tests/cmdline/lock-helper')
 atomic_ra_revprop_change_binary = P('tests/cmdline/atomic-ra-revprop-change')
@@ -171,14 +173,6 @@ svnauthz_validate_binary = os.path.abspa
     '../../../tools/server-side/svnauthz-validate' + _exe
 )
 
-######################################################################
-# The location of svnfsfs binary, relative to the only scripts that
-# import this file right now (they live in ../).
-# Use --tools to overide these defaults.
-svnfsfs_binary = os.path.abspath(
-    '../../../tools/server-side/svnfsfs/svnfsfs' + _exe
-)
-
 # Location to the pristine repository, will be calculated from test_area_url
 # when we know what the user specified for --url.
 pristine_greek_repos_url = None
@@ -914,6 +908,16 @@ def file_substitute(path, contents, new_
   fcontent = open(path, 'r').read().replace(contents, new_contents)
   open(path, 'w').write(fcontent)
 
+def _unpack_precooked_repos(path, template):
+  testdir = os.path.dirname(os.path.abspath(os.path.dirname(__file__)))
+  repozip = os.path.join(os.path.dirname(testdir), "templates", template)
+  zipfile.ZipFile(repozip, 'r').extractall(path)
+
+# For creating new, pre-cooked greek repositories
+def unpack_greek_repos(path):
+  template = "greek-fsfs-v%d.zip" % options.fsfs_version
+  _unpack_precooked_repos(path, template)
+
 # For creating blank new repositories
 def create_repos(path, minor_version = None):
   """Create a brand-new SVN repository at PATH.  If PATH does not yet
@@ -922,14 +926,25 @@ def create_repos(path, minor_version = N
   if not os.path.exists(path):
     os.makedirs(path) # this creates all the intermediate dirs, if necessary
 
-  opts = ("--bdb-txn-nosync",)
-  if minor_version is None or minor_version > options.server_minor_version:
-    minor_version = options.server_minor_version
-  opts += ("--compatible-version=1.%d" % (minor_version),)
-  if options.fs_type is not None:
-    opts += ("--fs-type=" + options.fs_type,)
-  exit_code, stdout, stderr = run_command(svnadmin_binary, 1, False, "create",
-                                          path, *opts)
+  if options.fsfs_version is None:
+    if options.fs_type == "bdb":
+      opts = ("--bdb-txn-nosync",)
+    else:
+      opts = ()
+    if minor_version is None or minor_version > options.server_minor_version:
+      minor_version = options.server_minor_version
+    opts += ("--compatible-version=1.%d" % (minor_version),)
+    if options.fs_type is not None:
+      opts += ("--fs-type=" + options.fs_type,)
+    exit_code, stdout, stderr = run_command(svnadmin_binary, 1, False,
+                                            "create", path, *opts)
+  else:
+    # Copy a pre-cooked FSFS repository
+    assert options.fs_type == "fsfs"
+    template = "empty-fsfs-v%d.zip" % options.fsfs_version
+    _unpack_precooked_repos(path, template)
+    exit_code, stdout, stderr = run_command(svnadmin_binary, 1, False,
+                                            "setuuid", path)
 
   # Skip tests if we can't create the repository.
   if stderr:
@@ -1342,6 +1357,9 @@ def make_log_msg():
 # Functions which check the test configuration
 # (useful for conditional XFails)
 
+def tests_use_prepacakaged_repository():
+  return options.fsfs_version is not None
+
 def is_ra_type_dav():
   return options.test_area_url.startswith('http')
 
@@ -1386,6 +1404,10 @@ def fs_has_pack():
   return is_fs_type_fsx() or \
         (is_fs_type_fsfs() and options.server_minor_version >= 6)
 
+def fs_has_unique_freeze():
+  return (is_fs_type_fsfs() and options.server_minor_version >= 9
+          or is_fs_type_bdb())
+
 def is_os_windows():
   return os.name == 'nt'
 
@@ -1511,6 +1533,8 @@ class TestSpawningThread(threading.Threa
       args.append('--fsfs-sharding=' + str(options.fsfs_sharding))
     if options.fsfs_packing:
       args.append('--fsfs-packing')
+    if options.fsfs_version:
+      args.append('--fsfs-version=' + str(options.fsfs_version))
 
     result, stdout_lines, stderr_lines = spawn_process(command, 0, False, None,
                                                        *args)
@@ -1833,6 +1857,8 @@ def _create_parser():
                     help="Run 'svnadmin pack' automatically")
   parser.add_option('--fsfs-sharding', action='store', type='int',
                     help='Default shard size (for fsfs)')
+  parser.add_option('--fsfs-version', type='int', action='store',
+                    help='FSFS version (fsfs)')
   parser.add_option('--config-file', action='store',
                     help="Configuration file for tests.")
   parser.add_option('--set-log-level', action='callback', type='str',
@@ -1902,6 +1928,25 @@ def _parse_options(arglist=sys.argv[1:])
     else:
       options.test_area_url = options.url
 
+  # Make sure the server-minor-version matches the fsfs-version parameter.
+  if options.fsfs_version:
+    if options.fsfs_version == 6:
+      if options.server_minor_version \
+        and options.server_minor_version != 8 \
+        and options.server_minor_version != SVN_VER_MINOR:
+        parser.error("--fsfs-version=6 requires --server-minor-version=8")
+      options.server_minor_version = 8
+    if options.fsfs_version == 4:
+      if options.server_minor_version \
+        and options.server_minor_version != 7 \
+        and options.server_minor_version != SVN_VER_MINOR:
+        parser.error("--fsfs-version=4 requires --server-minor-version=7")
+      options.server_minor_version = 7
+    pass
+    # ### Add more tweaks here if and when we support pre-cooked versions
+    # ### of FSFS repositories.
+  pass
+
   return (parser, args)
 
 

Modified: 
subversion/branches/remove-log-addressing/subversion/tests/cmdline/switch_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/switch_tests.py?rev=1620589&r1=1620588&r2=1620589&view=diff
==============================================================================
--- 
subversion/branches/remove-log-addressing/subversion/tests/cmdline/switch_tests.py
 (original)
+++ 
subversion/branches/remove-log-addressing/subversion/tests/cmdline/switch_tests.py
 Tue Aug 26 13:00:03 2014
@@ -1025,8 +1025,8 @@ def forced_switch_failures(sbox):
   main.file_write(A_C_H, "The file 'H'\n")
 
   # Test three cases where forced switch should cause a tree conflict
-  # 1) A forced switch that tries to add a file when an unversioned
-  #    directory of the same name already exists.  (Currently fails)
+  # 1) A forced switch that tries to add a directory when an unversioned
+  #    file of the same name already exists.  (Currently fails)
   # svn switch --force url/A/D A/C
   expected_output = svntest.wc.State(wc_dir, {
     'A/C/G'             : Item(status='A '),
@@ -1071,7 +1071,7 @@ def forced_switch_failures(sbox):
                                 '--ignore-ancestry')
 
 
-  # 2) A forced switch that tries to add a dir when a file of the same
+  # 2) A forced switch that tries to add a file when a dir of the same
   #    name already exists. (Tree conflict)
   # svn switch --force url/A/D/G A/B/F
   expected_output = svntest.wc.State(wc_dir, {
@@ -1099,7 +1099,7 @@ def forced_switch_failures(sbox):
 
   # svn info A/B/F/pi
   expected_stdout = verify.ExpectedOutput(
-    'Tree conflict: local file unversioned, incoming file add upon switch\n',
+    'Tree conflict: local dir unversioned, incoming file add upon switch\n',
     match_all=False)
 
   actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'info',

Modified: 
subversion/branches/remove-log-addressing/subversion/tests/cmdline/tree_conflict_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/tree_conflict_tests.py?rev=1620589&r1=1620588&r2=1620589&view=diff
==============================================================================
--- 
subversion/branches/remove-log-addressing/subversion/tests/cmdline/tree_conflict_tests.py
 (original)
+++ 
subversion/branches/remove-log-addressing/subversion/tests/cmdline/tree_conflict_tests.py
 Tue Aug 26 13:00:03 2014
@@ -1258,7 +1258,7 @@ def actual_only_node_behaviour(sbox):
 
   # info
   expected_info = {
-    'Tree conflict': 'local file missing or deleted or moved away, incoming 
file edit upon merge.*',
+    'Tree conflict': 'local missing or deleted or moved away, incoming file 
edit upon merge.*',
     'Name': 'foo',
     'Schedule': 'normal',
     'Node Kind': 'none',

Modified: 
subversion/branches/remove-log-addressing/subversion/tests/libsvn_diff/diff-diff3-test.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_diff/diff-diff3-test.c?rev=1620589&r1=1620588&r2=1620589&view=diff
==============================================================================
--- 
subversion/branches/remove-log-addressing/subversion/tests/libsvn_diff/diff-diff3-test.c
 (original)
+++ 
subversion/branches/remove-log-addressing/subversion/tests/libsvn_diff/diff-diff3-test.c
 Tue Aug 26 13:00:03 2014
@@ -173,13 +173,15 @@ three_way_merge(const char *base_filenam
   actual = svn_stringbuf_create_empty(pool);
   ostream = svn_stream_from_stringbuf(actual, pool);
 
-  SVN_ERR(svn_diff_mem_string_output_merge2
+  SVN_ERR(svn_diff_mem_string_output_merge3
           (ostream, diff, original, modified, latest,
            apr_psprintf(pool, "||||||| %s", base_filename1),
            apr_psprintf(pool, "<<<<<<< %s", base_filename2),
            apr_psprintf(pool, ">>>>>>> %s", base_filename3),
            NULL, /* separator */
-           style, pool));
+           style,
+           NULL, NULL, /* cancel */
+           pool));
 
   SVN_ERR(svn_stream_close(ostream));
   if (strcmp(actual->data, expected) != 0)
@@ -199,14 +201,16 @@ three_way_merge(const char *base_filenam
                            APR_OS_DEFAULT, pool));
 
   ostream = svn_stream_from_aprfile2(output, FALSE, pool);
-  SVN_ERR(svn_diff_file_output_merge2(
+  SVN_ERR(svn_diff_file_output_merge3(
               ostream, diff,
               filename1, filename2, filename3,
               apr_psprintf(pool, "||||||| %s", base_filename1),
               apr_psprintf(pool, "<<<<<<< %s", base_filename2),
               apr_psprintf(pool, ">>>>>>> %s", base_filename3),
               NULL, /* separator */
-              style, pool));
+              style,
+              NULL, NULL, /* cancel */
+              pool));
   SVN_ERR(svn_stream_close(ostream));
   SVN_ERR(svn_stringbuf_from_file2(&actual, merge_name, pool));
   if (strcmp(actual->data, expected))

Propchange: 
subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Tue Aug 26 13:00:03 2014
@@ -1,6 +1,5 @@
 .libs
-test-fs-*
-test-repo-*
+test-*
 locks-test
 fs-test
 *.o

Modified: 
subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs/fs-test.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs/fs-test.c?rev=1620589&r1=1620588&r2=1620589&view=diff
==============================================================================
--- 
subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs/fs-test.c 
(original)
+++ 
subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs/fs-test.c 
Tue Aug 26 13:00:03 2014
@@ -23,6 +23,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <apr_pools.h>
+#include <apr_thread_proc.h>
 #include <assert.h>
 
 #include "../svn_test.h"
@@ -37,6 +38,7 @@
 #include "svn_props.h"
 #include "svn_version.h"
 
+#include "svn_private_config.h"
 #include "private/svn_fs_util.h"
 #include "private/svn_fs_private.h"
 
@@ -5307,19 +5309,57 @@ dir_prop_merge(const svn_test_opts_t *op
   return SVN_NO_ERROR;
 }
 
+#if APR_HAS_THREADS
+struct reopen_modify_baton_t {
+  const char *fs_path;
+  const char *txn_name;
+  apr_pool_t *pool;
+  svn_error_t *err;
+};
+
+static void * APR_THREAD_FUNC
+reopen_modify_child(apr_thread_t *tid, void *data)
+{
+  struct reopen_modify_baton_t *baton = data;
+  svn_fs_t *fs;
+  svn_fs_txn_t *txn;
+  svn_fs_root_t *root;
+
+  baton->err = svn_fs_open(&fs, baton->fs_path, NULL, baton->pool);
+  if (!baton->err)
+    baton->err = svn_fs_open_txn(&txn, fs, baton->txn_name, baton->pool);
+  if (!baton->err)
+    baton->err = svn_fs_txn_root(&root, txn, baton->pool);
+  if (!baton->err)
+    baton->err = svn_fs_change_node_prop(root, "A", "name",
+                                         svn_string_create("value",
+                                                           baton->pool),
+                                         baton->pool);
+  svn_pool_destroy(baton->pool);
+  apr_thread_exit(tid, 0);
+  return NULL;
+}
+#endif
+
 static svn_error_t *
 reopen_modify(const svn_test_opts_t *opts,
               apr_pool_t *pool)
 {
+#if APR_HAS_THREADS
   svn_fs_t *fs;
   svn_revnum_t head_rev = 0;
-  svn_fs_root_t *root, *reopen_root;
-  svn_fs_txn_t *txn, *reopen_txn;
-  const char *txn_name;
+  svn_fs_root_t *root;
+  svn_fs_txn_t *txn;
+  const char *fs_path, *txn_name;
   svn_string_t *value;
+  struct reopen_modify_baton_t baton;
+  apr_status_t status, child_status;
+  apr_threadattr_t *tattr;
+  apr_thread_t *tid;
 
   /* Create test repository with greek tree. */
-  SVN_ERR(svn_test__create_fs(&fs, "test-reopen-modify", opts, pool));
+  fs_path = "test-reopen-modify";
+  SVN_ERR(svn_test__create_fs(&fs, fs_path, opts, pool));
   SVN_ERR(svn_fs_begin_txn(&txn, fs, head_rev, pool));
   SVN_ERR(svn_fs_txn_root(&root, txn, pool));
   SVN_ERR(svn_test__create_greek_tree(root, pool));
@@ -5331,22 +5371,36 @@ reopen_modify(const svn_test_opts_t *opt
   SVN_ERR(svn_fs_txn_root(&root, txn, pool));
   SVN_ERR(svn_fs_make_dir(root, "X", pool));
 
-  /* Reopen, add more changes. */
-  SVN_ERR(svn_fs_open_txn(&reopen_txn, fs, txn_name, pool));
-  SVN_ERR(svn_fs_txn_root(&reopen_root, reopen_txn, pool));
-  SVN_ERR(svn_fs_change_node_prop(reopen_root, "A", "name",
-                                  svn_string_create("value", pool),
-                                  pool));
-
-  /* Reopen, commit */
-  SVN_ERR(svn_fs_open_txn(&reopen_txn, fs, txn_name, pool));
-  SVN_ERR(test_commit_txn(&head_rev, reopen_txn, NULL, pool));
+  /* In another thread: reopen fs and txn, and add more changes.  This
+     works in BDB and FSX but in FSFS the txn_dir_cache becomes
+     out-of-date and the thread's changes don't reach the revision. */
+  baton.fs_path = fs_path;
+  baton.txn_name = txn_name;
+  baton.pool = svn_pool_create(pool);
+  status = apr_threadattr_create(&tattr, pool);
+  if (status)
+    return svn_error_wrap_apr(status, _("Can't create threadattr"));
+  status = apr_thread_create(&tid, tattr, reopen_modify_child, &baton, pool);
+  if (status)
+    return svn_error_wrap_apr(status, _("Can't create thread"));
+  status = apr_thread_join(&child_status, tid);
+  if (status)
+    return svn_error_wrap_apr(status, _("Can't join thread"));
+  if (baton.err)
+    return svn_error_trace(baton.err);
+
+  /* Commit */
+  SVN_ERR(test_commit_txn(&head_rev, txn, NULL, pool));
 
+  /* Check for change made by thread. */
   SVN_ERR(svn_fs_revision_root(&root, fs, head_rev, pool));
   SVN_ERR(svn_fs_node_prop(&value, root, "A", "name", pool));
   SVN_TEST_ASSERT(value && !strcmp(value->data, "value"));
 
   return SVN_NO_ERROR;
+#else
+  return svn_error_create(SVN_ERR_TEST_SKIPPED, NULL, "no thread support");
+#endif
 }
 
 
@@ -5444,8 +5498,9 @@ static struct svn_test_descriptor_t test
                        "test svn_fs__compatible_version"),
     SVN_TEST_OPTS_PASS(dir_prop_merge,
                        "test merge directory properties"),
-    SVN_TEST_OPTS_PASS(reopen_modify,
-                       "test reopen and modify txn"),
+    SVN_TEST_OPTS_WIMP(reopen_modify,
+                       "test reopen and modify txn",
+                       "txn_dir_cache fail in FSFS"),
     SVN_TEST_NULL
   };
 

Modified: 
subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c?rev=1620589&r1=1620588&r2=1620589&view=diff
==============================================================================
--- 
subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c
 (original)
+++ 
subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c
 Tue Aug 26 13:00:03 2014
@@ -28,6 +28,7 @@
 #include "../../libsvn_fs_fs/fs.h"
 #include "../../libsvn_fs_fs/fs_fs.h"
 
+#include "svn_hash.h"
 #include "svn_pools.h"
 #include "svn_props.h"
 #include "svn_fs.h"
@@ -39,6 +40,16 @@
 
 /*** Helper Functions ***/
 
+static void
+ignore_fs_warnings(void *baton, svn_error_t *err)
+{
+#ifdef SVN_DEBUG
+  SVN_DBG(("Ignoring FS warning %s\n",
+           svn_error_symbolic_name(err ? err->apr_err : 0)));
+#endif
+  return;
+}
+
 /* Write the format number and maximum number of files per directory
    to a new format file in PATH, overwriting a previously existing
    file.  Use POOL for temporary allocation.
@@ -1089,38 +1100,48 @@ upgrade_old_txns_to_log_addressing(const
 
 /* ------------------------------------------------------------------------ */
 
+#define REPO_NAME "revprop_caching_on_off"
 static svn_error_t *
-never_reached(void *baton,
-              apr_pool_t *pool)
-{
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-lock_again(void *baton,
-           apr_pool_t *pool)
-{
-  svn_fs_t *fs = baton;
-  SVN_TEST_ASSERT_ERROR(svn_fs_fs__with_all_locks(fs, never_reached, fs,
-                                                  pool),
-                        SVN_ERR_RECURSIVE_LOCK);
-  return SVN_NO_ERROR;
-}
-
-#define REPO_NAME "recursive_locking"
-static svn_error_t *
-recursive_locking(const svn_test_opts_t *opts,
-                  apr_pool_t *pool)
+revprop_caching_on_off(const svn_test_opts_t *opts,
+                       apr_pool_t *pool)
 {
-  svn_fs_t *fs;
+  svn_fs_t *fs1;
+  svn_fs_t *fs2;
+  apr_hash_t *fs_config;
+  svn_string_t *value;
+  const svn_string_t *another_value_for_avoiding_warnings_from_a_broken_api;
+  const svn_string_t *new_value = svn_string_create("new", pool);
 
-  /* Bail (with success) on known-untestable scenarios */
   if (strcmp(opts->fs_type, "fsfs") != 0)
-    return svn_error_create(SVN_ERR_TEST_SKIPPED, NULL,
-                            "this will test FSFS repositories only");
+    return svn_error_create(SVN_ERR_TEST_SKIPPED, NULL, NULL);
+
+  /* Open two filesystem objects, enable revision property caching
+   * in one of them. */
+  SVN_ERR(svn_test__create_fs(&fs1, REPO_NAME, opts, pool));
+
+  fs_config = apr_hash_make(pool);
+  svn_hash_sets(fs_config, SVN_FS_CONFIG_FSFS_CACHE_REVPROPS, "1");
+
+  SVN_ERR(svn_fs_open2(&fs2, svn_fs_path(fs1, pool), fs_config, pool, pool));
+
+  /* With inefficient named atomics, the filesystem will output a warning
+     and disable the revprop caching, but we still would like to test
+     these cases.  Ignore the warning(s). */
+  svn_fs_set_warning_func(fs2, ignore_fs_warnings, NULL);
+
+  SVN_ERR(svn_fs_revision_prop(&value, fs2, 0, "svn:date", pool));
+  another_value_for_avoiding_warnings_from_a_broken_api = value;
+  SVN_ERR(svn_fs_change_rev_prop2(
+              fs1, 0, "svn:date",
+              &another_value_for_avoiding_warnings_from_a_broken_api,
+              new_value, pool));
+
+  /* Expect the change to be visible through both objects.*/
+  SVN_ERR(svn_fs_revision_prop(&value, fs1, 0, "svn:date", pool));
+  SVN_TEST_STRING_ASSERT(value->data, "new");
 
-  SVN_ERR(svn_test__create_fs(&fs, REPO_NAME, opts, pool));
-  SVN_ERR(svn_fs_fs__with_all_locks(fs, lock_again, fs, pool));
+  SVN_ERR(svn_fs_revision_prop(&value, fs2, 0, "svn:date", pool));
+  SVN_TEST_STRING_ASSERT(value->data, "new");
 
   return SVN_NO_ERROR;
 }
@@ -1164,8 +1185,8 @@ static struct svn_test_descriptor_t test
                        "upgrade txns to log addressing in shared FSFS"),
     SVN_TEST_OPTS_PASS(upgrade_old_txns_to_log_addressing,
                        "upgrade txns started before svnadmin upgrade"),
-    SVN_TEST_OPTS_PASS(recursive_locking,
-                       "prevent recursive locking"),
+    SVN_TEST_OPTS_PASS(revprop_caching_on_off,
+                       "change revprops with enabled and disabled caching"),
     SVN_TEST_NULL
   };
 

Propchange: 
subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Tue Aug 26 13:00:03 2014
@@ -50,3 +50,5 @@ root-pools-test
 aligned_seek_tmp
 read_length_tmp
 bit-array-test
+io-test-*
+sqlite-test-*

Modified: 
subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/translate-test.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/translate-test.c?rev=1620589&r1=1620588&r2=1620589&view=diff
==============================================================================
--- 
subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/translate-test.c
 (original)
+++ 
subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/translate-test.c
 Tue Aug 26 13:00:03 2014
@@ -223,15 +223,12 @@ random_eol_marker(void)
 static svn_error_t *
 create_file(const char *fname, const char *eol_str, apr_pool_t *pool)
 {
-  apr_status_t apr_err;
   apr_file_t *f;
   apr_size_t i, j;
 
-  apr_err = apr_file_open(&f, fname,
+  SVN_ERR(svn_io_file_open(&f, fname,
                           (APR_WRITE | APR_CREATE | APR_EXCL | APR_BINARY),
-                          APR_OS_DEFAULT, pool);
-  if (apr_err)
-    return svn_error_create(apr_err, NULL, fname);
+                          APR_OS_DEFAULT, pool));
 
   for (i = 0; i < (sizeof(lines) / sizeof(*lines)); i++)
     {
@@ -243,45 +240,13 @@ create_file(const char *fname, const cha
          fprintf() doing a newline conversion? */
       for (j = 0; this_eol_str[j]; j++)
         {
-          apr_err = apr_file_putc(this_eol_str[j], f);
-          if (apr_err)
-            return svn_error_create(apr_err, NULL, fname);
+          SVN_ERR(svn_io_file_putc(this_eol_str[j], f, pool));
         }
     }
 
-  apr_err = apr_file_close(f);
-  if (apr_err)
-    return svn_error_create(apr_err, NULL, fname);
-
-  return SVN_NO_ERROR;
-}
-
-
-/* If FNAME is a regular file, remove it; if it doesn't exist at all,
-   return success.  Otherwise, return error. */
-static svn_error_t *
-remove_file(const char *fname, apr_pool_t *pool)
-{
-  apr_status_t apr_err;
-  apr_finfo_t finfo;
-
-  if (apr_stat(&finfo, fname, APR_FINFO_TYPE, pool) == APR_SUCCESS)
-    {
-      if (finfo.filetype == APR_REG)
-        {
-          apr_err = apr_file_remove(fname, pool);
-          if (apr_err)
-            return svn_error_create(apr_err, NULL, fname);
-        }
-      else
-        return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
-                                 "non-file '%s' is in the way", fname);
-    }
-
-  return SVN_NO_ERROR;
+  return svn_error_trace(svn_io_file_close(f, pool));
 }
 
-
 /* Set up, run, and verify the results of a substitution.
  *
  * Create a file TEST_NAME.src using global `lines' as the initial
@@ -331,8 +296,8 @@ substitute_and_verify(const char *test_n
   apr_pool_t *subpool = svn_pool_create(pool);
 
   /** Clean up from previous tests, set up src data, and convert. **/
-  SVN_ERR(remove_file(src_fname, pool));
-  SVN_ERR(remove_file(dst_fname, pool));
+  SVN_ERR(svn_io_remove_file2(src_fname, TRUE, pool));
+  SVN_ERR(svn_io_remove_file2(dst_fname, TRUE, pool));
   SVN_ERR(create_file(src_fname, src_eol, pool));
 
   if (rev)
@@ -395,7 +360,7 @@ substitute_and_verify(const char *test_n
       else
         {
           svn_error_clear(err);
-          SVN_ERR(remove_file(src_fname, pool));
+          SVN_ERR(svn_io_remove_file2(src_fname, FALSE, pool));
           return SVN_NO_ERROR;
         }
 
@@ -769,8 +734,8 @@ substitute_and_verify(const char *test_n
     }
 
   /* Clean up this test, since successful. */
-  SVN_ERR(remove_file(src_fname, pool));
-  SVN_ERR(remove_file(dst_fname, pool));
+  SVN_ERR(svn_io_remove_file2(src_fname, FALSE, pool));
+  SVN_ERR(svn_io_remove_file2(dst_fname, FALSE, pool));
 
   return SVN_NO_ERROR;
 }

Modified: 
subversion/branches/remove-log-addressing/subversion/tests/libsvn_wc/conflict-data-test.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_wc/conflict-data-test.c?rev=1620589&r1=1620588&r2=1620589&view=diff
==============================================================================
--- 
subversion/branches/remove-log-addressing/subversion/tests/libsvn_wc/conflict-data-test.c
 (original)
+++ 
subversion/branches/remove-log-addressing/subversion/tests/libsvn_wc/conflict-data-test.c
 Tue Aug 26 13:00:03 2014
@@ -88,8 +88,8 @@ compare_version(const svn_wc_conflict_ve
  * (including names of temporary files), or are both NULL.  Return an
  * error if not. */
 static svn_error_t *
-compare_conflict(const svn_wc_conflict_description3_t *actual,
-                 const svn_wc_conflict_description3_t *expected)
+compare_conflict(const svn_wc_conflict_description2_t *actual,
+                 const svn_wc_conflict_description2_t *expected)
 {
   if (actual == NULL && expected == NULL)
     return SVN_NO_ERROR;
@@ -107,7 +107,7 @@ compare_conflict(const svn_wc_conflict_d
   ASSERT_STR_EQ(actual->base_abspath,   expected->base_abspath);
   ASSERT_STR_EQ(actual->their_abspath,  expected->their_abspath);
   ASSERT_STR_EQ(actual->my_abspath,     expected->my_abspath);
-  ASSERT_STR_EQ(actual->merged_abspath, expected->merged_abspath);
+  ASSERT_STR_EQ(actual->merged_file,    expected->merged_file);
   ASSERT_INT_EQ(actual->operation,      expected->operation);
   SVN_ERR(compare_version(actual->src_left_version,
                           expected->src_left_version));
@@ -134,7 +134,7 @@ compare_file_content(const char *file_ab
  * conflict, or are both NULL.  Return an error if not.
  *
  * Compare the property values found in files named by
- * ACTUAL->base_abspath, ACTUAL->my_abspath, ACTUAL->merged_abspath
+ * ACTUAL->base_abspath, ACTUAL->my_abspath, ACTUAL->merged_file
  * with EXPECTED_BASE_VAL, EXPECTED_MY_VAL, EXPECTED_THEIR_VAL
  * respectively, ignoring the corresponding fields in EXPECTED. */
 static svn_error_t *
@@ -181,7 +181,7 @@ compare_prop_conflict(const svn_wc_confl
 }
 
 /* Create and return a tree conflict description */
-static svn_wc_conflict_description3_t *
+static svn_wc_conflict_description2_t *
 tree_conflict_create(const char *local_abspath,
                      svn_node_kind_t node_kind,
                      svn_wc_operation_t operation,
@@ -198,14 +198,14 @@ tree_conflict_create(const char *local_a
                      apr_pool_t *result_pool)
 {
   svn_wc_conflict_version_t *left, *right;
-  svn_wc_conflict_description3_t *conflict;
+  svn_wc_conflict_description2_t *conflict;
 
   left = svn_wc_conflict_version_create2(left_repo, NULL, left_path,
                                          left_revnum, left_kind, result_pool);
   right = svn_wc_conflict_version_create2(right_repo, NULL, right_path,
                                           right_revnum, right_kind,
                                           result_pool);
-  conflict = svn_wc_conflict_description_create_tree3(
+  conflict = svn_wc_conflict_description_create_tree2(
                     local_abspath, node_kind, operation,
                     left, right, result_pool);
   conflict->action = action;
@@ -216,8 +216,8 @@ tree_conflict_create(const char *local_a
 static svn_error_t *
 test_deserialize_tree_conflict(apr_pool_t *pool)
 {
-  const svn_wc_conflict_description3_t *conflict;
-  svn_wc_conflict_description3_t *exp_conflict;
+  const svn_wc_conflict_description2_t *conflict;
+  svn_wc_conflict_description2_t *exp_conflict;
   const char *tree_conflict_data;
   const char *local_abspath;
   const svn_skel_t *skel;
@@ -226,7 +226,7 @@ test_deserialize_tree_conflict(apr_pool_
                         "(version 0  2 -1 0  0 ) (version 0  2 -1 0  0 ))";
 
   SVN_ERR(svn_dirent_get_absolute(&local_abspath, "Foo.c", pool));
-  exp_conflict = svn_wc_conflict_description_create_tree3(
+  exp_conflict = svn_wc_conflict_description_create_tree2(
                         local_abspath, svn_node_file, svn_wc_operation_update,
                         NULL, NULL, pool);
   exp_conflict->action = svn_wc_conflict_action_delete;
@@ -236,8 +236,8 @@ test_deserialize_tree_conflict(apr_pool_
   SVN_ERR(svn_wc__deserialize_conflict(&conflict, skel, "", pool, pool));
 
   if ((conflict->node_kind != exp_conflict->node_kind) ||
-      (conflict->action    != exp_conflict->action) ||
-      (conflict->reason    != exp_conflict->reason) ||
+      (conflict->action != exp_conflict->action) ||
+      (conflict->reason != exp_conflict->reason) ||
       (conflict->operation != exp_conflict->operation) ||
       (strcmp(conflict->local_abspath, exp_conflict->local_abspath) != 0))
     return fail(pool, "Unexpected tree conflict");
@@ -248,7 +248,7 @@ test_deserialize_tree_conflict(apr_pool_
 static svn_error_t *
 test_serialize_tree_conflict_data(apr_pool_t *pool)
 {
-  svn_wc_conflict_description3_t *conflict;
+  svn_wc_conflict_description2_t *conflict;
   const char *tree_conflict_data;
   const char *expected;
   const char *local_abspath;
@@ -256,7 +256,7 @@ test_serialize_tree_conflict_data(apr_po
 
   SVN_ERR(svn_dirent_get_absolute(&local_abspath, "Foo.c", pool));
 
-  conflict = svn_wc_conflict_description_create_tree3(
+  conflict = svn_wc_conflict_description_create_tree2(
                     local_abspath, svn_node_file, svn_wc_operation_update,
                     NULL, NULL, pool);
   conflict->action = svn_wc_conflict_action_delete;
@@ -285,14 +285,15 @@ test_read_write_tree_conflicts(const svn
 
   const char *parent_abspath;
   const char *child1_abspath, *child2_abspath;
-  svn_wc_conflict_description3_t *conflict1, *conflict2;
+  svn_wc_conflict_description2_t *conflict1, *conflict2;
 
   SVN_ERR(svn_test__sandbox_create(&sbox, "read_write_tree_conflicts", opts, 
pool));
   parent_abspath = svn_dirent_join(sbox.wc_abspath, "A", pool);
-  SVN_ERR(svn_wc__db_op_add_directory(sbox.wc_ctx->db, parent_abspath,
-                                      NULL /*props*/, NULL, pool));
   child1_abspath = svn_dirent_join(parent_abspath, "foo", pool);
   child2_abspath = svn_dirent_join(parent_abspath, "bar", pool);
+  SVN_ERR(sbox_wc_mkdir(&sbox, "A"));
+  SVN_ERR(sbox_wc_mkdir(&sbox, "A/bar"));
+  sbox_file_write(&sbox, "A/foo", "");
 
   conflict1 = tree_conflict_create(child1_abspath, svn_node_file,
                                    svn_wc_operation_merge,
@@ -337,7 +338,7 @@ test_read_write_tree_conflicts(const svn
 
   /* Read conflicts back */
   {
-    const svn_wc_conflict_description3_t *read_conflict;
+    const svn_wc_conflict_description2_t *read_conflict;
 
     SVN_ERR(svn_wc__get_tree_conflict(&read_conflict, sbox.wc_ctx,
                                       child1_abspath, pool, pool));
@@ -606,20 +607,20 @@ test_serialize_tree_conflict(const svn_t
   SVN_TEST_ASSERT(complete); /* Everything available */
 
   {
-    svn_wc_conflict_reason_t local_change;
-    svn_wc_conflict_action_t incoming_change;
+    svn_wc_conflict_reason_t reason;
+    svn_wc_conflict_action_t action;
     const char *moved_away_op_root_abspath;
 
-    SVN_ERR(svn_wc__conflict_read_tree_conflict(&local_change,
-                                                &incoming_change,
+    SVN_ERR(svn_wc__conflict_read_tree_conflict(&reason,
+                                                &action,
                                                 &moved_away_op_root_abspath,
                                                 sbox.wc_ctx->db,
                                                 sbox.wc_abspath,
                                                 conflict_skel,
                                                 pool, pool));
 
-    SVN_TEST_ASSERT(local_change == svn_wc_conflict_reason_moved_away);
-    SVN_TEST_ASSERT(incoming_change == svn_wc_conflict_action_delete);
+    SVN_TEST_ASSERT(reason == svn_wc_conflict_reason_moved_away);
+    SVN_TEST_ASSERT(action == svn_wc_conflict_action_delete);
     SVN_TEST_ASSERT(!strcmp(moved_away_op_root_abspath,
                             sbox_wc_path(&sbox, "A/B")));
   }

Modified: 
subversion/branches/remove-log-addressing/subversion/tests/libsvn_wc/utils.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_wc/utils.c?rev=1620589&r1=1620588&r2=1620589&view=diff
==============================================================================
--- 
subversion/branches/remove-log-addressing/subversion/tests/libsvn_wc/utils.c 
(original)
+++ 
subversion/branches/remove-log-addressing/subversion/tests/libsvn_wc/utils.c 
Tue Aug 26 13:00:03 2014
@@ -282,7 +282,7 @@ sbox_wc_revert(svn_test__sandbox_t *b, c
   SVN_ERR(svn_wc__acquire_write_lock(&lock_root_abspath, b->wc_ctx,
                                      dir_abspath, FALSE /* lock_anchor */,
                                      b->pool, b->pool));
-  SVN_ERR(svn_wc_revert4(b->wc_ctx, abspath, depth, FALSE, NULL,
+  SVN_ERR(svn_wc_revert5(b->wc_ctx, abspath, depth, FALSE, NULL, FALSE,
                          NULL, NULL, /* cancel baton + func */
                          NULL, NULL, /* notify baton + func */
                          b->pool));

Modified: 
subversion/branches/remove-log-addressing/subversion/tests/svn_test_fs.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/svn_test_fs.c?rev=1620589&r1=1620588&r2=1620589&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/svn_test_fs.c 
(original)
+++ subversion/branches/remove-log-addressing/subversion/tests/svn_test_fs.c 
Tue Aug 26 13:00:03 2014
@@ -106,7 +106,6 @@ create_fs(svn_fs_t **fs_p,
           int server_minor_version,
           apr_pool_t *pool)
 {
-  apr_finfo_t finfo;
   apr_hash_t *fs_config = make_fs_config(fs_type, server_minor_version, pool);
 
   /* If there's already a repository named NAME, delete it.  Doing
@@ -114,18 +113,7 @@ create_fs(svn_fs_t **fs_p,
      failure for postmortem analysis, but also that tests can be
      re-run without cleaning out the repositories created by prior
      runs.  */
-  if (apr_stat(&finfo, name, APR_FINFO_TYPE, pool) == APR_SUCCESS)
-    {
-      if (finfo.filetype == APR_DIR)
-        SVN_ERR_W(svn_io_remove_dir2(name, TRUE, NULL, NULL, pool),
-                  apr_psprintf(pool,
-                               "cannot create fs '%s' there is already "
-                               "a directory of that name", name));
-      else
-        return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
-                                 "cannot create fs '%s' there is already "
-                                 "a file of that name", name);
-    }
+  SVN_ERR(svn_io_remove_dir2(name, TRUE, NULL, NULL, pool));
 
   SVN_ERR(svn_fs_create(fs_p, name, fs_config, pool));
   if (! *fs_p)
@@ -216,7 +204,6 @@ svn_test__create_repos(svn_repos_t **rep
                        const svn_test_opts_t *opts,
                        apr_pool_t *pool)
 {
-  apr_finfo_t finfo;
   svn_repos_t *repos;
   svn_boolean_t must_reopen;
   apr_hash_t *fs_config = make_fs_config(opts->fs_type,
@@ -227,17 +214,7 @@ svn_test__create_repos(svn_repos_t **rep
      failure for postmortem analysis, but also that tests can be
      re-run without cleaning out the repositories created by prior
      runs.  */
-  if (apr_stat(&finfo, name, APR_FINFO_TYPE, pool) == APR_SUCCESS)
-    {
-      if (finfo.filetype == APR_DIR)
-        SVN_ERR_W(svn_io_remove_dir2(name, TRUE, NULL, NULL, pool),
-                  apr_psprintf(pool,
-                               "cannot create repos '%s' there is already "
-                               "a directory of that name", name));
-      else
-        return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
-                                 "there is already a file named '%s'", name);
-    }
+  SVN_ERR(svn_io_remove_dir2(name, TRUE, NULL, NULL, pool));
 
   SVN_ERR(svn_repos_create(&repos, name, NULL, NULL, NULL,
                            fs_config, pool));

Modified: 
subversion/branches/remove-log-addressing/subversion/tests/svn_test_main.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/svn_test_main.c?rev=1620589&r1=1620588&r2=1620589&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/svn_test_main.c 
(original)
+++ subversion/branches/remove-log-addressing/subversion/tests/svn_test_main.c 
Tue Aug 26 13:00:03 2014
@@ -103,7 +103,8 @@ enum test_options_e {
   srcdir_opt,
   mode_filter_opt,
   sqlite_log_opt,
-  parallel_opt
+  parallel_opt,
+  fsfs_version_opt
 };
 
 static const apr_getopt_option_t cl_options[] =
@@ -116,6 +117,8 @@ static const apr_getopt_option_t cl_opti
                     N_("specify test config file ARG")},
   {"fs-type",       fstype_opt, 1,
                     N_("specify a filesystem backend type ARG")},
+  {"fsfs-version",  fsfs_version_opt, 1,
+                    N_("specify the FSFS version ARG")},
   {"list",          list_opt, 0,
                     N_("lists all the tests with their short description")},
   {"mode-filter",   mode_filter_opt, 1,
@@ -301,6 +304,7 @@ log_results(const char *progname,
       svn_error_clear(err);
       err = SVN_NO_ERROR;
       skip = TRUE;
+      xfail = FALSE; /* Or all XFail tests reporting SKIP would be failing */
     }
 
   /* Failure means unexpected results -- FAIL or XPASS. */
@@ -422,13 +426,6 @@ do_test_num(const char *progname,
         err = (*desc->func2)(pool);
       else
         err = (*desc->func_opts)(opts, pool);
-
-      if (err && err->apr_err == SVN_ERR_TEST_SKIPPED)
-        {
-          svn_error_clear(err);
-          err = SVN_NO_ERROR;
-          skip = TRUE;
-        }
     }
   else
     err = svn_error_create(SVN_ERR_TEST_FAILED, NULL,
@@ -479,7 +476,7 @@ static void * APR_THREAD_FUNC
 test_thread(apr_thread_t *thread, void *data)
 {
   svn_boolean_t skip, xfail, wimp;
-  svn_error_t *err = NULL;
+  svn_error_t *err;
   const struct svn_test_descriptor_t *desc;
   svn_boolean_t run_this_test; /* This test's mode matches DESC->MODE. */
   test_params_t *params = data;
@@ -512,7 +509,7 @@ test_thread(apr_thread_t *thread, void *
 
       /* Do test */
       if (skip || !run_this_test)
-        ; /* pass */
+        err = NULL; /* pass */
       else if (desc->func2)
         err = (*desc->func2)(pool);
       else
@@ -719,7 +716,7 @@ svn_test_main(int argc, const char *argv
    * usage but make it thread-safe to allow for multi-threaded tests.
    */
   pool = apr_allocator_owner_get(svn_pool_create_allocator(TRUE));
-  err = svn_mutex__init(&log_mutex, TRUE, TRUE, pool);
+  err = svn_mutex__init(&log_mutex, TRUE, pool);
   if (err)
     {
       svn_handle_error2(err, stderr, TRUE, "svn_tests: ");

Modified: 
subversion/branches/remove-log-addressing/tools/dev/svnraisetreeconflict/svnraisetreeconflict.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/tools/dev/svnraisetreeconflict/svnraisetreeconflict.c?rev=1620589&r1=1620588&r2=1620589&view=diff
==============================================================================
--- 
subversion/branches/remove-log-addressing/tools/dev/svnraisetreeconflict/svnraisetreeconflict.c
 (original)
+++ 
subversion/branches/remove-log-addressing/tools/dev/svnraisetreeconflict/svnraisetreeconflict.c
 Tue Aug 26 13:00:03 2014
@@ -170,7 +170,7 @@ raise_tree_conflict(int argc, const char
 {
   int i = 0;
   svn_wc_conflict_version_t *left, *right;
-  svn_wc_conflict_description3_t *c;
+  svn_wc_conflict_description2_t *c;
   svn_wc_context_t *wc_ctx;
 
   /* Conflict description parameters */
@@ -206,8 +206,8 @@ raise_tree_conflict(int argc, const char
                                          peg_rev1, kind1, pool);
   right = svn_wc_conflict_version_create2(repos_url2, NULL, path_in_repos2,
                                           peg_rev2, kind2, pool);
-  c = svn_wc_conflict_description_create_tree3(wc_abspath, kind,
-                                              operation, left, right, pool);
+  c = svn_wc_conflict_description_create_tree2(wc_abspath, kind,
+                                               operation, left, right, pool);
   c->action = (svn_wc_conflict_action_t)action;
   c->reason = (svn_wc_conflict_reason_t)reason;
 

Modified: 
subversion/branches/remove-log-addressing/tools/dev/unix-build/Makefile.svn
URL: 
http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/tools/dev/unix-build/Makefile.svn?rev=1620589&r1=1620588&r2=1620589&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/tools/dev/unix-build/Makefile.svn 
(original)
+++ subversion/branches/remove-log-addressing/tools/dev/unix-build/Makefile.svn 
Tue Aug 26 13:00:03 2014
@@ -74,7 +74,7 @@ GNU_ICONV_VER = 1.14
 APR_UTIL_VER   = 1.5.3
 HTTPD_VER      = 2.2.27
 NEON_VER       = 0.30.0
-SERF_VER       = 1.3.6
+SERF_VER       = 1.3.7
 SERF_OLD_VER   = 0.3.1
 CYRUS_SASL_VER = 2.1.25
 SQLITE_VER     = 3080500

Modified: subversion/branches/remove-log-addressing/tools/diff/diff.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/tools/diff/diff.c?rev=1620589&r1=1620588&r2=1620589&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/tools/diff/diff.c (original)
+++ subversion/branches/remove-log-addressing/tools/diff/diff.c Tue Aug 26 
13:00:03 2014
@@ -43,9 +43,11 @@ do_diff(svn_stream_t *ostream,
 
   SVN_ERR(svn_diff_file_diff_2(&diff, original, modified, options, pool));
   *has_changes = svn_diff_contains_diffs(diff);
-  return svn_diff_file_output_unified3(ostream, diff, original, modified,
+  return svn_diff_file_output_unified4(ostream, diff, original, modified,
                                        NULL, NULL, SVN_APR_LOCALE_CHARSET,
-                                       NULL, show_c_function, pool);
+                                       NULL, show_c_function,
+                                       options->context_size,
+                                       NULL, NULL, pool);
 }
 
 static void
@@ -112,7 +114,16 @@ int main(int argc, const char *argv[])
               diff_options->ignore_space = svn_diff_file_ignore_space_all;
               continue;
             }
+
           APR_ARRAY_PUSH(options_array, const char *) = argv[i];
+
+          /* Special case: '-U' takes an argument, so capture the 
+           * next argument in the array. */
+          if (argv[i][1] == 'U' && !argv[i][2])
+            {
+              i++;
+              APR_ARRAY_PUSH(options_array, const char *) = argv[i];
+            }
         }
       else
         {

Modified: subversion/branches/remove-log-addressing/tools/diff/diff3.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/tools/diff/diff3.c?rev=1620589&r1=1620588&r2=1620589&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/tools/diff/diff3.c (original)
+++ subversion/branches/remove-log-addressing/tools/diff/diff3.c Tue Aug 26 
13:00:03 2014
@@ -51,13 +51,14 @@ do_diff3(svn_stream_t *ostream,
 
   *has_changes = svn_diff_contains_diffs(diff);
 
-  SVN_ERR(svn_diff_file_output_merge2(ostream, diff,
+  SVN_ERR(svn_diff_file_output_merge3(ostream, diff,
                                       original, modified, latest,
                                       conflict_original,
                                       conflict_modified,
                                       conflict_latest,
                                       "=======",
                                       conflict_style,
+                                      NULL, NULL, /* cancel */
                                       pool));
 
   return NULL;

Modified: subversion/branches/remove-log-addressing/tools/diff/diff4.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/tools/diff/diff4.c?rev=1620589&r1=1620588&r2=1620589&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/tools/diff/diff4.c (original)
+++ subversion/branches/remove-log-addressing/tools/diff/diff4.c Tue Aug 26 
13:00:03 2014
@@ -42,10 +42,11 @@ do_diff4(svn_stream_t *ostream,
 
   SVN_ERR(svn_diff_file_diff4_2(&diff, original, modified, latest, ancestor,
                                 svn_diff_file_options_create(pool), pool));
-  SVN_ERR(svn_diff_file_output_merge2(ostream, diff,
+  SVN_ERR(svn_diff_file_output_merge3(ostream, diff,
                                       original, modified, latest,
                                       NULL, NULL, NULL, NULL,
                                       
svn_diff_conflict_display_modified_latest,
+                                      NULL, NULL, /* cancel */
                                       pool));
 
   return NULL;


Reply via email to