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;
