Hi, Julian,

Von: Julian Foad [mailto:julianf...@btopenworld.com]
> 
> Markus Schaber wrote:
> > I’m given a working copy and a merge from URL.
> >
> > Is there any easy heuristics I can implement using the SVN
> > 1.7 APIs to guide my user whether a sync-merge or a reintegrate merge
> > is appropriate? I want to display a warning message when the merge
> > will most likely fail.
> >
> > I know that SVN 1.8 does similar calculations internally to implement
> > “symmetric merge”, but I’m just looking for a simple, fast heuristic
> > using the public APIs, covering the basic use cases (we don’t allow
> > subtree merges or switches of subtrees, for example).
> 
> I think you should be able to get a pretty reliable answer, given your
> restrictions, in most cases.  You need to determine whether the most
> recent merge between these two branches was in the same direction or the
> opposite direction compared with the requested merge.  Same direction =>
> you need non-reintegrate.  Opposite => you need reintegrate.
> 
> Pseudocode for a simplified method:
> 
>   source_mi = get_repos_mergeinfo(source-branch-root-path)
>   relevant_source_mi = hash_get(source_mi, target_path)
> 
>   target_mi = get_wc_mergeinfo(target-branch-root-path)
>   relevant_target_mi = hash_get(target_mi, source_path)
> 
>   if relevant_source_mi && relevant_target_mi:
>     if latest_rev_in(relevant_source_mi) >
> latest_rev_in(relevant_target_mi):
>       # you probably need a reintegrate merge
>     else:
>       # you probably need a non-reintegrate merge
> 
>   else if relevant_source_mi:
>       # you probably need a reintegrate merge
> 
>   else if relevant_target_mi:
>       # you probably need a non-reintegrate merge
> 
>   else:
>     # maybe no merge has been done before, in which case
>     # either is OK; or maybe one or both branches have been
>     # renamed.
> 
> I haven't fully checked what APIs are available for this, but I see there
> is svn_client_mergeinfo_get_merged() which might be all you need.
> 
> Why do I say, "in most cases," "simplified," and "you probably need"?  If
> the branch has been renamed, then simply filtering on the path of the
> other branch to find the "relevant" mergeinfo is not correct.  (That's the
> "hash_get" step.)  If you want this to work even when a branch has been
> renamed, then we need to dig deeper; let me know if you want help with
> that.

Thanks for your answer, I'll try to investigate this tomorrow. Let's see what 
parts of the API are exposed through SharpSVN, and what other parts I need to 
add there.

For now, "in most cases" is probably enough, and as a long-term solution, we'll 
upgrade to SVN 1.8 eventually. :-)


Best regards

Markus Schaber
-- 
___________________________
We software Automation.

3S-Smart Software Solutions GmbH
Markus Schaber | Developer
Memminger Str. 151 | 87439 Kempten | Germany | Tel. +49-831-54031-0 | Fax 
+49-831-54031-50

Email: m.scha...@3s-software.com | Web: http://www.3s-software.com 
CoDeSys internet forum: http://forum.3s-software.com
Download CoDeSys sample projects: 
http://www.3s-software.com/index.shtml?sample_projects

Managing Directors: Dipl.Inf. Dieter Hess, Dipl.Inf. Manfred Werner | Trade 
register: Kempten HRB 6186 | Tax ID No.: DE 167014915 

Reply via email to