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