On Wed, May 16, 2012 at 8:55 AM, Julian Foad <julianf...@btopenworld.com> wrote:
> Stefan Sperling wrote:
>
>> Bert Huijben wrote:
>>>  Note that the simple view of this model doesn't match GUI clients
>>>  expectations.
>>>
>>>  GUI's can stay inside a callback and keep the gui functional for other
>>>  operations, so callbacks can only be handled by application-modal dialogs
>>>  (You can't do something else).
>>>
>>>  That is why most GUI's use svn status to determine the commit targets and
>>>  then pass a list of targets to the API, to specify what to commit.
>>>
>>>  Please make sure the new api also handles these scenarios, instead of just
>>>  optimizing for the callback case.
>>>
>>>  I wouldn't have a problem if at the libsvn_wc level we create a simple
>>>  callback that just says something like: 'This local_abspath is conflicted.
>>>  Resolve it now if you like'. The callback can then use the normal apis
>>> to  examine and resolve the conflict using the same svn_wc_context_t (and
>>>  svn_client_ctx_t).
>>
>> So you mean that instead of calling into a GUI client via a set
>> of callbacks, the client library should provide several API functions
>> that GUI clients can use to gather conflict information and options to
>> display, once the client library calls a generic "please resolve
>> conflicts now" callback?
>>
>> In other words, keep my idea but invert the flow of control?
>>
>> I don't care much about how control flow is structured, more about
>> preventing clients from showing arbitrary conflict dialogs that
>> differ significantly from what other clients present, and which offer
>> options the client library is not prepared to handle.
>
> I think the way to avoid "offering options the client library is not prepared 
> to handle" is that the application should resolve a conflict by calling a 
> series of (mostly) normal client operations, rather than by telling the 
> client library to do "the conflict-resolution-action named 'foo'".
>
> Certainly the set of available client-lib operations could include some of 
> the common resolutions, but the application should not be restricted to 
> offering only the options that are compiled into some list in the the 
> Subversion library.
>
> It follows from what I'm saying that I don't believe we should be trying to 
> make all clients display the same set of options.  Instead, we should just 
> show the client application authors what we think is a reasonable selection 
> of options as a starting point to guide them, and let them deviate from that 
> (especially by adding more interesting/complex ones).

To a degree, clients can already do this.  When SVN 1.6 came out we
created a custom tree conflict resolution wizard for Subclipse that
does this.  It just runs a series of high-level SVN options to resolve
conflicts in various ways.  That said, I also like having built-in
resolutions that we can just call.  Currently, the only way to do the
things that svn resolve --accept=XXX does is to call that API.  I
guess it would be OK if those resolutions were separate API's that we
could call and then we would just follow them up with a general API
call that says we have resolved everything.  But again, I think we can
do that today and the question is really just whether SVN could
provide more API's to resolve more scenarios.

-- 
Thanks

Mark Phippard
http://markphip.blogspot.com/

Reply via email to