On 27.03.2013 17:18, Julian Foad wrote:
> Brane told me that while updating the JavaHL API he noticed that the new 
> svn_client_merge_automatic() is Yet Another Merge API, and would prefer make 
> the existing JavaHL merge API encompass that functionality rather than add 
> yet another variant.  So I said if let's see if we can apply that idea to the 
> libsvn_client API.
>
>
> Idea: 'automatic' merge is (in a high level logical sense) most similar to a 
> subset of the 'pegged' merge.  So make 'merge_peg' do the automatic merge 
> (like calling the automatic merge API) if the params are suitable.  The 
> intention is that this should be easier for Subversion client developers to 
> understand and for them to DTRT.
>
> API differences between pegged and automatic merge:
>
>                 Pegged merge                       Automatic merge
>
> The 'find'API: Single merge_peg call does        Separate'find' and 'do' 
> calls.
>                 the whole process.                 Result of 'find' tells 
> what we found,
>                                                    used for 'svn mergeinfo' 
> graph.
>
> Source:         revision ranges X:Y[,X:Y...]       revision range 0:Y
>                 on branch URL@PEG                  on branch URL@PEG
>
> Target:                                           optional non-WC tgt for 
> 'find'
>
> If mergeinfo:   skip already-merged revs           (same)
>                 record the merge
>
> No mergeinfo:   don't skip revs                   error out
>                 don't record
>
> Options differ: allow_mixed_rev                   allow_mixed_rev
>                                                    allow_local_mods
>                                                    allow_switched_subtrees
>                ignore_mergeinfo
>
> At that level, it looks close enough to be feasible to embed 'automatic' 
> merge inside 'pegged'.  I'm looking closer now.
>
> Any thoughts?

This is pretty much the same conclusion I came to earlier today. I looks
like the easiest thing to do would be to make the _automatic_ APIs
private within libsvn_client, move the selection logic to
svn_client_merge_pegX, and simplify the client implementation.

The only trouble with that is, as you say, that "svn mergeinfo" relies
on having the automatic_find API available. I think this could be solved
in several ways:

 1. by splitting the merge-peg into two, as the current automatic-merge; or,
 2. by making only the "do" phase of the automatic merge private, and
    wile leaving the "find" phase public -- but renaming it to something
    more in line with merginfo discovery; or,
 3. somehow exposing the "find" phase through one of the existing (or
    revised) svn_client_mergeinfo_* APIs.


I'm kind of leaning towards #3, but don't have a sense of how
complicated that would be.

-- Brane



-- 
Branko Čibej
Director of Subversion | WANdisco | www.wandisco.com

Reply via email to