Checkout Tools
  • last updated 1 hour ago
Constraints
Constraints: committers
 
Constraints: files
Constraints: dates
Make 'svn update' not record a tree conflict when deleting an unmodified

directory which happens to contain unversioned items. Instead, just leave

the unversioned items behind on disk when deleting the unmodified directory,

which matches the behaviour of Subversion 1.8.

Prompted by a question on users@:

https://svn.haxx.se/users/archive-2019-01/0060.shtml

* subversion/libsvn_wc/update_editor.c

(check_tree_conflict): Ignore unversioned items during check for local mods.

This prevents a tree conflict from being recorded.

* subversion/tests/cmdline/switch_tests.py

(tolerate_local_mods): Don't expect an unversioned item to cause a tree

conflict. Add the item to version control instead to meet this test's

expectations.

* subversion/tests/cmdline/update_tests.py

(update_keeps_unversioned_items_in_deleted_dir, test_list): New test

which ensures that update will leave unversioned items on disk when

deleting an unmodified directory.

  1. … 2 more files in changeset.
Make 'svn copy URL WC' notifications more self-consistent, and consistent

with 'svn copy FOREIGN-REPO-URL WC'.

Part of issue SVN-2198 "clean up svn_wc_repos_add_repos_file() situation".

Previously we emitted the notifications from 'checkout', revealing an

implementation detail.

Old:

| A A/D/G_COPY/pi

| A A/D/G_COPY/rho

| A A/D/G_COPY/tau

| Checked out revision 6.

| A A/D/G_COPY

New:

| A A/D/G_COPY

| A A/D/G_COPY/pi

| A A/D/G_COPY/rho

| A A/D/G_COPY/tau

* subversion/libsvn_client/copy.c

(notification_adjust_func): Change 'checkout' notifications into plain WC

'add' notifications, discarding unwanted details at the start and end of

checkout.

(svn_client__repos_to_wc_copy_file): Notify here.

(repos_to_wc_copy_single): Do not notify here. Remove an early return, now

that there is no need for it.

* subversion/tests/cmdline/copy_tests.py

(URI_encoded_repos_to_wc): Adjust expectations.

* subversion/tests/cmdline/externals_tests.py

(url_to_wc_copy_of_externals): Same.

* subversion/tests/cmdline/merge_tests.py

(merge_to_switched_path,

natural_history_filtering): Same.

* subversion/tests/cmdline/svntest/mergetrees.py

(set_up_branch): Same.

* subversion/tests/cmdline/switch_tests.py

(mergeinfo_switch_elision): Same.

* subversion/tests/cmdline/update_tests.py

(mergeinfo_update_elision): Same.

  1. … 6 more files in changeset.
Avoid raising skip exceptions without description in the python tests.

* subversion/tests/cmdline/checkout_tests.py

(checkout_wc_from_drive): Use @SkipUnless instead of code.

Add explanation.

* subversion/tests/cmdline/svnadmin_tests.py

(verify_incremental_fsfs): Add explanation.

* subversion/tests/cmdline/svnsync_authz_tests.py

(identity_copy): Add explanation.

* subversion/tests/cmdline/switch_tests.py

(refresh_read_only_attribute): Add explanation.

* subversion/tests/cmdline/update_tests.py

(update_wc_on_windows_drive): Use @SkipUnless instead of code.

Add explanation.

(skip_access_denied): Add explanation.

  1. … 4 more files in changeset.
Following up on r1662794, make the checkout/switch/update logic in the python

test framework use the standard run_and_verify_svn stderr handling, and replace

the 4 singleton arguments of these functions with a completely optional

extra_files args (which handles the only current usage in a better way than

before), that verifies that these files are actually there.

In one case we still installed a singleton handler to allow extra files,

but found no files since the introduction of tree conflicts. (Probably 1.6.0)

The new code would return failure because the files are not here.

* subversion/tests/cmdline/authz_tests.py

* subversion/tests/cmdline/basic_tests.py

* subversion/tests/cmdline/changelist_tests.py

* subversion/tests/cmdline/checkout_tests.py

* subversion/tests/cmdline/copy_tests.py

* subversion/tests/cmdline/depth_tests.py

* subversion/tests/cmdline/diff_tests.py

* subversion/tests/cmdline/externals_tests.py

* subversion/tests/cmdline/import_tests.py

* subversion/tests/cmdline/info_tests.py

* subversion/tests/cmdline/input_validation_tests.py

* subversion/tests/cmdline/log_tests.py

* subversion/tests/cmdline/merge_authz_tests.py

* subversion/tests/cmdline/merge_automatic_tests.py

* subversion/tests/cmdline/merge_reintegrate_tests.py

* subversion/tests/cmdline/merge_tests.py

* subversion/tests/cmdline/merge_tree_conflict_tests.py

* subversion/tests/cmdline/move_tests.py

* subversion/tests/cmdline/prop_tests.py

* subversion/tests/cmdline/resolve_tests.py

* subversion/tests/cmdline/revert_tests.py

* subversion/tests/cmdline/special_tests.py

* subversion/tests/cmdline/stat_tests.py

* subversion/tests/cmdline/svnversion_tests.py

* subversion/tests/cmdline/switch_tests.py

* subversion/tests/cmdline/trans_tests.py

* subversion/tests/cmdline/tree_conflict_tests.py

* subversion/tests/cmdline/update_tests.py

* subversion/tests/cmdline/wc_tests.py

(*): Update caller. Simplify commands where possible. Tried not to

introduce behavior changes.

* subversion/tests/cmdline/svntest/actions.py

(run_and_verify_checkout2,

run_and_verify_checkout): Remove several arguments. Add dynamic keywords.

Update caller.

(verify_update): Define extra_files. Forward to disk comparison.

(verify_disk): If extra_files is set, set singleton handlers and a (new)

done handler. If needed we can add other tests this way.

(run_and_verify_update,

run_and_verify_merge): Remove some arguments. Add dynamic keywords.

Use run_and_verify_svn.

(run_and_verify_patch): Add dynamic keyword support.

(run_and_verify_switch,

run_and_verify_commit): Remove some arguments. Add dynamic keywords.

Use run_and_verify_svn.

(build_greek_tree_conflicts): Update caller.

* subversion/tests/cmdline/svntest/deeptrees.py

(deep_trees_run_tests_scheme_for_update,

deep_trees_skipping_on_update,

deep_trees_run_tests_scheme_for_switch,

deep_trees_run_tests_scheme_for_merge,

do_routine_switching): Update caller. Convert None error to [].

* subversion/tests/cmdline/svntest/factory.py

(TestFactory): Update templates.

* subversion/tests/cmdline/svntest/mergetrees.py

(set_up_dir_replace): Update caller.

* subversion/tests/cmdline/svntest/tree.py

(detect_conflict_files_done): New function.

  1. … 33 more files in changeset.
Make the standard commit logic in the test suite a bit stricter and easier

to use by using the existing run_and_verify_svn() infrastructure for

verifying the error result. When no arguments are passed, pass the directory

used for verifying the result, just like run_and_verify_update() and its

variants.

We already removed an argument from this function for 1.9, so cleaning it

up a bit more won't affect backporting.

* subversion/test/cmdline/authz_tests.py

* subversion/test/cmdline/basic_tests.py

* subversion/test/cmdline/blame_tests.py

* subversion/test/cmdline/changelist_tests.py

* subversion/test/cmdline/checkout_tests.py

* subversion/test/cmdline/commit_tests.py

* subversion/test/cmdline/copy_tests.py

* subversion/test/cmdline/depth_tests.py

* subversion/test/cmdline/diff_tests.py

* subversion/test/cmdline/entries_tests.py

* subversion/test/cmdline/export_tests.py

* subversion/test/cmdline/externals_tests.py

* subversion/test/cmdline/history_tests.py

* subversion/test/cmdline/lock_tests.py

* subversion/test/cmdline/log_tests.py

* subversion/test/cmdline/merge_authz_tests.py

* subversion/test/cmdline/merge_reintegrate_tests.py

* subversion/test/cmdline/merge_tests.py

* subversion/test/cmdline/merge_tree_conflict_tests.py

* subversion/test/cmdline/mergeinfo_tests.py

* subversion/test/cmdline/patch_tests.py

* subversion/test/cmdline/prop_tests.py

* subversion/test/cmdline/relocate_tests.py

* subversion/test/cmdline/resolve_tests.py

* subversion/test/cmdline/revert_tests.py

* subversion/test/cmdline/schedule_tests.py

* subversion/test/cmdline/special_tests.py

* subversion/test/cmdline/stat_tests.py

* subversion/test/cmdline/svnauthz_tests.py

* subversion/test/cmdline/svnlook_tests.py

* subversion/test/cmdline/svnversion_tests.py

* subversion/test/cmdline/switch_tests.py

* subversion/test/cmdline/trans_tests.py

* subversion/test/cmdline/tree_conflict_tests.py

* subversion/test/cmdline/update_tests.py

Tweak tests. Remove unneeded args if possible without changing behavior.

* subversion/test/cmdline/svntest/actions.py

(run_and_verify_commit): Update error argument name and behavior. Supply

default args if none ar provided.

(inject_conflict_into_wc,

build_greek_tree_conflicts): Update caller.

* subversion/test/cmdline/svntest/deeptrees.py

(deep_trees_run_tests_scheme_for_update,

deep_trees_run_tests_scheme_for_switch,

deep_trees_run_tests_scheme_for_merge,

commit_routine_switching): Update caller.

* subversion/test/cmdline/svntest/mergetrees.py

(set_up_dir_replace,

set_up_branch): Update caller.

  1. … 37 more files in changeset.
* subversion/tests/cmdline/switch_tests.py

(tolerate_local_mods): Expect that a delete of a directory with local

changes (read: has unversioned items), raises a tree conflict.

Fix a nasty bug in our update editor's tree conflict detection. On an

incoming delete, it reports the local operation as delete if the only

change somewhere in the tree is a delete. This make it take the wrong

decisions on how to handle the tree conflict: it just deletes everything

while it should have made a copy in WORKING.

Only when the root is deleted (or moved), it should be reported as a

local deleted or the conflict resolver will take the wrong strategy.

This will allow implementing automatic move-update logic for quite a

few cases where that appeared impossible before.

* subversion/libsvn_wc/update_editor.c

(check_tree_conflict): Only report the tree as deleted, when it

is deleted.

* subversion/tests/cmdline/switch_tests.py

(tree_conflicts_on_switch_2_2): Update expectations.

* subversion/tests/cmdline/update_tests.py

(tree_conflicts_on_update_2_2): Update expectations.

* subversion/tests/libsvn_wc/op-depth-test.c

(move_away_delete_update,

move_update_parent_replace): Update expected results. These

cases currently expect a broken move.

  1. … 3 more files in changeset.
Apply the standard pre-branch whitespace cleanup via

tools/dev/remove-trailing-whitespace.zsh

There should be no functional changes.

* .ycm_extra_conf.py

* build/generator/gen_win.py

* build/generator/gen_win_dependencies.py

* subversion/bindings/javahl/native/EditorProxy.h

* subversion/bindings/javahl/native/StateReporter.cpp

* subversion/bindings/javahl/native/org_apache_subversion_javahl_util_ConfigImpl_Category.cpp

* subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c

* subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.h

* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c

* subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c

* subversion/bindings/swig/ruby/test/test_fs.rb

* subversion/bindings/swig/ruby/test/util.rb

* subversion/bindings/swig/ruby/test/windows_util.rb

* subversion/include/private/svn_fs_fs_private.h

* subversion/include/private/svn_packed_data.h

* subversion/include/private/svn_repos_private.h

* subversion/include/private/svn_sorts_private.h

* subversion/include/private/svn_subr_private.h

* subversion/include/private/svn_wc_private.h

* subversion/include/svn_auth.h

* subversion/include/svn_cache_config.h

* subversion/include/svn_client.h

* subversion/include/svn_cmdline.h

* subversion/include/svn_diff.h

* subversion/include/svn_fs.h

* subversion/include/svn_io.h

* subversion/include/svn_ra.h

* subversion/include/svn_repos.h

* subversion/include/svn_string.h

* subversion/libsvn_client/blame.c

* subversion/libsvn_client/commit.c

* subversion/libsvn_client/commit_util.c

* subversion/libsvn_client/copy.c

* subversion/libsvn_client/diff.c

* subversion/libsvn_client/externals.c

* subversion/libsvn_client/log.c

* subversion/libsvn_client/patch.c

* subversion/libsvn_client/ra.c

* subversion/libsvn_client/update.c

* subversion/libsvn_delta/svndiff.c

* subversion/libsvn_diff/parse-diff.c

* subversion/libsvn_fs/fs-loader.c

* subversion/libsvn_fs_base/lock.c

* subversion/libsvn_fs_fs/cached_data.c

* subversion/libsvn_fs_fs/fs_fs.c

* subversion/libsvn_fs_fs/hotcopy.c

* subversion/libsvn_fs_fs/id.c

* subversion/libsvn_fs_fs/index.c

* subversion/libsvn_fs_fs/index.h

* subversion/libsvn_fs_fs/lock.c

* subversion/libsvn_fs_fs/low_level.c

* subversion/libsvn_fs_fs/low_level.h

* subversion/libsvn_fs_fs/pack.c

* subversion/libsvn_fs_fs/recovery.c

* subversion/libsvn_fs_fs/rev_file.c

* subversion/libsvn_fs_fs/revprops.c

* subversion/libsvn_fs_fs/revprops.h

* subversion/libsvn_fs_fs/stats.c

* subversion/libsvn_fs_fs/transaction.c

* subversion/libsvn_fs_fs/tree.c

* subversion/libsvn_fs_fs/verify.c

* subversion/libsvn_fs_x/cached_data.c

* subversion/libsvn_fs_x/changes.c

* subversion/libsvn_fs_x/dag.h

* subversion/libsvn_fs_x/fs.h

* subversion/libsvn_fs_x/fs_id.c

* subversion/libsvn_fs_x/fs_x.c

* subversion/libsvn_fs_x/hotcopy.c

* subversion/libsvn_fs_x/hotcopy.h

* subversion/libsvn_fs_x/index.c

* subversion/libsvn_fs_x/index.h

* subversion/libsvn_fs_x/lock.c

* subversion/libsvn_fs_x/lock.h

* subversion/libsvn_fs_x/low_level.c

* subversion/libsvn_fs_x/low_level.h

* subversion/libsvn_fs_x/noderevs.c

* subversion/libsvn_fs_x/pack.c

* subversion/libsvn_fs_x/reps.c

* subversion/libsvn_fs_x/rev_file.c

* subversion/libsvn_fs_x/revprops.c

* subversion/libsvn_fs_x/revprops.h

* subversion/libsvn_fs_x/string_table.c

* subversion/libsvn_fs_x/string_table.h

* subversion/libsvn_fs_x/transaction.c

* subversion/libsvn_fs_x/tree.c

* subversion/libsvn_fs_x/util.c

* subversion/libsvn_fs_x/verify.c

* subversion/libsvn_ra_local/ra_plugin.c

* subversion/libsvn_ra_serf/ra_serf.h

* subversion/libsvn_ra_serf/serf.c

* subversion/libsvn_ra_serf/update.c

* subversion/libsvn_ra_serf/util.c

* subversion/libsvn_ra_svn/client.c

* subversion/libsvn_ra_svn/marshal.c

* subversion/libsvn_repos/authz_pool.c

* subversion/libsvn_repos/config_pool.c

* subversion/libsvn_repos/dump.c

* subversion/libsvn_repos/fs-wrap.c

* subversion/libsvn_repos/log.c

* subversion/libsvn_subr/bit_array.c

* subversion/libsvn_subr/cache-membuffer.c

* subversion/libsvn_subr/config.c

* subversion/libsvn_subr/dirent_uri.c

* subversion/libsvn_subr/fnv1a.c

* subversion/libsvn_subr/gpg_agent.c

* subversion/libsvn_subr/hash.c

* subversion/libsvn_subr/io.c

* subversion/libsvn_subr/object_pool.c

* subversion/libsvn_subr/packed_data.c

* subversion/libsvn_subr/prefix_string.c

* subversion/libsvn_subr/sorts.c

* subversion/libsvn_subr/sqlite.c

* subversion/libsvn_subr/subst.c

* subversion/libsvn_subr/sysinfo.c

* subversion/libsvn_subr/types.c

* subversion/libsvn_subr/utf.c

* subversion/libsvn_subr/utf8proc/utf8proc_data.c

* subversion/libsvn_subr/x509info.c

* subversion/libsvn_wc/diff.h

* subversion/libsvn_wc/props.c

* subversion/libsvn_wc/update_editor.c

* subversion/libsvn_wc/wc.h

* subversion/libsvn_wc/wc_db.c

* subversion/libsvn_wc/wc_db.h

* subversion/mod_dav_svn/lock.c

* subversion/mod_dav_svn/mod_dav_svn.c

* subversion/mod_dav_svn/status.c

* subversion/svn/auth-cmd.c

* subversion/svn/info-cmd.c

* subversion/svn/mergeinfo-cmd.c

* subversion/svn/notify.c

* subversion/svn/propget-cmd.c

* subversion/svn/svn.c

* subversion/svnadmin/svnadmin.c

* subversion/svnserve/logger.c

* subversion/svnserve/serve.c

* subversion/svnserve/server.h

* subversion/svnserve/svnserve.c

* subversion/tests/cmdline/blame_tests.py

* subversion/tests/cmdline/checkout_tests.py

* subversion/tests/cmdline/commit_tests.py

* subversion/tests/cmdline/export_tests.py

* subversion/tests/cmdline/externals_tests.py

* subversion/tests/cmdline/lock_tests.py

* subversion/tests/cmdline/merge_tests.py

* subversion/tests/cmdline/merge_tree_conflict_tests.py

* subversion/tests/cmdline/move_tests.py

* subversion/tests/cmdline/redirect_tests.py

* subversion/tests/cmdline/stat_tests.py

* subversion/tests/cmdline/svnadmin_tests.py

* subversion/tests/cmdline/switch_tests.py

* subversion/tests/cmdline/update_tests.py

* subversion/tests/libsvn_client/client-test.c

* subversion/tests/libsvn_client/mtcc-test.c

* subversion/tests/libsvn_fs/fs-test.c

* subversion/tests/libsvn_fs/locks-test.c

* subversion/tests/libsvn_fs_fs/fs-fs-fuzzy-test.c

* subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c

* subversion/tests/libsvn_fs_x/fs-x-pack-test.c

* subversion/tests/libsvn_fs_x/string-table-test.c

* subversion/tests/libsvn_ra/ra-test.c

* subversion/tests/libsvn_subr/cache-test.c

* subversion/tests/libsvn_subr/checksum-test.c

* subversion/tests/libsvn_subr/config-test.c

* subversion/tests/libsvn_subr/io-test.c

* subversion/tests/libsvn_subr/packed-data-test.c

* subversion/tests/libsvn_subr/priority-queue-test.c

* subversion/tests/libsvn_subr/sqlite-test.c

* subversion/tests/libsvn_subr/string-test.c

* subversion/tests/libsvn_subr/subst_translate-test.c

* subversion/tests/libsvn_subr/x509-test.c

* subversion/tests/libsvn_wc/op-depth-test.c

* subversion/tests/svn_test_main.c

* tools/dev/benchmarks/RepoPerf/copy_repo.py

* tools/dev/benchmarks/RepoPerf/win_repo_bench.py

* tools/dev/build-svn-deps-win.pl

* tools/dev/fsfs-access-map.c

* tools/dev/po-merge.py

* tools/dev/x509-parser.c

* tools/diff/diff.c

* tools/dist/backport.pl

* tools/dist/backport_tests.py

* tools/hook-scripts/mailer/mailer.py

* tools/server-side/svnpubsub/daemonize.py

* win-tests.py

Remove unneeded whitespace via script.

  1. … 184 more files in changeset.
Remove the 'message' argument from the test suite's run_and_verify_*()

functions, because it is largely pointless.

Enough context information is available by other means, and it wasn't being

displayed for stdout mismatch which is the most common failure mode but only

for exit-code mismatch, and most callers pass 'None' anyway. It cluttered

the call sites.

* subversion/tests/cmdline/svntest/actions.py

(run_and_verify_atomic_ra_revprop_change,

run_and_verify_svnlook, run_and_verify_svnlook2,

run_and_verify_svnadmin, run_and_verify_svnadmin2,

run_and_verify_svnversion, run_and_verify_svnversion2,

run_and_verify_svn, run_and_verify_svn2,

run_and_verify_svnmucc, run_and_verify_svnmucc2,

run_and_verify_atomic_ra_revprop_change,

run_and_verify_svnauthz,

run_and_verify_log_xml): Remove 'message' parameter.

(guarantee_greek_repository,

run_and_verify_dump): Adjust calls.

* subversion/tests/cmdline/svntest/*.py

Adjust calls.

* subversion/tests/cmdline/*_tests.py

Adjust calls.

  1. … 58 more files in changeset.
Add regression test for issue #4524, switch after repo-wc copy "sqlite: Expected

database row missing"

* subversion/tests/cmdline/switch_tests.py

(switch_moves): New function.

(test_list): Add switch_moves.

Fix misreporting of tree conflict victim's node kind, in particular

in cases where the victim is an obstruction.

* subversion/libsvn_wc/conflicts.c

(read_tree_conflict_desc): The local node kind cannot be derived from the

incoming src-left or src-right node kind as was done here. For example,

local unversioned files were labeled as 'local dir' if they obstructed

an incoming directory addition. If the conflict reason is an obstruction

we must check the on-disk state of the node and use it to describe the

victim's node kind. Missing nodes obviously have node type 'none' but

they were described as 'file'.

* subversion/svn/cl-conflicts.c

(local_reason_str, incoming_action_str): Describe symlinks as files.

Handle 'none' and 'unknown' type nodes.

* subversion/tests/cmdline/switch_tests.py

(forced_switch_failures): This test had node kinds swapped around. Fix it.

* subversion/tests/cmdline/tree_conflict_tests.py

(actual_only_node_behaviour): Output for 'none' type nodes has changed.

Adjust expected output accordingly.

* subversion/tests/libsvn_wc/conflict-data-test.c

(test_read_write_tree_conflicts): Create on-disk files and directories

in the test working copy since they are now required for proper node

kind detection. Previously, this test was using wc-db data only.

  1. … 4 more files in changeset.
Make the 'Committing revision...' notification visible for URL URL copies,

where it was explicitly hidden before... which was the standard behavior

before we added url support for notifications a few years ago.

The behavior was made explicit when the notification setup was generalized

for all svn commands.

* subversion/svn/copy-cmd.c

(svn_cl__copy): Use standard behavior for url-url copies.

* subversion/tests/cmdline/blame_tests.py

(blame_output_after_merge): Expect notification.

* subversion/tests/cmdline/copy_tests.py

(url_copy_parent_into_child): Expect notification.

* subversion/tests/cmdline/merge_tests.py

(simple_property_merges,

merge_old_and_new_revs_from_renamed_file,

merge_with_auto_rev_range_detection,

merge_added_subtree,

dont_merge_revs_into_subtree_that_predate_it,

set_up_renamed_subtree,

set_up_natural_history_gap): Expect notification.

* subversion/tests/cmdline/merge_tree_conflict_tests.py

(merge_replace_setup): Expect notification.

* subversion/tests/cmdline/switch_tests.py

(delete_subdir,

obstructed_switch,

refresh_read_only_attribute,

tolerate_local_mods): Expect notification.

  1. … 5 more files in changeset.
Cleanup a bit of svn notification code and remove an unneeded blank line from

the svn commit output that was caused by the side effects of this code.

Update test results for this changes and include a few cases of the related

r1606182 change.

* subversion/svn/notify.c

(notify_body): Write the newline here...

* subversion/svn/util.c

(svn_cl__print_commit_info): ...Instead of waiting for this code.

* subversion/tests/cmdline/blame_tests.py

(blame_output_after_merge): Update expected result.

* subversion/tests/cmdline/copy_tests.py

(url_copy_parent_into_child): Update expected result.

* subversion/tests/cmdline/merge_tests.py

(simple_property_merges,

merge_old_and_new_revs_from_renamed_file,

merge_with_auto_rev_range_detection,

merge_source_normalization_and_subtree_merges,

merge_added_subtree,

dont_merge_revs_into_subtree_that_predate_it,

set_up_renamed_subtree,

no_self_referential_filtering_on_added_path,

merge_range_prior_to_rename_source_existence,

set_up_natural_history_gap): Update expected results.

* subversion/tests/cmdline/merge_tree_conflict_tests.py

(merge_replace_setup): Update expected results.

* subversion/tests/cmdline/switch_tests.py

(delete_subdir): Update expected results.

  1. … 6 more files in changeset.
Follow-up to r1604179: Print "Committing transaction" progress notification

for tree changes only commits.

Found by: julianfoad

* subversion/svn/notify.c

(notify_body): Unconditionally print "Committing transaction" progress

notification.

* subversion/tests/cmdline/basic_tests.py

* subversion/tests/cmdline/blame_tests.py

* subversion/tests/cmdline/copy_tests.py

* subversion/tests/cmdline/merge_reintegrate_tests.py

* subversion/tests/cmdline/merge_tests.py

* subversion/tests/cmdline/stat_tests.py

* subversion/tests/cmdline/svnadmin_tests.py

* subversion/tests/cmdline/svnrdump_tests.py

* subversion/tests/cmdline/switch_tests.py

* subversion/tests/cmdline/update_tests.py

(basic_mkdir_url, basic_delete, blame_output_after_merge,

wc_copy_parent_into_child, basic_reintegrate,

obey_reporter_api_semantics_while_doing_subtree_merges,

update_loses_mergeinfo, merge_loses_mergeinfo,

merge_old_and_new_revs_from_renamed_dir,

merge_source_normalization_and_subtree_merges,

dont_add_mergeinfo_from_own_history,

merge_added_subtree, dont_merge_revs_into_subtree_that_predate_it,

set_up_renamed_subtree, no_self_referential_filtering_on_added_path,

merge_range_prior_to_rename_source_existence,

committed_case_only_move_and_revert, status_ignored_dir,

load_with_parent_dir, reflect_dropped_renumbered_revs,

reflect_dropped_renumbered_revs, svnrdump_load_partial_incremental_dump,

delete_subdir, failed_anchor_is_target, bad_intermediate_urls,

forced_switch_failures, another_hudson_problem, new_dir_with_spaces,

update_copy_of_old_rev): Update expected output.

  1. … 10 more files in changeset.
Re-apply a fixed version of the changes from r1596591 which were

reverted in r1596592. This version handles locally modified files

properly, rather than overwriting local changes as r1596591 did.

The regression test has also been expanded to cover local mods.

Fix issue #1975, "svn switch does not update keywords".

* subversion/libsvn_wc/update_editor.c

(update_keywords_after_switch_cb): New helper function

which checks for the presence of an svn:keywords property

and queues an install_file work queue item if present.

Thus, when the work queue is run to complete the switch

operation, all files with keywords will go through the

translation process.

(close_edit): If this is a switch operation, run a recursive

proplist with the specified depth (infinity by default),

invocing update_keywords_after_switch_cb() for each node

with properties.

* subversion/tests/cmdline/switch_tests.py

(switch_keywords, test_list): New test. Fails without

the above change and passes with it.

  1. … 1 more file in changeset.
Temporarily revert r1596591 because it wasn't properly tested and

makes tests fail. Thanks to Bert for spotting my mistake!

  1. … 1 more file in changeset.
*** Note from the future: ***

*** Reverted in r1596592. See r1596616 for the real fix. ***

Fix issue #1975, "svn switch does not update keywords".

* subversion/libsvn_wc/update_editor.c

(update_keywords_after_switch_cb): New helper function

which checks for the presence of an svn:keywords property

and queues an install_file work queue item if present.

Thus, when the work queue is run to complete the switch

operation, all files with keywords will go through the

translation process.

(close_edit): If this is a switch operation, run a recursive

proplist with the specified depth (infinity by default),

invoking update_keywords_after_switch_cb() for each node

with properties.

* subversion/tests/cmdline/switch_tests.py

(switch_keywords, test_list): New test. Fails without

the above change and passes with it.

  1. … 1 more file in changeset.
When the command line client shows tree conflict information, be more

explicit about the fact that an incoming deletion might be part of an

incoming move, and that a missing target during a merge might have

been deleted or moved in the merge target's history. The current

wording is a common source of user confusion. I'm not really sure

if this change helps users a lot but we'll see.

If we ever grow support for incoming moves, we'll need to update

these descriptions again anyway.

* subversion/svn/cl-conflicts.c

(local_reason_str): Add 'operation' parameter, and print

print additional hints about possible causes if the

operation is a merge.

(incoming_action_str): Any incoming delete might be part of

an incoming move, so say "incoming delete or move".

* subversion/tests/cmdline/stat_tests.py

(status_with_tree_conflicts): Adjust expected output.

* subversion/tests/cmdline/switch_tests.py

(tree_conflicts_on_switch_1_2,

tree_conflicts_on_switch_2_1,

tree_conflicts_on_switch_2_2,

tree_conflicts_on_switch_3): Adjust expected output.

* subversion/tests/cmdline/update_tests.py

(tree_conflicts_on_update_1_2,

tree_conflicts_on_update_2_1,

tree_conflicts_on_update_2_2,

tree_conflicts_on_update_3): Adjust expected output.

  1. … 3 more files in changeset.
Move a few test helper functions to a library to avoid having to import

tests from other tests.

* cmdline/relocate_tests.py

Import from deeptrees instead of switch_tests.

* cmdline/svntest/deeptrees.py

(get_routine_status_state,

get_routine_disk_state,

do_routine_switching,

commit_routine_switching): Move functions here...

* cmdline/switch_tests.py

(get_routine_status_state,

get_routine_disk_state,

do_routine_switching,

commit_routine_switching): that used to be here here.

Update imports.

  1. … 2 more files in changeset.
* subversion/tests/cmdline/switch_tests.py

(tree_conflicts_on_switch_1_1,

tree_conflicts_on_switch_1_2,

tree_conflicts_on_switch_2_2,

tree_conflicts_on_switch_3):

Instead of copying a list and explicitly removing half the items inside

expect the final result.

* subversion/tests/cmdline/update_tests.py

(tree_conflicts_on_update_1_1,

tree_conflicts_on_update_1_2,

tree_conflicts_on_update_2_2,

tree_conflicts_on_update_3):

Instead of copying a list and explicitly removing half the items inside

expect the final result.

  1. … 1 more file in changeset.
Follow-up to 1544259:

* subversion/tests/cmdline/switch_tests.py (switch_change_repos_root):

Add another pattern to the expected error case, since mod_dav_svn

can return a slightly different error text now.

* subversion/tests/cmdline/switch_tests.py

(imports): Remove unused import from externals_tests.py

In the python tests: Replace the most trivial 'commit the whole working copy'

calls that don't perform verifications on the result by a call to

sbox.simple_commit() that at least verifies that a new revision is created.

This way we detect some commit handling breakage (such as timestamp problems)

sooner.

* subversion/tests/cmdline/autoprop_tests.py

(svn_prop_inheritable_autoprops_unversioned_subtrees_versioned_target):

* subversion/tests/cmdline/blame_tests.py

(merge_sensitive_blame_and_empty_mergeinfo):

* subversion/tests/cmdline/commit_tests.py

(commit_out_of_date_deletions):

* subversion/tests/cmdline/history_tests.py

(cat_avoids_false_identities):

* subversion/tests/cmdline/lock_tests.py

(verify_path_escaping):

* subversion/tests/cmdline/log_tests.py

(merge_sensitive_log_reverse_merges,

merge_sensitive_log_ignores_cyclic_merges,

merge_sensitive_log_copied_path_inherited_mergeinfo):

* subversion/tests/cmdline/merge_authz_tests.py

(reintegrate_fails_if_no_root_access):

* subversion/tests/cmdline/merge_reintegrate_tests.py

(reintegrate_replaced_source):

* subversion/tests/cmdline/merge_tests.py

(merge_range_predates_history,

foreign_repos,

foreign_repos_uuid,

foreign_repos_2_url,

copy_then_replace_via_merge,

merge_source_with_replacement,

reverse_merge_with_rename):

* subversion/tests/cmdline/resolve_tests.py

(theirs_conflict_in_subdir):

* subversion/tests/cmdline/revert_tests.py

(revert_add_over_not_present_dir):

* subversion/tests/cmdline/stat_tests.py

(status_depth_update):

* subversion/tests/cmdline/svnadmin_tests.py

(dump_copied_dir,

dump_move_dir_modify_child,

recover_fsfs,

fsfs_recover_handle_missing_revs_or_revprops_file):

* subversion/tests/cmdline/switch_tests.py

(nonrecursive_switching):

* subversion/tests/cmdline/tree_conflict_tests.py

(up_add_onto_add_revert):

Use sandbox.simple_commit() instead of

main.run_svn(None, 'ci', ..., wc_dir) with no verifications.

  1. … 14 more files in changeset.
In Subversion 1.7 we added an --ignore-ancestry flag to switch, but even

without that flag we don't use the ancestry to properly identify tree

conflicts caused by switching. To do that we must ask the repos layer

(via the ra layer) to notice ancestry.

This patch updates all ra layers to allow noticing ancestry during switching.

For ra_local and ra_serf this works for all existing server versions, but for

ra_svn this requires a new svnserve. (Our dav protocol already supported

ignore_ancestry and send copyfrom args as separate flags)

If necessary we could rev the client switch api to use separate ignore and

notice ancestry flags, but I don't think this is necessary in this case.

This patch also resolves an Subversion 1.5 'sussman TODO', by also adding a

send_copyfrom_args option.

* subversion/include/svn_ra.h

(svn_ra_do_switch3): New function, adding two booleans and using dual pools.

(svn_ra_do_switch2): Deprecate function.

* subversion/libsvn_client/deprecated.c

(svn_client_switch2): Add comment.

* subversion/libsvn_client/switch.c

(switch_internal): Pass ignore_ancestry flag to svn_ra_do_switch3().

* subversion/libsvn_ra/deprecated.c

(svn_ra_do_switch2): New function around svn_ra_do_switch3.

(svn_ra_do_switch): Update caller.

* subversion/libsvn_ra/ra_loader.c

(svn_ra_do_switch2): Rename to...

(svn_ra_do_switch3): ... this. Forward 2 more booleans and dual pools.

* subversion/libsvn_ra/ra_loader.h

(svn_ra__vtable_t): Extend do_switch function.

* subversion/libsvn_ra/wrapper_template.h

(compat_do_switch): Update caller.

* subversion/libsvn_ra_local/ra_plugin.c

(svn_ra_local__do_switch): Update arguments. Forward arguments to

make_reporter.

* subversion/libsvn_ra_serf/ra_serf.h

(svn_ra_serf__do_switch): Update arguments.

* subversion/libsvn_ra_serf/update.c

(svn_ra_serf__do_switch): Update arguments. Forward arguments to

make_update_reporter.

* subversion/libsvn_ra_svn/client.c

(ra_svn_switch): Update arguments. Pass booleans.

* subversion/libsvn_ra_svn/marshal.c

(vwrite_cmd_switch): Send two more arguments.

* subversion/svnserve/serve.c

(switch_cmd): Accept two optional booleans and pass these to accept_report.

* subversion/tests/cmdline/switch_tests.py

(switch_across_replacement): Remove XFail, move and update comment.

Found by: julianfoad

  1. … 13 more files in changeset.
* subversion/tests/cmdline/switch_tests.py

(switch_across_replacement): New test, XFail.

(test_list): Run it.

Separate the setup of the deeptree tests from the actions file in the test

suite. This cleans up the code and avoids loading 1000 lines of python on

almost every test invocation when running tests parallel.

* subversion/tests/cmdline/merge_tree_conflict_tests.py

(imports): Add deeptrees.

(*): s/svntest.actions.deep/svntest.deeptrees.deep/

s/svntest.actions.Deep/svntest.deeptrees.Deep/

* subversion/tests/cmdline/svntest/actions.py

Remove all deeptrees code. Copy Item abbreviation as that is being used

in the actions code.

* subversion/tests/cmdline/svntest/deeptrees.py

Copied from actions.py. Remove actions.py code, but import everything from

actions.

* subversion/tests/cmdline/switch_tests.py

(*): s/svntest.actions.deep/svntest.deeptrees.deep/

s/svntest.actions.Deep/svntest.deeptrees.Deep/

* subversion/tests/cmdline/update_tests.py

(*): s/svntest.actions.deep/svntest.deeptrees.deep/

s/svntest.actions.Deep/svntest.deeptrees.Deep/

  1. … 4 more files in changeset.
Add regression test for issues #3332, #3333.

* subversion/tests/cmdline/switch_tests.py

(switch_to_spaces): New function.

(test_list): Add switch_to_spaces.

Remove unneeded conversions to old_tree in several wrappers of

run_and_verify_status. This wrapping as old_tree made it impossible to run the

entries validation on these trees.

Fix the fallout of this change.

* subversion/libsvn_wc/entries.c

(get_info_for_deleted): Allow obtaining the lock token.

(read_one_entry): Update caller. (Found via lock_tests.py)

* subversion/tests/cmdline/commit_tests.py

(commit_nonrecursive): Use '/' in the trees, not os.sep as that breaks the

entries tests.

* subversion/tests/cmdline/copy_tests.py

(move_moved_file_and_dir): Use canonical path form.

* subversion/tests/cmdline/entries-dump.c

(entries_dump): Provide file_external boolean. (Needed for externals tests)

* subversion/tests/cmdline/merge_tests.py

(merge_into_missing): Remove invalid entry_rev.

(merge_away_subtrees_noninheritable_ranges): Use canonical path.

* subversion/tests/cmdline/patch_tests.py

(patch_absolute_paths,

patch_offset,

patch_prop_offset,

patch_delete_and_skip,

patch_git_with_index_line): Use canonical path form.

* subversion/tests/cmdline/revert_tests.py

(revert_obstructing_wc): Avoid entries comparision.

* subversion/tests/cmdline/svntest/actions.py

(run_and_verify_checkout2,

verify_update,

run_and_verify_commit): Remove unneeded conversion.

* subversion/tests/cmdline/svntest/wc.py

(add_state): Don't add root/ item for the root of the added tree.

(tweak_for_entries_compare): Handle file externals. Add entry_copy support.

Assume that we can't calculate switched for the root of the status walk

from the python code. Ignore tree conflicts.

(from_entries): Skip excluded nodes. Set switched to 'X' for file externals.

(StateItem): Add entry_copy setting.

(repos_join): Fix 'G:/' 'node' join. (Needed for update_tests.py)

* subversion/tests/cmdline/switch_tests.py

(switch_with_obstructing_local_adds): Update entry expectations for

obstructed.

(switch_to_root): Pass the right path for path calculations.

* subversion/tests/cmdline/update_tests.py

(update_wc_on_windows_drive): Tweak paths. Disable entry dump for 'A:mu' style

paths.

(update_copied_from_replaced_and_changed): Use canonical paths.

(update_edit_delete_obstruction): Set entry info for obstructed node.

* subversion/tests/cmdline/update_tests.py

(update_wc_on_windows_drive,

update_copied_from_replaced_and_changed): Use '/' in paths.

(update_edit_delete_obstruction): Update obstruction assumptions for entries.

  1. … 10 more files in changeset.
Show node kinds in human-readable tree conflict description string.

This clarifies what an 'edit' action refers to (a file vs. a dir).

It also makes it easier to spot mistakes where Subversion records

the wrong node kind information.

* subversion/svn/tree-conflicts.c

(svn_cl__get_human_readable_tree_conflict_description): Show the

node kinds involved in the tree conflict.

* subversion/tests/cmdline/info_tests.py

(info_with_tree_conflicts): Adjust test expectations.

* subversion/tests/cmdline/stat_tests.py

(status_with_tree_conflicts): Adjust test expectations.

* subversion/tests/cmdline/switch_tests.py

(obstructed_switch, forced_switch_failures,

tree_conflicts_on_switch_1_1, tree_conflicts_on_switch_1_2,

tree_conflicts_on_switch_2_1, tree_conflicts_on_switch_2_2,

tree_conflicts_on_switch_3): Adjust test expectations.

* subversion/tests/cmdline/tree_conflict_tests.py

(actual_only_node_behaviour): Adjust test expectations.

* subversion/tests/cmdline/update_tests.py

(tree_conflicts_on_update_1_1, tree_conflicts_on_update_1_2,

tree_conflicts_on_update_2_1, tree_conflicts_on_update_2_2,

tree_conflicts_on_update_3): Adjust test expectations.

  1. … 5 more files in changeset.
Remove support for running some tests on a per-dir workingcopy db from

tests that still have separate behavior for pre and post 1.7.

* subversion/tests/cmdline/copy_tests.py

(move_dir_back_and_forth): Remove multi db code.

* subversion/tests/cmdline/depth_tests.py

(make_depth_tree_conflicts): Remove multi db code.

* subversion/tests/cmdline/entries_tests.py

(obstructed_entries): Remove multi db code.

* subversion/tests/cmdline/lock_tests.py

(lock_switched_files,

lock_twice_in_one_wc): Remove multi db code.

* subversion/tests/cmdline/merge_tests.py

(merge_into_missing): Remove multi db expected results.

* subversion/tests/cmdline/merge_tree_conflict_tests.py

(mergeinfo_recording_in_skipped_merge,

tree_conflicts_merge_edit_onto_missing,

tree_conflicts_merge_del_onto_missing): Update expected results.

* subversion/tests/cmdline/patch_tests.py

(patch_add_new_dir,

patch_remove_empty_dirs): Update expected result.

* subversion/tests/cmdline/relocate_tests.py

(relocate_deleted_missing_copied): Update expected result.

* subversion/tests/cmdline/resolved_tests.py

(resolved_on_wc_root): Update expected result.

* subversion/tests/cmdline/revert_tests.py

(status_of_missing_dir_after_revert,

status_of_missing_dir_after_revert_replaced_with_history_dir):

Update expected result.

* subversion/tests/cmdline/stat_tests.py

(status_type_change,

status_type_change_to_symlink,

status_missing_dir,

status_dash_u_type_change): Update expected result.

* subversion/tests/cmdline/switch_tests.py

(tree_conflicts_on_switch_1_1,

tree_conflicts_on_switch_1_2): Update expected results.

* subversion/tests/cmdline/update_tests.py

(update_missing): Expect restores instead of adds.

(update_deleted_missing_dir,

another_hudson_problem): Update expected results.

(nested_in_read_only): Remove test.

(tree_conflicts_on_update_1_1,

tree_conflicts_on_update_1_2): Update expected results.

  1. … 12 more files in changeset.