Checkout Tools
  • last updated 5 hours ago
Constraints
Constraints: committers
 
Constraints: files
Constraints: dates
Teach the WC editor to acquire and release a WC write lock.

* subversion/include/private/svn_client_private.h

(svn_client__wc_editor): Document that it manages the write lock.

(svn_client__wc_editor_internal): Add an option flag to manage the write lock.

* subversion/libsvn_client/copy.c

(copy_foreign_dir,

svn_client__repos_to_wc_copy_by_editor): Ask the WC editor not to manage

the write lock for us here, as the caller does it.

* subversion/libsvn_client/shelf.c

(svn_client__shelf_apply): Don't aquire and release the write lock here:

let the WC editor do it.

* subversion/libsvn_client/wc_editor.c

(edit_baton_t): Add fields to manage the write lock.

(release_write_lock,

pool_cleanup_handler): New.

(edit_open): If requested, acquire the write lock and arrange for it to be

released on pool clean-up.

(edit_close): If acquired, release the write lock.

(svn_client__wc_editor_internal): Add the option flag to manage the write

lock. Initialize the 'abort_edit' method so that it will release the

write lock, the same as 'close_edit'.

(svn_client__wc_editor): Ask for the write lock to be managed.

  1. … 3 more files in changeset.
Upgrade uses of the editor path driver callback, following r1852526.

* subversion/libsvn_client/add.c

(path_driver_cb_func): Take the editor and edit-baton as direct parameters.

(mkdir_urls): Upgrade to svn_delta_path_driver3.

* subversion/libsvn_client/commit_util.c

(item_commit_baton): Remove the editor and edit-baton from here.

(do_item_commit): Take the editor and edit-baton as direct parameters.

(svn_client__do_commit): Upgrade to svn_delta_path_driver3.

* subversion/libsvn_client/copy.c

(path_driver_cb_baton): Remove the editor and edit-baton from here.

(path_driver_cb_func): Take the editor and edit-baton as direct parameters.

(repos_to_repos_copy): Upgrade to svn_delta_path_driver3.

* subversion/libsvn_delta/branch_compat.c

(apply_change): Take the editor and edit-baton as direct parameters.

(drive_changes): Upgrade to svn_delta_path_driver3.

* subversion/libsvn_delta/compat.c

(apply_change): Take the editor and edit-baton as direct parameters.

(drive_changes): Upgrade to svn_delta_path_driver3.

* subversion/libsvn_repos/replay.c

(path_driver_cb_baton): Remove the editor and edit-baton from here.

(path_driver_cb_func): Take the editor and edit-baton as direct parameters.

(svn_repos_replay2): Upgrade to svn_delta_path_driver3.

  1. … 5 more files in changeset.
Fix some RA session breakage in the WC editor (issue #4786).

* subversion/include/private/svn_client_private.h

subversion/libsvn_client/copy.c

(svn_client__repos_to_wc_copy_dir): Note broken foreign-repo copy.

(svn_client__repos_to_wc_copy_internal): Save and restore the session URL.

  1. … 1 more file in changeset.
Let repository-to-WC copies go through the WC editor.

For issue #4786 "Create a WC working-mods editor".

Similar to the patch committed in r1848892 and reverted in r1848897, except

that attempt failed on Windows because it created the copy target root

directory twice.

* subversion/include/private/svn_client_private.h

(svn_client__repos_to_wc_copy): Rename to

'svn_client__repos_to_wc_copy_internal'.

(svn_client__repos_to_wc_copy_by_editor): New.

* subversion/libsvn_client/conflicts.c

(merge_incoming_added_dir_replace): Update to use

'svn_client__repos_to_wc_copy_by_editor'.

* subversion/libsvn_client/copy.c

(copy_foreign_dir): Remove 'depth' parameter: not needed and was wrongly

implemented anyway.

(svn_client__repos_to_wc_copy_dir): Adjust caller.

(is_same_repository): New, moved from 'wc_editor.c'.

(svn_client__repos_to_wc_copy_by_editor): New.

(svn_client__repos_to_wc_copy,

repos_to_wc_copy_single): Determine same-repository here and here...

(repos_to_wc_copy_locked): ... instead of here.

* subversion/libsvn_client/wc_editor.c

(is_same_repository): Delete; moved to 'copy.c'.

(dir_add,

file_add): Don't determine same-repository here. Do set the 'created' flag.

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

(test_foreign_repos_copy): Update caller.

  1. … 4 more files in changeset.
Revert r1848892 as it fails on Windows.

  1. … 4 more files in changeset.
Let repository-to-WC copies go through the WC editor.

For issue #4786 "Create a WC working-mods editor".

* subversion/include/private/svn_client_private.h

(svn_client__repos_to_wc_copy): Rename to

'svn_client__repos_to_wc_copy_internal'.

(svn_client__repos_to_wc_copy_by_editor): New.

* subversion/libsvn_client/conflicts.c

(merge_incoming_added_dir_replace): Update to use

'svn_client__repos_to_wc_copy_by_editor'.

* subversion/libsvn_client/copy.c

(copy_foreign_dir): Remove 'depth' parameter: not needed and was wrongly

implemented anyway.

(svn_client__repos_to_wc_copy_dir): Adjust caller.

(is_same_repository): New, moved from 'wc_editor.c'.

(svn_client__repos_to_wc_copy_by_editor): New.

(svn_client__repos_to_wc_copy,

repos_to_wc_copy_single): Determine same-repository here and here...

(repos_to_wc_copy_locked): ... instead of here.

* subversion/libsvn_client/wc_editor.c

(is_same_repository): Delete; moved to 'copy.c'.

(dir_add,

file_add): Don't determine same-repository here. Do set the 'created' flag.

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

(test_foreign_repos_copy): Update caller.

  1. … 4 more files in changeset.
* subversion/libsvn_client/copy.c

(repos_to_wc_copy_single): Update comments, following r1847206.

Simplify the physical implementation of foreign-repo copy.

For issue #4786 "Create a WC working-mods editor".

* subversion/include/private/svn_client_private.h

(svn_client__copy_foreign): Remove.

* subversion/libsvn_client/copy.c

(copy_foreign_dir): New here, moved from copy_foreign.c.

(svn_client__repos_to_wc_copy_dir): Call copy_foreign_dir() directly

instead of through svn_client__foreign_copy().

(svn_client__repos_to_wc_copy): Allow a null 'timestamp_sleep' output ptr.

* subversion/libsvn_client/copy_foreign.c

Delete this file; move copy_foreign_dir() to copy.c.

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

(test_foreign_repos_copy): Update callers of svn_client__copy_foreign()

to use svn_client__repos_to_wc_copy() instead.

  1. … 3 more files in changeset.
Unify how 'copy' processes externals with and without pinning.

For issue #4786 "Create a WC working-mods editor".

Remove the optional 'externals' processing from inside the

'repos_to_wc_copy' API. Previously, externals were fetched outside the

'copy' API if and only if some externals were to be pinned. Now we always

use that code path.

As a side effect, this makes the notifications consistent between the two

cases.

* subversion/include/private/svn_client_private.h

(svn_client__repos_to_wc_copy): Remove 'externals' options.

* subversion/libsvn_client/copy.c

(svn_client__repos_to_wc_copy_dir,

svn_client__repos_to_wc_copy): Remove 'externals' option.

(repos_to_wc_copy_single): Always fetch externals after the copy.

* subversion/libsvn_client/conflicts.c

(merge_incoming_added_dir_replace): Trivially update this caller.

* subversion/libsvn_client/wc_editor.c

(dir_add,

file_add): Trivially update these callers.

* subversion/tests/cmdline/externals_tests.py

(url_to_wc_copy_of_externals): Revert the changes to the expected

notifications that were introduced by r1847206.

  1. … 4 more files in changeset.
For issue #4786 "Create a WC working-mods editor": combine dir and file

versions of a copy API, in the interest of unifying file and dir operations

as much as possible to simplify callers.

* subversion/include/private/svn_client_private.h

(svn_client__repos_to_wc_copy): New.

(svn_client__repos_to_wc_copy_dir,

svn_client__repos_to_wc_copy_file): Delete.

* subversion/libsvn_client/copy.c

(verify_wc_srcs): Add a simple doc string.

(svn_client__repos_to_wc_copy_dir,

svn_client__repos_to_wc_copy_file): Make static.

(svn_client__repos_to_wc_copy): New.

(repos_to_wc_copy_single): Update callers.

* subversion/libsvn_client/conflicts.c

(merge_incoming_added_dir_replace): Update callers.

* subversion/libsvn_client/wc_editor.c

(dir_add,

file_add): Update callers.

  1. … 3 more files in changeset.
Deduplicate the make-parents functionality in 'copy' code.

And the verification that WC target paths are suitable.

* subversion/include/private/svn_client_private.h,

subversion/libsvn_client/copy_foreign.c

(svn_client__copy_foreign): Remove all that functionality, as it was done

already by 'verify_dsts', and remove the 'make_parents' parameter.

* subversion/libsvn_client/copy.c

(svn_client__repos_to_wc_copy_dir): Update the call to ...copy_foreign.

(repos_to_wc_copy): Remove all that functionality; from now on it is going

to have been done already by 'verify_dsts'.

(repos_to_wc_copy_locked): Move the 'verify_dsts' call up from here...

(try_copy): ... to here and let it make missing parents.

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

(test_foreign_repos_copy): Update calls to ...copy_foreign.

  1. … 3 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.
Fix issue SVN-4792: Foreign repo copy of file adding mergeinfo.

* subversion/libsvn_client/copy.c

(repos_to_wc_copy_single): Only copy mergeinfo if it's the same repository.

A small simplification of svn_client__copy_foreign.

Don't open a new RA session; let the caller provide one.

* subversion/include/private/svn_client_private.h,

subversion/libsvn_client/copy_foreign.c

(svn_client__copy_foreign): Take an RA session and a resolved location

instead of a URL and peg and operative revisions.

(copy_foreign_dir): Constify a parameter.

* subversion/libsvn_client/copy.c

(svn_client__repos_to_wc_copy_dir): Adjust the call.

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

(test_foreign_repos_copy): Open an RA session and adjust the calls.

  1. … 3 more files in changeset.
A small simplification.

* subversion/libsvn_client/copy.c

(verify_wc_srcs_and_dsts): Rename to 'verify_wc_srcs' and don't call

'verify_wc_dsts' within here.

(try_copy): Instead, call both from here.

Support copies, for issue SVN-4786: Create a WC working-mods editor.

* subversion/include/private/svn_client_private.h

(svn_client__repos_to_wc_copy_dir): Also support copies from a foreign

repository. Take a resolved URL and revision instead of URL:peg:op-rev.

(svn_client__repos_to_wc_copy_file): New.

(svn_client__wc_editor,

svn_client__wc_editor_internal): To support copies, take an RA session.

* subversion/libsvn_client/conflicts.c

(merge_incoming_added_dir_replace): Adjust the call to

svn_client__repos_to_wc_copy_dir().

* subversion/libsvn_client/copy.c

(svn_client__repos_to_wc_copy_dir): As above.

(svn_client__repos_to_wc_copy_file): New, extracted ...

(repos_to_wc_copy_single): ... from here.

* subversion/libsvn_client/copy_foreign.c

(copy_foreign_dir): Adjust the call to svn_client__wc_editor_internal().

* subversion/libsvn_client/wc_editor.c

(edit_baton_t): Add an RA session.

(is_same_repository): New.

(dir_add): Adjust to support copying from same repo or foreign repo.

(file_add): Add support for copying from same repo or foreign repo.

(svn_client__wc_editor_internal,

svn_client__wc_editor): Accept an RA session.

  1. … 4 more files in changeset.
Simplify svn_client__copy_foreign().

Simplify by requiring the caller to hold a WC write lock. The only real

caller already did, and the test callers now do.

* subversion/include/private/svn_client_private.h

(svn_client__copy_foreign): Remove 'already_locked' parameter, and

document the requirement for a WC write lock.

(svn_client__repos_to_wc_copy_dir): Tweak similar comment in the same way.

* subversion/libsvn_client/copy.c

(repos_to_wc_copy_single): Don't pass that parameter.

* subversion/libsvn_client/copy_foreign.c

(svn_client__copy_foreign): Remove the ability to acquire and release a

WC write lock.

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

(test_foreign_repos_copy): Acquire and release a write lock here.

  1. … 3 more files in changeset.
Further clean up some repos-to-WC copy code.

No functional change.

A follow-up to r1846403, which stopped writing to the 'src_revnum' field in

the case it touched (that is, when the source is a directory).

* subversion/include/private/svn_client_private.h

(svn_client__copy_foreign): Constify input parameters.

(svn_client__repos_to_wc_copy_dir): Document the RA session parameter.

* subversion/libsvn_client/copy.c

(resolve_pinned_externals): Constify input parameters.

(repos_to_wc_copy_single): Constify the 'pair' parameter and stop writing

to its 'src_revnum' field; the caller has already resolved that.

* subversion/libsvn_client/copy_foreign.c

(svn_client__copy_foreign): Constify input parameters. Add comments and

adjust spacing.

  1. … 2 more files in changeset.
Fix issue #4785: foreign repo copy with peg/operative revisions.

It was resolving to given URL by following to the operative revision, and

then trying to resolve it again. If the URL differed (that is, if the source

was moved between its operative and peg revisions), this would lead to

copying from the wrong source URL or failing to find the source URL.

There are, so far, no tests for this case.

* subversion/libsvn_client/copy.c

(repos_to_wc_copy_single): Use the correct URL.

Factor out repos-to-WC copy code.

* subversion/include/private/svn_client_private.h

(svn_client__repos_to_wc_copy_dir): New.

* subversion/libsvn_client/copy.c

(svn_client__repos_to_wc_copy_dir): New, factored out from conflicts.c...

(repos_to_wc_copy_single): ... and from here.

* subversion/libsvn_client/conflicts.c

(notification_adjust_baton,

notification_adjust_func): Remove.

(merge_incoming_added_dir_replace): Use svn_client__repos_to_wc_copy_dir.

  1. … 2 more files in changeset.
Correctly handle existing parent directories during repository-to-WC copy.

* subversion/libsvn_client/copy.c

(repos_to_wc_copy): If add_parents flag is set and destination parent

directory exists, but is unversioned, put it under version control.

WC-to-WC copy behaves this way, and so should repos-to-WC copy.

* subversion/tests/cmdline/copy_tests.py

(copy_make_parents_wc_wc_existing_unversioned_dst,

copy_make_parents_repo_wc_existing_unversioned_dst): Check behaviour

with existing. unversioned destination directory for both repos-to-WC

and WC-to-WC cases.

Patch by: Nikita Slyusarev

Fixes #4768

  1. … 1 more file in changeset.
* subversion/libsvn_client/copy.c

(verify_wc_dsts): Provide a better error message when a copy/move operation

attempts to use an existing, but unversioned, target directory.

Found by: benny-innofaith (in #svn IRC)

* subversion/libsvn_client/copy.c

(repos_to_wc_copy_single): Fix indentation.

Revert r1704048 (merge of 'reuse-ra-session' branch): unfortunately the code

is not ready for trunk. The most serious problem that we cannot assume that

API user doesn't change svn_client_ctx_t fields like AUTH_BATON or

OPEN_TUNNEL_FUNC between svn_client_*() functions invocation. JavaHL bindings

is one example of usage of such pattern.

I'll revive 'reuse-ra-session' branch and attempt to fix these problems there.

Discussion: "Merge ra-reuse-session branch to trunk or not?" [1]

http://svn.haxx.se/dev/archive-2015-09/0173.shtml

  1. … 33 more files in changeset.
[Reverted in r1704255]

Introduce RA session pool in libsvn_client for managing and reusing RA session

for different URLs.

Discussion: "Merge ra-reuse-session branch to trunk or not?" [1]

More details are available in branch history [2].

[1] http://svn.haxx.se/dev/archive-2015-09/0173.shtml

[2] ^/subversion/branches/reuse-ra-session@1704029

* subversion/include/private/svn_client_private.h

(svn_client__ra_session_from_path2): Update docstring to mention that RA

session may be returned back to RA session pool by

svn_client__ra_session_release() function.

(svn_client__ra_session_release): New function declaration.

* subversion/libsvn_client/add.c

* subversion/libsvn_client/blame.c

* subversion/libsvn_client/cat.c

* subversion/libsvn_client/checkout.c

(mkdir_urls, svn_client_blame5, svn_client_cat3,

svn_client__checkout_internal): Release locally created sessions if there

were no errors.

* subversion/libsvn_client/client.h

(svn_client__ra_cache_t): Add new type declare.

(svn_client__private_ctx_t): Add RA_CACHE field.

* subversion/libsvn_client/commit.c

(check_url_kind_baton): Remove POOL, SESSION and REPOS_ROOT_URL -- they

were used as local RA session pool.

(check_url_kind): Just use svn_client_open_ra_session2() and

svn_client__ra_session_release() instead of trying to reparent existing

RA session.

(svn_client_commit6): Update baton initialization and release locally

created sessions if there were no errors.

* subversion/libsvn_client/copy.c

* subversion/libsvn_client/copy_foreign.c

* subversion/libsvn_client/ctx.c

* subversion/libsvn_client/delete.c

* subversion/libsvn_client/diff.c

* subversion/libsvn_client/export.c

* subversion/libsvn_client/externals.c

* subversion/libsvn_client/import.c

* subversion/libsvn_client/info.c

* subversion/libsvn_client/iprops.c

* subversion/libsvn_client/list.c

* subversion/libsvn_client/locking_commands.c

* subversion/libsvn_client/log.c

* subversion/libsvn_client/mtcc.c

* subversion/libsvn_client/prop_commands.c

(pin_externals_prop, repos_to_repos_copy, repos_to_repos_copy,

wc_to_repos_copy, repos_to_wc_copy, svn_client__copy_foreign,

delete_urls_multi_repos, diff_repos_repos, diff_repos_wc,

svn_client_export5, handle_external_item_change, svn_client_import5,

svn_client_info4, get_inheritable_props, list_internal, release_locks,

svn_client__get_copy_source, svn_client_log5, svn_client__mtcc_commit,

propset_on_url): Release locally created sessions if there were no errors.

* subversion/libsvn_client/merge.c

(ensure_ra_session_url): Add TODO comment to use release RA sessions back

to RA session pool.

(do_merge): Reduce scope of second RA session and return it early back to

RA session pool.

(merge_locked, merge_peg_locked, find_automatic_merge_no_wc,

client_find_automatic_merge, do_automatic_merge_locked): Release locally

created sessions if there were no errors.

* subversion/libsvn_client/mergeinfo.c

(svn_client__get_wc_or_repos_mergeinfo_catalog, get_mergeinfo,

logs_for_mergeinfo_rangelist, svn_client__mergeinfo_log,

svn_client_suggest_merge_sources): Release locally created sessions if

there were no errors.

* subversion/libsvn_client/ra.c

(): Include "ra_cache.h"

(svn_client__open_ra_session_internal): Use

svn_client__ra_cache_open_session() to open RA session, instead of direct

call to svn_ra_open4().

(svn_client__repos_locations, svn_client__get_youngest_common_ancestor):

Release RA sessions after we finished using them.

(svn_client__ra_session_release): New.

* subversion/libsvn_client/ra_cache.c

* subversion/libsvn_client/ra_cache.h

(MAX_INACTIVE_SESSIONS, INACTIVE_SESSION_TIMEOUT, cache_entry_t,

open_tmp_file, get_wc_prop, set_wc_prop, push_wc_prop, invalidate_wc_props,

progress_func, cancel_func, get_client_string, get_wc_contents,

check_tunnel_func, open_tunnel_func, cleanup_ra_cache,

svn_client__ra_cache_init, close_ra_session, remove_inactive_entry,

expunge_cache_entries, find_session_by_url, open_new_session,

get_private_ra_cache, svn_client__ra_cache_open_session,

svn_client__ra_cache_release_session): New.

* subversion/libsvn_client/status.c

* subversion/libsvn_client/switch.c

* subversion/libsvn_client/update.c

* subversion/libsvn_client/util.c

(reporter_finish_report, svn_client_status6, switch_internal,

svn_client__update_internal, svn_client_get_repos_root): Release locally

created sessions if there were no errors.

* tools/dev/ra-cache-summary.py: New script to analyze debugging output of

RA session reuse.

  1. … 33 more files in changeset.
Implement svn_io_file_rename2() with FLUSH_TO_DISK flag to require OS to

wait until rename operation is actually written to disk. Discussed in thread

"svn commit: r1682265 - /subversion/trunk/subversion/libsvn_fs_fs/util.c" on

dev@s.a.o [1]

[1] http://svn.haxx.se/dev/archive-2015-05/0211.shtml

* subversion/include/svn_io.h

(svn_io_file_rename2): New function declaration.

(svn_io_file_rename): Deprecate.

* subversion/libsvn_subr/io.c

(win32_file_rename): Use MOVEFILE_WRITE_THROUGH flag in call to

MoveFileExW if FLUSH_TO_DISK is non-zero.

(svn_io_file_rename2): Revv from svn_io_file_rename(). Add FLUSH_TO_DISK

parameter and perform flush to disk operation depending on the platform:

use MoveFileEx flag on Windows, fsync() target directory on POSIX and

fsync() target file on all other platforms. This logic mostly copied

from svn_fs_fs__move_into_place().

(svn_io_copy_link, svn_io_copy_file, svn_io_write_atomic,

svn_io_write_version_file): Use svn_io_rename2() with

FLUSH_TO_DISK=FALSE instead of svn_io_rename().

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

(test_file_rename2): Simple tests for svn_io_file_rename2().

(test_funcs): Add test_file_rename2.

* subversion/libsvn_subr/deprecated.c

(svn_io_file_rename): Call svn_io_file_rename2() with FLUSH_TO_DISK=FALSE.

* subversion/libsvn_client/copy.c

* subversion/libsvn_client/export.c

* subversion/libsvn_client/externals.c

* subversion/libsvn_fs_fs/fs_fs.c

* subversion/libsvn_fs_fs/lock.c

* subversion/libsvn_fs_fs/transaction.c

* subversion/libsvn_fs_fs/util.c

* subversion/libsvn_fs_x/lock.c

* subversion/libsvn_fs_x/transaction.c

* subversion/libsvn_fs_x/util.c

* subversion/libsvn_subr/config_auth.c

* subversion/libsvn_subr/stream.c

* subversion/libsvn_subr/subst.c

* subversion/libsvn_wc/copy.c

* subversion/libsvn_wc/node.c

* subversion/libsvn_wc/upgrade.c

* subversion/libsvn_wc/wc_db_pristine.c

* subversion/libsvn_wc/workqueue.c

(*): Use svn_io_file_rename2() with FLUSH_TO_DISK=FALSE instead of

svn_io_file_rename().

  1. … 21 more files in changeset.
Following up on r1697725, assume that abspaths are passed in a few

more places.

* subversion/libsvn_client/copy.c

(repos_to_wc_copy_locked): Assume abspath is passed.

(repos_to_wc_copy): Rename local variable to document that it is an

absolute path.

Simplify some code by assuming that the repository is post 1.0 and

the working copy is WC-NG.

* subversion/libsvn_client/copy.c

(repos_to_wc_copy_locked): Assume the working copy and repository do

have uuids.

Follow up to r1676538: Instead of comparing property values before and

after pinning, which may be prone to false positives due to whitespace

-only changes, track what we actually pinned to decide if an externals

property needs changing.

* subversion/libsvn_client/copy.c

(pin_externals_prop): Return NULL instead of a property value if

none of the externals definitions were changed in this function.

Update docstring accordingly.

(resolve_pinned_externals): Use the hint from pin_externals_prop

to avoid making no-op property changes.

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

(test_copy_pin_externals_select_subtree): Tweak the test to check

that we're not making any whitespace-only changes to unpinned

externals.

  1. … 1 more file in changeset.
Prevent no-op property changes during svn copy --pin-externals.

Externals properties were reported as changed in 'svn log -v' even if their

content didn't change during pinning.

* subversion/libsvn_client/copy.c

(resolve_pinned_externals): Return only pinned externals, rather than

returning a full list of new externals including non-pinned ones.

Found by: Marc Strapetz <marc.strapetz@syntevo.com>