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,