http://subversion.tigris.org/issues/show_bug.cgi?id=2897
Issue #|2897
Summary|reflective merges are faulty
Component|subversion
Version|trunk
Platform|All
URL|
OS/Version|All
Status|NEW
Status whiteboard|
Keywords|
Resolution|
Issue type|DEFECT
Priority|P1
Subcomponent|libsvn_client
Assigned to|issues subversion
Reported by|kameshj
------- Additional comments from kameshj tigris.org Thu Aug 30 05:12:06 -0700 2007 -------
While studying merge.c to fix issue 2821, I came across the
following snippet of
code which suggested a bug to me.
<snip from calculate_requested_merges>
if (added_mergeinfo)
{
const char *src_rel_path;
SVN_ERR(svn_client__path_relative_to_root(&src_rel_path,
entry->url,
entry->repos, ra_session,
adm_access,
pool));
src_rangelist_for_tgt = apr_hash_get(added_mergeinfo,
src_rel_path,
APR_HASH_KEY_STRING);
}
</snip>
The above logic is wrong, take the following usecase,
1)We branched /trunk as /fb at r51.(Now /fb has a mergeinfo
of /trunk: 1-50)
2)We did changes to /fb at r52 and r53
3)Synched up the changes from /trunk to /fb via a merge and
committed the merge
at r60(Now /fb has a mergeinfo of /trunk: 1-59)
4)Did some changes to /fb at r61, r62
5)Merge -r51:62 $URL_to/fb to $WC_of_trunk
Now our above reflective logic code removes '51:59' from
'51:62' and hence just
merges '60:62' and hence does a bogus possible conflict and
never merges the
commits '/fb' prior to synch up from the '/trunk' to '/fb'.
Attaching simple shell script to prove the problem.
------------------------------------------------------------
---------
To unsubscribe, e-mail: issues-unsubscribe subversion.tigris.org
For additional commands, e-mail: issues-help subversion.tigris.org
|