Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_update_move.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_update_move.c?rev=1897946&r1=1897945&r2=1897946&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_update_move.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/libsvn_wc/wc_db_update_move.c Thu Feb 10 20:04:43 2022 @@ -154,6 +154,7 @@ #include "conflicts.h" #include "workqueue.h" #include "token-map.h" +#include "textbase.h" /* Helper functions */ /* Return the absolute path, in local path style, of LOCAL_RELPATH @@ -970,15 +971,28 @@ tc_editor_add_file(node_move_baton_t *nm } else { + const char *src_abspath; + const char *install_from; + svn_skel_t *cleanup_work_item; + + src_abspath = svn_dirent_join(b->wcroot->abspath, nmb->src_relpath, + scratch_pool); + /* Update working file. */ + SVN_ERR(svn_wc__textbase_setaside_wq(&install_from, + &cleanup_work_item, + b->db, src_abspath, NULL, + b->cancel_func, b->cancel_baton, + scratch_pool, scratch_pool)); SVN_ERR(svn_wc__wq_build_file_install(&work_item, b->db, svn_dirent_join(b->wcroot->abspath, relpath, scratch_pool), - NULL, + install_from, FALSE /*FIXME: use_commit_times?*/, TRUE /* record_file_info */, scratch_pool, scratch_pool)); + work_item = svn_wc__wq_merge(work_item, cleanup_work_item, scratch_pool); } SVN_ERR(update_move_list_add(b->wcroot, relpath, b->db, @@ -1369,33 +1383,56 @@ tc_editor_alter_file(node_move_baton_t * scratch_pool)); if (!is_locally_modified) { + const char *src_abspath; + const char *install_from; + svn_skel_t *cleanup_work_item; + + src_abspath = svn_dirent_join(b->wcroot->abspath, nmb->src_relpath, + scratch_pool); + + SVN_ERR(svn_wc__textbase_setaside_wq(&install_from, + &cleanup_work_item, + b->db, src_abspath, NULL, + b->cancel_func, b->cancel_baton, + scratch_pool, scratch_pool)); SVN_ERR(svn_wc__wq_build_file_install(&work_item, b->db, local_abspath, - NULL, + install_from, FALSE /* FIXME: use_commit_times? */, TRUE /* record_file_info */, scratch_pool, scratch_pool)); work_items = svn_wc__wq_merge(work_items, work_item, scratch_pool); + work_items = svn_wc__wq_merge(work_items, cleanup_work_item, scratch_pool); content_state = svn_wc_notify_state_changed; } else { + svn_skel_t *cleanup_queue = NULL; + /* * Run a 3-way merge to update the file, using the pre-update * pristine text as the merge base, the post-update pristine * text as the merge-left version, and the current content of the * moved-here working file as the merge-right version. */ - SVN_ERR(svn_wc__db_pristine_get_path(&old_pristine_abspath, - b->db, b->wcroot->abspath, + SVN_ERR(svn_wc__textbase_setaside_wq(&old_pristine_abspath, + &work_item, b->db, + local_abspath, old_version.checksum, + b->cancel_func, b->cancel_baton, scratch_pool, scratch_pool)); - SVN_ERR(svn_wc__db_pristine_get_path(&new_pristine_abspath, - b->db, b->wcroot->abspath, + cleanup_queue = svn_wc__wq_merge(cleanup_queue, work_item, scratch_pool); + + SVN_ERR(svn_wc__textbase_setaside_wq(&new_pristine_abspath, + &work_item, b->db, + local_abspath, new_version.checksum, + b->cancel_func, b->cancel_baton, scratch_pool, scratch_pool)); + cleanup_queue = svn_wc__wq_merge(cleanup_queue, work_item, scratch_pool); + SVN_ERR(svn_wc__internal_merge(&work_item, &conflict_skel, &merge_outcome, b->db, old_pristine_abspath, @@ -1412,6 +1449,7 @@ tc_editor_alter_file(node_move_baton_t * scratch_pool, scratch_pool)); work_items = svn_wc__wq_merge(work_items, work_item, scratch_pool); + work_items = svn_wc__wq_merge(work_items, cleanup_queue, scratch_pool); if (merge_outcome == svn_wc_merge_conflict) content_state = svn_wc_notify_state_conflicted; @@ -1599,6 +1637,7 @@ tc_editor_update_incoming_moved_file(nod const char *src_abspath; const char *label_left; const char *label_target; + svn_skel_t *cleanup_queue = NULL; /* * Run a 3-way merge to update the file at its post-move location, @@ -1607,12 +1646,17 @@ tc_editor_update_incoming_moved_file(nod * content of the working file at the pre-move location as the * merge-left version. */ - SVN_ERR(svn_wc__db_pristine_get_path(&old_pristine_abspath, - b->db, b->wcroot->abspath, - src_checksum, - scratch_pool, scratch_pool)); src_abspath = svn_dirent_join(b->wcroot->abspath, src_relpath, scratch_pool); + + SVN_ERR(svn_wc__textbase_setaside_wq(&old_pristine_abspath, + &work_item, b->db, + src_abspath, + src_checksum, + b->cancel_func, b->cancel_baton, + scratch_pool, scratch_pool)); + cleanup_queue = svn_wc__wq_merge(cleanup_queue, work_item, scratch_pool); + label_left = apr_psprintf(scratch_pool, ".r%ld", b->old_version->peg_rev); label_target = apr_psprintf(scratch_pool, ".r%ld", @@ -1635,6 +1679,7 @@ tc_editor_update_incoming_moved_file(nod scratch_pool, scratch_pool)); work_items = svn_wc__wq_merge(work_items, work_item, scratch_pool); + work_items = svn_wc__wq_merge(work_items, cleanup_queue, scratch_pool); if (merge_outcome == svn_wc_merge_conflict) content_state = svn_wc_notify_state_conflicted; @@ -3147,14 +3192,22 @@ tc_editor_update_add_merge_files(added_n if (!is_modified) { svn_skel_t *work_item = NULL; + const char *install_from; + svn_skel_t *cleanup_work_item; + SVN_ERR(svn_wc__textbase_setaside_wq(&install_from, + &cleanup_work_item, + b->db, local_abspath, NULL, + b->cancel_func, b->cancel_baton, + scratch_pool, scratch_pool)); SVN_ERR(svn_wc__wq_build_file_install(&work_item, b->db, - local_abspath, NULL, + local_abspath, install_from, /* FIXME: use_commit_times? */ FALSE, TRUE, /* record_file_info */ scratch_pool, scratch_pool)); work_items = svn_wc__wq_merge(work_items, work_item, scratch_pool); + work_items = svn_wc__wq_merge(work_items, cleanup_work_item, scratch_pool); content_state = svn_wc_notify_state_changed; } else @@ -3162,6 +3215,7 @@ tc_editor_update_add_merge_files(added_n const char *empty_file_abspath; const char *pristine_abspath; svn_skel_t *work_item = NULL; + svn_skel_t *cleanup_queue = NULL; /* * Run a 3-way merge to update the file, using the empty file @@ -3172,9 +3226,13 @@ tc_editor_update_add_merge_files(added_n SVN_ERR(svn_io_open_unique_file3(NULL, &empty_file_abspath, NULL, svn_io_file_del_on_pool_cleanup, scratch_pool, scratch_pool)); - SVN_ERR(svn_wc__db_pristine_get_path(&pristine_abspath, b->db, - b->wcroot->abspath, base_checksum, + SVN_ERR(svn_wc__textbase_setaside_wq(&pristine_abspath, + &work_item, b->db, + local_abspath, + base_checksum, + b->cancel_func, b->cancel_baton, scratch_pool, scratch_pool)); + cleanup_queue = svn_wc__wq_merge(cleanup_queue, work_item, scratch_pool); /* Create a property diff which shows all props as added. */ SVN_ERR(svn_prop_diffs(&propchanges, working_props, @@ -3196,6 +3254,7 @@ tc_editor_update_add_merge_files(added_n scratch_pool, scratch_pool)); work_items = svn_wc__wq_merge(work_items, work_item, scratch_pool); + work_items = svn_wc__wq_merge(work_items, cleanup_queue, scratch_pool); if (merge_outcome == svn_wc_merge_conflict) content_state = svn_wc_notify_state_conflicted; @@ -3373,12 +3432,23 @@ update_locally_added_node(added_node_bat * is currently not installed because the base tree is shadowed. * Queue an installation of this node into the working copy. */ if (base_kind == svn_node_file || base_kind == svn_node_symlink) - SVN_ERR(svn_wc__wq_build_file_install(&work_item, db, local_abspath, - NULL, - /* FIXME: use_commit_times? */ - FALSE, - TRUE, /* record_file_info */ - scratch_pool, scratch_pool)); + { + const char *install_from; + svn_skel_t *cleanup_work_item; + + SVN_ERR(svn_wc__textbase_setaside_wq(&install_from, + &cleanup_work_item, + db, local_abspath, NULL, + b->cancel_func, b->cancel_baton, + scratch_pool, scratch_pool)); + SVN_ERR(svn_wc__wq_build_file_install(&work_item, db, local_abspath, + install_from, + /* FIXME: use_commit_times? */ + FALSE, + TRUE, /* record_file_info */ + scratch_pool, scratch_pool)); + work_item = svn_wc__wq_merge(work_item, cleanup_work_item, scratch_pool); + } else if (base_kind == svn_node_dir) SVN_ERR(svn_wc__wq_build_dir_install(&work_item, db, local_abspath, scratch_pool, scratch_pool));
Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/authz_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/authz_tests.py?rev=1897946&r1=1897945&r2=1897946&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/authz_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/authz_tests.py Thu Feb 10 20:04:43 2022 @@ -1613,6 +1613,7 @@ def authz_log_censor_revprops(sbox): '-r1', sbox.repo_url]) @Skip(svntest.main.is_ra_type_file) +@Wimp("Applying delta to a local mod needs access to the text base") def remove_access_after_commit(sbox): "remove a subdir with authz file" Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/basic_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/basic_tests.py?rev=1897946&r1=1897945&r2=1897946&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/basic_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/basic_tests.py Thu Feb 10 20:04:43 2022 @@ -355,6 +355,7 @@ def basic_mkdir_wc_with_parents(sbox): #---------------------------------------------------------------------- +@Wimp("Relies on wc.text_base_path()") def basic_commit_corruption(sbox): "basic corruption detection on commit" @@ -420,6 +421,7 @@ def basic_commit_corruption(sbox): expected_status) #---------------------------------------------------------------------- +@Wimp("Relies on wc.text_base_path()") def basic_update_corruption(sbox): "basic corruption detection on update" @@ -3244,6 +3246,42 @@ def filtered_ls_top_level_path(sbox): exit_code, output, error = svntest.actions.run_and_verify_svn( [], [], 'ls', f_path, '--search=*/*', *extra_opts) +def keep_local_reverted_properly(sbox): + "rm --keep-local, /bin/rm, revert" + + sbox.build(read_only=True) + wc_dir = sbox.wc_dir + + lambda_path = sbox.ospath('A/B/lambda') + E_path = sbox.ospath('A/B/E') + targets = [ lambda_path, E_path ] + + # Modify + sbox.simple_append('A/B/lambda', "added text\n") + svntest.main.run_svn(None, 'ps', 'k', 'v', E_path) + + # Schedule for removal + svntest.main.run_svn(None, 'rm', '--keep-local', *targets) + + # Remove from disk + os.unlink(lambda_path) + shutil.rmtree(E_path) + + # Revert + svntest.main.run_svn(None, 'revert', *targets) + + # Check that the modifications are absent + # + # alpha and beta are still scheduled for deletion because 'revert' doesn't + # recurse by default. + expected_disk = svntest.main.greek_state.copy() + expected_disk.remove('A/B/E/alpha', 'A/B/E/beta') + expected_output = svntest.actions.get_virginal_state(wc_dir, 1) + expected_output.tweak('A/B/E/alpha', 'A/B/E/beta', status='D ') + # + svntest.actions.verify_disk(sbox.wc_dir, expected_disk, check_props=True) + svntest.actions.run_and_verify_status(wc_dir, expected_output) + ######################################################################## # Run the tests @@ -3320,6 +3358,7 @@ test_list = [ None, null_update_last_changed_revision, null_prop_update_last_changed_revision, filtered_ls_top_level_path, + keep_local_reverted_properly, ] if __name__ == '__main__': Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/diff_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/diff_tests.py?rev=1897946&r1=1897945&r2=1897946&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/diff_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/diff_tests.py Thu Feb 10 20:04:43 2022 @@ -3063,6 +3063,7 @@ def diff_wrong_extension_type(sbox): 'diff', '-x', sbox.wc_dir, '-r', '1') # Check the order of the arguments for an external diff tool +@Wimp("Relies on wc.text_base_path()") def diff_external_diffcmd(sbox): "svn diff --diff-cmd provides the correct arguments" Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/externals_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/externals_tests.py?rev=1897946&r1=1897945&r2=1897946&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/externals_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/externals_tests.py Thu Feb 10 20:04:43 2022 @@ -67,14 +67,21 @@ def externals_test_setup(sbox): The arrangement of the externals in the first repository is: - /A/B/ ==> ^/A/D/gamma gamma - /A/C/ ==> exdir_G <scheme>:///<other_repos>/A/D/G - ../../../<other_repos_basename>/A/D/H@1 exdir_H - - /A/D/ ==> ^/../<other_repos_basename>/A exdir_A - //<other_repos>/A/D/G/ exdir_A/G/ - exdir_A/H -r 1 <scheme>:///<other_repos>/A/D/H - /<some_paths>/A/B x/y/z/blah + Properties on 'A/B': + svn:externals + ^/A/D/gamma gamma + + Properties on 'A/C': + svn:externals + exdir_G <scheme>://<...>/<other_repos_basename>/A/D/G + ../../../<other_repos_basename>/A/D/H@1 exdir_H + + Properties on 'A/D': + svn:externals + ^/../<other_repos_basename>/A exdir_A + //<scheme-relative URI to other_repos>/A/D/G/ exdir_A/G/ + exdir_A/H -r 1 <scheme>://<...>/<other_repos_basename>/A/D/H + /<root-relative URI to other_repos>/A/B x/y/z/blah A dictionary is returned keyed by the directory created by the external whose value is the URL of the external. @@ -1625,6 +1632,8 @@ def merge_target_with_externals(sbox): " /A-branch:8\n"], [], 'pg', svntest.main.SVN_PROP_MERGEINFO, '-vR', wc_dir) +# Existing issue: `src_stream` not closed in externals.c:apply_textdelta() +@XFail(svntest.main.is_os_windows) def update_modify_file_external(sbox): "update that modifies a file external" @@ -2790,6 +2799,8 @@ def shadowing(sbox): # Test for issue #4093 'remapping a file external can segfault due to # "deleted" props'. @Issue(4093) +# Existing issue: `src_stream` not closed in externals.c:apply_textdelta() +@XFail(svntest.main.is_os_windows) def remap_file_external_with_prop_del(sbox): "file external remap segfaults due to deleted props" @@ -4167,6 +4178,8 @@ def file_external_to_normal_file(sbox): expected_status) @Issue(4580) +# Existing issue: `src_stream` not closed in externals.c:apply_textdelta() +@XFail(svntest.main.is_os_windows) def file_external_recorded_info(sbox): "check file external recorded info" Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/log_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/log_tests.py?rev=1897946&r1=1897945&r2=1897946&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/log_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/log_tests.py Thu Feb 10 20:04:43 2022 @@ -2816,6 +2816,59 @@ def log_with_merge_history_and_search(sb if count(output, "<logentry") != count(output, "</logentry"): raise svntest.Failure("Apparently invalid XML in " + repr(output)) +@XFail(svntest.main.is_ra_type_file) +@Issue(4856) +def log_xml_with_merge_history(sbox): + "log --use-merge-history --xml" + + sbox.build() + + # r2-r4: create branches + sbox.simple_repo_copy('A', 'A2') + sbox.simple_repo_copy('A', 'A3') + sbox.simple_repo_copy('A', 'A4') + + # r5: mod in trunk + sbox.simple_append('A/mu', 'line 2') + sbox.simple_commit(message='r5: mod') + sbox.simple_update() + + # r6-r7: merge A=>A2, A2=>A3 + svntest.main.run_svn(None, 'merge', '-c', '5', sbox.repo_url + '/A', sbox.ospath('A2')) + sbox.simple_commit(message='r6: merge A=>A2') + sbox.simple_update() + svntest.main.run_svn(None, 'merge', '-c', '6', sbox.repo_url + '/A2', sbox.ospath('A3')) + sbox.simple_commit(message='r7: merge A2=>A3') + sbox.simple_update() + + # r8: add file in A3 + xi_path = os.path.join(sbox.wc_dir, 'A3/xi') + svntest.main.file_write(xi_path, "This is the file 'A3/xi'.\n") + svntest.main.run_svn(None, 'add', xi_path) + sbox.simple_commit(message='r8: add A3/xi') + sbox.simple_update() + + # r9: merge A3=>A4 + svntest.main.run_svn(None, 'merge', '-r', '6:8', sbox.repo_url + '/A3', sbox.ospath('A4')) + sbox.simple_commit(message='r9: merge A3=>A4') + sbox.simple_update() + + # Helper function + def count(haystack, needle): + """Return the number of times the string NEEDLE occurs in the string + HAYSTACK.""" + return len(haystack.split(needle)) - 1 + + # Check the output is valid + # ### Since the test is currently XFail, we only smoke test the output. + # ### When fixing this test to PASS, extend this validation. + _, output, _ = svntest.main.run_svn(None, 'log', '--xml', '-g', '-r', '8:9', + sbox.ospath('A4')) + + output = '\n'.join(output) + if count(output, "<logentry") != count(output, "</logentry"): + raise svntest.Failure("Apparently invalid XML in " + repr(output)) + ######################################################################## # Run the tests @@ -2867,6 +2920,7 @@ test_list = [ None, log_revision_move_copy, log_on_deleted_deep, log_with_merge_history_and_search, + log_xml_with_merge_history, ] if __name__ == '__main__': Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/pegrev_parse_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/pegrev_parse_tests.py?rev=1897946&r1=1897945&r2=1897946&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/pegrev_parse_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/pegrev_parse_tests.py Thu Feb 10 20:04:43 2022 @@ -52,7 +52,7 @@ Item = wc.StateItem # commands, because the parser may have (and as of this writing does have) # edge-case bugs that we can only expose in this way. Therefore, these helpers # ensure that we run 'svn' with the CWD at the root of the working copy. -def run_svn(sbox, expected_status, expected_stderr, *varargs): +def run_svn_at_wcdir(sbox, expected_status, expected_stderr, *varargs): if expected_stderr is None: expected_stderr = [] @@ -96,8 +96,8 @@ def do_add_file(sbox, dst, dst_cmdline, expected_status.add({dst: Item(status='A ', wc_rev='-')}) main.file_write(sbox.ospath(dst), "This is file '" + dst + "'.") - run_svn(sbox, expected_status, expected_stderr, - 'add', dst_cmdline) + run_svn_at_wcdir(sbox, expected_status, expected_stderr, + 'add', dst_cmdline) def do_add_file_e(sbox, dst, dst_cmdline, expected_stderr=None): "like do_add_file() but with an empty sandbox" @@ -109,8 +109,8 @@ def do_make_dir(sbox, dst, dst_cmdline, if expected_status is not None: expected_status.add({dst: Item(status='A ', wc_rev='-')}) - run_svn(sbox, expected_status, expected_stderr, - 'mkdir', dst_cmdline) + run_svn_at_wcdir(sbox, expected_status, expected_stderr, + 'mkdir', dst_cmdline) def do_make_dir_e(sbox, dst, dst_cmdline, expected_stderr=None): "like do_make_dir() but with an empty sandbox" @@ -121,8 +121,8 @@ def do_remove(sbox, dst, dst_cmdline, ex if expected_status is not None and dst in expected_status.desc: expected_status.tweak(dst, status='D ') - run_svn(sbox, expected_status, expected_stderr, - 'remove', dst_cmdline) + run_svn_at_wcdir(sbox, expected_status, expected_stderr, + 'remove', dst_cmdline) def do_rename(sbox, src, src_cmdline, dst, dst_cmdline, expected_stderr=None): @@ -132,8 +132,8 @@ def do_rename(sbox, src, src_cmdline, ds expected_status.add({dst: Item(status='A ', copied='+', moved_from=src, wc_rev='-')}) - run_svn(sbox, expected_status, expected_stderr, - 'rename', src_cmdline, dst_cmdline) + run_svn_at_wcdir(sbox, expected_status, expected_stderr, + 'rename', src_cmdline, dst_cmdline) ###################################################################### Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/revert_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/revert_tests.py?rev=1897946&r1=1897945&r2=1897946&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/revert_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/revert_tests.py Thu Feb 10 20:04:43 2022 @@ -243,6 +243,15 @@ def revert_from_wc_root(sbox): svntest.actions.run_and_verify_status('', expected_output) @Issue(1663) +# Walking the text-bases automatically repairs timestamps, so now the +# first and the second reverts in this test behave identically, as if +# 'svn cleanup' or any other command that repairs the timestamps had been +# called beforehand. Judging by the second part of the test, we're fine +# with revert doing nothing in that case, but that essentially contradicts +# the expectation in its first part. +# +# I temporarily mark the test XFail. See r1101730 and r1101817 for details. +@XFail() def revert_reexpand_keyword(sbox): "revert reexpands manually contracted keyword" Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/actions.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/actions.py?rev=1897946&r1=1897945&r2=1897946&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/actions.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/actions.py Thu Feb 10 20:04:43 2022 @@ -2134,9 +2134,10 @@ def disable_revprop_changes(repo_dir): main.create_python_hook_script(hook_path, 'import sys\n' 'sys.stderr.write("pre-revprop-change %s" %' - ' " ".join(sys.argv[1:]))\n' + ' " ".join(sys.argv[2:]))\n' 'sys.exit(1)\n', cmd_alternative= + '@shift\n' '@echo pre-revprop-change %* 1>&2\n' '@exit 1\n') Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/main.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/main.py?rev=1897946&r1=1897945&r2=1897946&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/main.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/svntest/main.py Thu Feb 10 20:04:43 2022 @@ -627,6 +627,13 @@ def run_command_stdin(command, error_exp start = time.time() + if sys.version_info >= (3, 0): + # Don't include 'bytes' since spawn_process() would raise. + assert all(isinstance(arg, (str, int)) for arg in varargs) + else: + # Include 'unicode' since svnrdump_tests pass b''.decode(). + assert all(isinstance(arg, (str, unicode, int)) for arg in varargs) + exit_code, stdout_lines, stderr_lines = spawn_process(command, bufsize, binary_mode, @@ -648,8 +655,7 @@ def run_command_stdin(command, error_exp break # Does the server leak the repository on-disk path? # (prop_tests-12 installs a hook script that does that intentionally) - if any(map(_line_contains_repos_diskpath, lines)) \ - and not any(map(lambda arg: 'prop_tests-12' in arg, varargs)): + if any(map(_line_contains_repos_diskpath, lines)): raise Failure("Repository diskpath in %s: %r" % (name, lines)) valgrind_diagnostic = False Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/trans_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/trans_tests.py?rev=1897946&r1=1897945&r2=1897946&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/trans_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/trans_tests.py Thu Feb 10 20:04:43 2022 @@ -213,6 +213,7 @@ def keywords_off(path): ### This test is know to fail when Subversion is built in very deep ### directory structures, caused by SVN_KEYWORD_MAX_LEN being defined ### as 255. +@Wimp("Relies on wc.text_base_path()") def keywords_from_birth(sbox): "commit new files with keywords active from birth" @@ -551,6 +552,7 @@ def update_modified_with_translation(sbo # after the commit, the file and its text-base have been changed to # have the new line-ending style. @Issue(1085) +@Wimp("Relies on wc.text_base_path()") def eol_change_is_text_mod(sbox): "committing eol-style change forces text send" Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/update_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/update_tests.py?rev=1897946&r1=1897945&r2=1897946&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/update_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/update_tests.py Thu Feb 10 20:04:43 2022 @@ -5138,6 +5138,9 @@ def revive_children_of_copy(sbox): raise svntest.Failure('psi unexpectedly non-existent') @SkipUnless(svntest.main.is_os_windows) +# Needs work: the access denied error now happens when we use the +# working file as the base in update_editor.c:apply_textdelta(). +@Wimp("Need to update the access denied handling in update_editor.c") def skip_access_denied(sbox): """access denied paths should be skipped""" @@ -6779,6 +6782,7 @@ def update_add_conflicted_deep(sbox): # This final update used to segfault using 1.9.0 and 1.9.1 sbox.simple_update('A/z/z', 3) +@Wimp("The error message has changed") def missing_tmp_update(sbox): "missing tmp update caused segfault" Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py?rev=1897946&r1=1897945&r2=1897946&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/cmdline/upgrade_tests.py Thu Feb 10 20:04:43 2022 @@ -118,9 +118,10 @@ def check_pristine(sbox, files): for file in files: file_path = sbox.ospath(file) file_text = open(file_path, 'r').read() - file_pristine = open(svntest.wc.text_base_path(file_path), 'r').read() - if (file_text != file_pristine): - raise svntest.Failure("pristine mismatch for '%s'" % (file)) + # The file at wc.text_base_path() may not exist: + # file_pristine = open(svntest.wc.text_base_path(file_path), 'r').read() + # if (file_text != file_pristine): + # raise svntest.Failure("pristine mismatch for '%s'" % (file)) def check_dav_cache(dir_path, wc_id, expected_dav_caches): dot_svn = svntest.main.get_admin_name() @@ -137,9 +138,8 @@ def check_dav_cache(dir_path, wc_id, exp minor = sqlite_ver[1] patch = sqlite_ver[2] - if major < 3 or (major == 3 and minor < 6) \ - or (major == 3 and minor == 6 and patch < 18): - return # We need a newer SQLite + if major < 3 or (major == 3 and minor < 9): + return # We need a newer SQLite for local_relpath, expected_dav_cache in expected_dav_caches.items(): # NODES conversion is complete enough that we can use it if it exists @@ -796,6 +796,7 @@ def delete_in_copy_upgrade(sbox): 'b347d1da69df9a6a70433ceeaa0d46c8483e8c03']]) +@Wimp("Can't fetch pristines: the working copy points to file:///tmp/repo") def replaced_files(sbox): "upgrade with base and working replaced files" @@ -1370,6 +1371,7 @@ def upgrade_1_7_dir_external(sbox): svntest.actions.run_and_verify_svn(None, [], 'upgrade', sbox.wc_dir) @SkipUnless(svntest.wc.python_sqlite_can_read_wc) +@Wimp("Test calls status on a non-upgraded wc") def auto_analyze(sbox): """automatic SQLite ANALYZE""" Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/db-test.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/db-test.c?rev=1897946&r1=1897945&r2=1897946&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/db-test.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/db-test.c Thu Feb 10 20:04:43 2022 @@ -87,7 +87,7 @@ static const char * const TESTING_DATA = "insert into repository values (2, '" ROOT_TWO "', '" UUID_TWO "'); " "insert into wcroot values (1, null); " - "insert into pristine values ('$sha1$" SHA1_1 "', NULL, 15, 1, '$md5 $" MD5_1 "'); " + "insert into pristine values ('$sha1$" SHA1_1 "', NULL, 15, 1, '$md5 $" MD5_1 "', 1); " ); #define NOT_MOVED FALSE, NULL Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/entries-compat.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/entries-compat.c?rev=1897946&r1=1897945&r2=1897946&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/entries-compat.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/entries-compat.c Thu Feb 10 20:04:43 2022 @@ -86,7 +86,7 @@ static const char * const TESTING_DATA = "insert into repository values (2, '" ROOT_TWO "', '" UUID_TWO "'); " "insert into wcroot values (1, null); " - "insert into pristine values ('$sha1$" SHA1_1 "', NULL, 15, 1, '$md5 $" MD5_1 "'); " + "insert into pristine values ('$sha1$" SHA1_1 "', NULL, 15, 1, '$md5 $" MD5_1 "', 1); " ); #define NOT_MOVED FALSE, NULL Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/pristine-store-test.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/pristine-store-test.c?rev=1897946&r1=1897945&r2=1897946&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/pristine-store-test.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/pristine-store-test.c Thu Feb 10 20:04:43 2022 @@ -94,7 +94,7 @@ pristine_write_read(const svn_test_opts_ SVN_ERR(svn_wc__db_pristine_prepare_install(&pristine_stream, &install_data, &data_sha1, &data_md5, - db, wc_abspath, + db, wc_abspath, TRUE, pool, pool)); sz = strlen(data); @@ -104,10 +104,12 @@ pristine_write_read(const svn_test_opts_ /* Ensure it's not already in the store. */ { svn_boolean_t present; + svn_boolean_t hydrated; - SVN_ERR(svn_wc__db_pristine_check(&present, db, wc_abspath, data_sha1, - pool)); + SVN_ERR(svn_wc__db_pristine_check(&present, &hydrated, db, wc_abspath, + data_sha1, pool)); SVN_TEST_ASSERT(! present); + SVN_TEST_ASSERT(! hydrated); } /* Install the new pristine file, referenced by its checksum. */ @@ -117,10 +119,12 @@ pristine_write_read(const svn_test_opts_ /* Ensure it is now found in the store. */ { svn_boolean_t present; + svn_boolean_t hydrated; - SVN_ERR(svn_wc__db_pristine_check(&present, db, wc_abspath, data_sha1, - pool)); + SVN_ERR(svn_wc__db_pristine_check(&present, &hydrated, db, wc_abspath, + data_sha1, pool)); SVN_TEST_ASSERT(present); + SVN_TEST_ASSERT(hydrated); } /* Look up its MD-5 from its SHA-1, and check it's the same MD-5. */ @@ -161,10 +165,12 @@ pristine_write_read(const svn_test_opts_ /* Ensure it's no longer found in the store. */ { svn_boolean_t present; + svn_boolean_t hydrated; - SVN_ERR(svn_wc__db_pristine_check(&present, db, wc_abspath, data_sha1, - pool)); + SVN_ERR(svn_wc__db_pristine_check(&present, &hydrated, db, wc_abspath, + data_sha1, pool)); SVN_TEST_ASSERT(! present); + SVN_TEST_ASSERT(! hydrated); } return SVN_NO_ERROR; @@ -191,7 +197,7 @@ pristine_delete_while_open(const svn_tes SVN_ERR(svn_wc__db_pristine_prepare_install(&pristine_stream, &install_data, &data_sha1, &data_md5, - db, wc_abspath, + db, wc_abspath, TRUE, pool, pool)); sz = strlen(data); @@ -221,10 +227,12 @@ pristine_delete_while_open(const svn_tes * an orphan, depending on the implementation.) */ { svn_boolean_t present; + svn_boolean_t hydrated; - SVN_ERR(svn_wc__db_pristine_check(&present, db, wc_abspath, data_sha1, - pool)); + SVN_ERR(svn_wc__db_pristine_check(&present, &hydrated, db, wc_abspath, + data_sha1, pool)); SVN_TEST_ASSERT(! present); + SVN_TEST_ASSERT(! hydrated); } /* Close the read stream */ @@ -264,7 +272,7 @@ reject_mismatching_text(const svn_test_o SVN_ERR(svn_wc__db_pristine_prepare_install(&pristine_stream, &install_data, &data_sha1, &data_md5, - db, wc_abspath, + db, wc_abspath, TRUE, pool, pool)); sz = strlen(data); @@ -286,7 +294,7 @@ reject_mismatching_text(const svn_test_o SVN_ERR(svn_wc__db_pristine_prepare_install(&pristine_stream, &install_data, &data_sha1, &data_md5, - db, wc_abspath, + db, wc_abspath, TRUE, pool, pool)); sz = strlen(data2); @@ -306,6 +314,219 @@ reject_mismatching_text(const svn_test_o #endif } +static svn_error_t * +pristine_install_dehydrated(const svn_test_opts_t *opts, + apr_pool_t *pool) +{ + svn_wc__db_t *db; + const char *wc_abspath; + + svn_wc__db_install_data_t *install_data; + svn_stream_t *pristine_stream; + apr_size_t sz; + + const char data[] = "Blah"; + svn_checksum_t *data_sha1, *data_md5; + + SVN_ERR(create_repos_and_wc(&wc_abspath, &db, + "pristine_install_dehydrated", opts, pool)); + + /* Write DATA into a new temporary pristine file, set PRISTINE_TMP_ABSPATH + * to its path and set DATA_SHA1 and DATA_MD5 to its checksums. */ + SVN_ERR(svn_wc__db_pristine_prepare_install(&pristine_stream, + &install_data, + &data_sha1, &data_md5, + db, wc_abspath, FALSE, + pool, pool)); + + sz = strlen(data); + SVN_ERR(svn_stream_write(pristine_stream, data, &sz)); + SVN_ERR(svn_stream_close(pristine_stream)); + + /* Ensure it's not already in the store. */ + { + svn_boolean_t present; + svn_boolean_t hydrated; + + SVN_ERR(svn_wc__db_pristine_check(&present, &hydrated, db, wc_abspath, + data_sha1, pool)); + SVN_TEST_ASSERT(! present); + SVN_TEST_ASSERT(! hydrated); + } + + /* Install the new pristine file, referenced by its checksum. */ + SVN_ERR(svn_wc__db_pristine_install(install_data, + data_sha1, data_md5, pool)); + + /* Ensure it is now found in the store. */ + { + svn_boolean_t present; + svn_boolean_t hydrated; + + SVN_ERR(svn_wc__db_pristine_check(&present, &hydrated, db, wc_abspath, + data_sha1, pool)); + SVN_TEST_ASSERT(present); + SVN_TEST_ASSERT(! hydrated); + } + + /* Look up its MD-5 from its SHA-1, and check it's the same MD-5. */ + { + const svn_checksum_t *looked_up_md5; + + SVN_ERR(svn_wc__db_pristine_get_md5(&looked_up_md5, db, wc_abspath, + data_sha1, pool, pool)); + SVN_TEST_ASSERT(looked_up_md5->kind == svn_checksum_md5); + SVN_TEST_ASSERT(svn_checksum_match(data_md5, looked_up_md5)); + } + + /* Check the saved pristine size and try to read the pristine text back. */ + { + svn_stream_t *actual_contents; + svn_filesize_t actual_size; + + SVN_ERR(svn_wc__db_pristine_read(&actual_contents, &actual_size, + db, wc_abspath, data_sha1, pool, pool)); + SVN_TEST_ASSERT(actual_contents == NULL); + SVN_TEST_INT_ASSERT(actual_size, sz); + } + + /* Trivially test the "remove if unreferenced" API: it's not referenced + so we should be able to remove it. */ + { + svn_error_t *err; + svn_stream_t *data_read_back; + + SVN_ERR(svn_wc__db_pristine_remove(db, wc_abspath, data_sha1, pool)); + err = svn_wc__db_pristine_read(&data_read_back, NULL, db, wc_abspath, + data_sha1, pool, pool); + SVN_TEST_ASSERT_ERROR(err, SVN_ERR_WC_PATH_NOT_FOUND); + } + + /* Ensure it's no longer found in the store. */ + { + svn_boolean_t present; + svn_boolean_t hydrated; + + SVN_ERR(svn_wc__db_pristine_check(&present, &hydrated, db, wc_abspath, + data_sha1, pool)); + SVN_TEST_ASSERT(! present); + SVN_TEST_ASSERT(! hydrated); + } + + return SVN_NO_ERROR; +} + +static svn_error_t * +pristine_dehydrate(const svn_test_opts_t *opts, + apr_pool_t *pool) +{ + svn_wc__db_t *db; + const char *wc_abspath; + + svn_wc__db_install_data_t *install_data; + svn_stream_t *pristine_stream; + apr_size_t sz; + + const char data[] = "Blah"; + svn_string_t *data_string = svn_string_create(data, pool); + svn_checksum_t *data_sha1, *data_md5; + + SVN_ERR(create_repos_and_wc(&wc_abspath, &db, + "pristine_dehydrate", opts, pool)); + + /* Write DATA into a new temporary pristine file, set PRISTINE_TMP_ABSPATH + * to its path and set DATA_SHA1 and DATA_MD5 to its checksums. */ + SVN_ERR(svn_wc__db_pristine_prepare_install(&pristine_stream, + &install_data, + &data_sha1, &data_md5, + db, wc_abspath, TRUE, + pool, pool)); + + sz = strlen(data); + SVN_ERR(svn_stream_write(pristine_stream, data, &sz)); + SVN_ERR(svn_stream_close(pristine_stream)); + + /* Install the new pristine file, referenced by its checksum. */ + SVN_ERR(svn_wc__db_pristine_install(install_data, + data_sha1, data_md5, pool)); + + /* Check the state of the pristine. */ + { + svn_boolean_t present; + svn_boolean_t hydrated; + + SVN_ERR(svn_wc__db_pristine_check(&present, &hydrated, db, wc_abspath, + data_sha1, pool)); + SVN_TEST_ASSERT(present); + SVN_TEST_ASSERT(hydrated); + } + + /* Dehydrate the pristine. */ + SVN_ERR(svn_wc__db_pristine_dehydrate(db, wc_abspath, data_sha1, pool)); + + /* Check the state of the pristine. */ + { + svn_boolean_t present; + svn_boolean_t hydrated; + + SVN_ERR(svn_wc__db_pristine_check(&present, &hydrated, db, wc_abspath, + data_sha1, pool)); + SVN_TEST_ASSERT(present); + SVN_TEST_ASSERT(! hydrated); + } + + /* Check the saved pristine size and try to read the pristine text back. */ + { + svn_stream_t *actual_contents; + svn_filesize_t actual_size; + + SVN_ERR(svn_wc__db_pristine_read(&actual_contents, &actual_size, + db, wc_abspath, data_sha1, pool, pool)); + SVN_TEST_ASSERT(actual_contents == NULL); + SVN_TEST_INT_ASSERT(actual_size, sz); + } + + /* Rehydrate it by installing the pristine again. */ + SVN_ERR(svn_wc__db_pristine_prepare_install(&pristine_stream, + &install_data, + &data_sha1, &data_md5, + db, wc_abspath, TRUE, + pool, pool)); + + sz = strlen(data); + SVN_ERR(svn_stream_write(pristine_stream, data, &sz)); + SVN_ERR(svn_stream_close(pristine_stream)); + + SVN_ERR(svn_wc__db_pristine_install(install_data, + data_sha1, data_md5, pool)); + + /* Check the state of the pristine. */ + { + svn_boolean_t present; + svn_boolean_t hydrated; + + SVN_ERR(svn_wc__db_pristine_check(&present, &hydrated, db, wc_abspath, + data_sha1, pool)); + SVN_TEST_ASSERT(present); + SVN_TEST_ASSERT(hydrated); + } + + /* Read the pristine text back and verify it's the same content. */ + { + svn_stream_t *data_stream = svn_stream_from_string(data_string, pool); + svn_stream_t *data_read_back; + svn_boolean_t same; + + SVN_ERR(svn_wc__db_pristine_read(&data_read_back, NULL, db, wc_abspath, + data_sha1, pool, pool)); + SVN_ERR(svn_stream_contents_same2(&same, data_read_back, data_stream, + pool)); + SVN_TEST_ASSERT(same); + } + + return SVN_NO_ERROR; +} + static int max_threads = -1; @@ -318,6 +539,10 @@ static struct svn_test_descriptor_t test "pristine_delete_while_open"), SVN_TEST_OPTS_PASS(reject_mismatching_text, "reject_mismatching_text"), + SVN_TEST_OPTS_PASS(pristine_install_dehydrated, + "pristine_install_dehydrated"), + SVN_TEST_OPTS_PASS(pristine_dehydrate, + "pristine_dehydrate"), SVN_TEST_NULL }; Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/utils.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/utils.c?rev=1897946&r1=1897945&r2=1897946&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/utils.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/utils.c Thu Feb 10 20:04:43 2022 @@ -414,28 +414,22 @@ sbox_wc_copy_url(svn_test__sandbox_t *b, svn_error_t * sbox_wc_revert(svn_test__sandbox_t *b, const char *path, svn_depth_t depth) { - const char *abspath = sbox_wc_path(b, path); - const char *dir_abspath; - const char *lock_root_abspath; + svn_client_ctx_t *ctx; + apr_array_header_t *paths; - if (strcmp(abspath, b->wc_abspath)) - dir_abspath = svn_dirent_dirname(abspath, b->pool); - else - dir_abspath = abspath; + SVN_ERR(svn_test__create_client_ctx(&ctx, b, b->pool)); + + paths = apr_array_make(b->pool, 1, sizeof(const char *)); + APR_ARRAY_PUSH(paths, const char *) = sbox_wc_path(b, path); + + SVN_ERR(svn_client_revert4(paths, depth, + NULL /* changelists */, + FALSE /* clear_changelists */, + FALSE /* metadata_only */, + TRUE /*added_keep_local*/, + ctx, + b->pool)); - 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_revert6(b->wc_ctx, abspath, depth, - FALSE /* use_commit_times */, - NULL /* changelist_filter */, - FALSE /* clear_changelists */, - FALSE /* metadata_only */, - TRUE /*added_keep_local*/, - NULL, NULL, /* cancel baton + func */ - NULL, NULL, /* notify baton + func */ - b->pool)); - SVN_ERR(svn_wc__release_write_lock(b->wc_ctx, lock_root_abspath, b->pool)); return SVN_NO_ERROR; } @@ -585,27 +579,14 @@ svn_error_t * sbox_wc_resolve(svn_test__sandbox_t *b, const char *path, svn_depth_t depth, svn_wc_conflict_choice_t conflict_choice) { - const char *lock_abspath; - svn_error_t *err; + svn_client_ctx_t *ctx; + + SVN_ERR(svn_test__create_client_ctx(&ctx, b, b->pool)); - SVN_ERR(svn_wc__acquire_write_lock_for_resolve(&lock_abspath, b->wc_ctx, - sbox_wc_path(b, path), - b->pool, b->pool)); - err = svn_wc__resolve_conflicts(b->wc_ctx, sbox_wc_path(b, path), - depth, - TRUE /* resolve_text */, - "" /* resolve_prop (ALL props) */, - TRUE /* resolve_tree */, - conflict_choice, - NULL, NULL, /* conflict func */ - NULL, NULL, /* cancellation */ - NULL, NULL, /* notification */ - b->pool); - - err = svn_error_compose_create(err, svn_wc__release_write_lock(b->wc_ctx, - lock_abspath, - b->pool)); - return err; + SVN_ERR(svn_client_resolve(sbox_wc_path(b, path), depth, conflict_choice, + ctx, b->pool)); + + return SVN_NO_ERROR; } svn_error_t * Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/wc-queries-test.c URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/wc-queries-test.c?rev=1897946&r1=1897945&r2=1897946&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/wc-queries-test.c (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/wc-queries-test.c Thu Feb 10 20:04:43 2022 @@ -106,14 +106,14 @@ static const int slow_statements[] = STMT_SELECT_PRESENT_HIGHEST_WORKING_NODES_BY_BASENAME_AND_KIND, STMT_SELECT_COPIES_OF_REPOS_RELPATH, - /* Designed as slow to avoid penalty on other queries */ - STMT_SELECT_UNREFERENCED_PRISTINES, - /* Slow, but just if foreign keys are enabled: * STMT_DELETE_PRISTINE_IF_UNREFERENCED, */ STMT_HAVE_STAT1_TABLE, /* Queries sqlite_master which has no index */ + /* Currently uses a temporary B-tree for GROUP BY */ + STMT_TEXTBASE_SYNC, + -1 /* final marker */ }; Modified: subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/wc-test-queries.sql URL: http://svn.apache.org/viewvc/subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/wc-test-queries.sql?rev=1897946&r1=1897945&r2=1897946&view=diff ============================================================================== --- subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/wc-test-queries.sql (original) +++ subversion/branches/pristines-on-demand-on-mwf/subversion/tests/libsvn_wc/wc-test-queries.sql Thu Feb 10 20:04:43 2022 @@ -61,10 +61,10 @@ INSERT INTO actual_node (local_relpath, VALUES (?1, ?2, ?3, 1) -- STMT_ENSURE_EMPTY_PRISTINE -INSERT OR IGNORE INTO pristine (checksum, md5_checksum, size, refcount) +INSERT OR IGNORE INTO pristine (checksum, md5_checksum, size, refcount, hydrated) VALUES ('$sha1$da39a3ee5e6b4b0d3255bfef95601890afd80709', '$md5 $d41d8cd98f00b204e9800998ecf8427e', - 0, 0) + 0, 0, 1) -- STMT_NODES_SET_FILE UPDATE nodes
