Hi!
Here is the patch that is trying to fix on of the problem discussed at
http://svn.haxx.se/dev/archive-2008-08/0793.shtml
[[
2) Mergeinfo produced during WC-to-WC copy differs from equivalent
REPO-to-REPO copy. If you copy file in working copy and there is no
mergeinfo in the working copy then the new file will get an empty
mergeinfo record. Similar REPO-to-REPO copy operation doesn't produce
empty mergeinfo record.
]]
The general idea of the patch is as follows: we don't produce any
mergeinfo record if we [definitely] know that it's unnecessary. The
patch should ease the pain in the most cases. For example, it's not
needed to worry about mergeinfo in the cases when:
a. copy is performed within a working copy (it's just a 'local file
rename because of refactoring')
b. there is no merges except ones on the trunk/branches level (or
there is no merges at all)
The log messages is as follows:
[[[
Don't create any explicit (including empty) mergeinfo record during WC-to-WC
copy if it's a 'mergeinfo NON-affecting' copy. WC-to-WC copy can be
considered as 'megeinfo NON-affecting' if and only if the following
conditions are satisfied:
a) src and dst are located below the same URL
b) mergeinfo (if any) for src and dst is inherited from this URL
c) inherited mergeinfos (if any) for src and dst are equal.
* subversion/libsvn_client/copy.c
(calculate_target_mergeinfo): svn_client__get_wc_mergeinfo() signature is
changed.
(check_mergeinfo_affecting): Heuristic algorihthm that checks is the copy
operation 'mergeinfo affectiong' or not.
(propagate_mergeinfo_within_wc): Mergeinfo isn't propagated if
check_mergeinfo_affecting() returns FALSE.
* subversion/libsvn_client/merge.c
(update_wc_mergeinfo,
get_mergeinfo_paths,
process_children_with_new_mergeinfo,
do_directory_merge): svn_client__get_wc_mergeinfo() signature is changed.
* subversion/libsvn_client/mergeinfo.c
(svn_client__get_wc_mergeinfo): Signature is changed. Now returns
effective_mergeinfo and effective_url and accepts additional
allow_mixed_revisions flag.
(svn_client__get_wc_or_repos_mergeinfo,
svn_client__elide_mergeinfo): svn_client__get_wc_mergeinfo() signature is
changed.
* subversion/libsvn_client/mergeinfo.h
(svn_client__get_wc_mergeinfo): Signature is changed. Now returns
effective_mergeinfo and effective_url and accepts additional
allow_mixed_revisions flag.
* subversion/tests/cmdline/copy_tests.py
(copy_replace_with_props,
copy_added_paths_with_props,
copy_peg_rev_local_files,
copy_peg_rev_local_dirs): New copy behavior is considered: empty
mergeinfo isn't generated during mergeinfo non-affecting copy.
(no_empty_mergeinfo_on_local_copy_file,
no_empty_mergeinfo_on_local_copy_dir,
local_copy_with_explicit_mergeinfo,
local_mergeinfo_non_affecting_copy,
non_local_copy_between_wc,
non_local_copy_into_switched,
non_local_copy_into_nested,
no_empty_mergeinfo_in_mixed_revision_wc): New tests.
(branch_change_and_merge_back): Helper for the new tests.
(test_list): Run the new tests.
]]]
The patch itself is in attachment.
--
With best regards,
Danil Shopyrin
VisualSVN Team
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe_at_subversion.tigris.org
For additional commands, e-mail: dev-help_at_subversion.tigris.org
Received on 2008-09-10 12:37:47 CEST