Author: pburba
Date: Thu Aug 4 20:55:47 2011
New Revision: 1154009
URL: http://svn.apache.org/viewvc?rev=1154009&view=rev
Log:
Fix issue #3978 'Reverse merge which adds subtree fails'
* subversion/libsvn_client/merge.c
(record_mergeinfo_for_added_subtrees): Document and enforce that this
function handles forward merges only.
(do_directory_merge): If a reverse merge adds a subtree, there is no
possible mergeinfo on the subtree that needs to be removed in order
to describe the merge itself, so don't try.
Modified:
subversion/trunk/subversion/libsvn_client/merge.c
Modified: subversion/trunk/subversion/libsvn_client/merge.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/merge.c?rev=1154009&r1=1154008&r2=1154009&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/merge.c (original)
+++ subversion/trunk/subversion/libsvn_client/merge.c Thu Aug 4 20:55:47 2011
@@ -7755,6 +7755,9 @@ record_mergeinfo_for_dir_merge(svn_merge
DEPTH, NOTIFY_B, MERGE_B, and SQUELCH_MERGEINFO_NOTIFICATIONS, are
cascaded from do_directory_merge's arguments of the same names.
+
+ Note: This is intended to support forward merges only, i.e.
+ MERGED_RANGE->START must be older than MERGED_RANGE->END.
*/
static svn_error_t *
record_mergeinfo_for_added_subtrees(
@@ -7773,6 +7776,8 @@ record_mergeinfo_for_added_subtrees(
if (!notify_b->added_abspaths)
return SVN_NO_ERROR;
+ SVN_ERR_ASSERT(merged_range->start < merged_range->end);
+
iterpool = svn_pool_create(pool);
for (hi = apr_hash_first(pool, notify_b->added_abspaths); hi;
hi = apr_hash_next(hi))
@@ -8604,7 +8609,9 @@ do_directory_merge(svn_mergeinfo_catalog
So here we look at the root path of each subtree added during the
merge and set explicit mergeinfo on it if it meets the aforementioned
conditions. */
- if (err == SVN_NO_ERROR)
+ if (err == SVN_NO_ERROR
+ && (range.start < range.end)) /* Nothing to record on added subtrees
+ resulting from reverse merges. */
{
err = record_mergeinfo_for_added_subtrees(
&range, mergeinfo_path, depth,