Here is what I'd like to see.

We choose some default behaviour, but we 
don't hard-code the default behaviour.  At the API level the behaviour should 
be 
controlled by flags or callbacks or what have you.  At the UI level, 
just as we allow the user to plug in a 3-way merge tool for text merging if 
they don't like the default behaviour, so we should allow 
customization of tree-change merging.  That could be just an option to 
select between two or thee modes ('strict', 'lax' or 'typical') or a UI 
giving more detailed control.


Somebody mentioned months ago that the code would be cleaner if we would 
consistently treat every incoming change the same way.  First store the 
incoming change, whatever it is, alongside the existing local change; then run 
a standard "conflict resolver callback" on it which in most cases would notice 
it's a trivial case and silently select the obvious resolution; and in any 
non-trivial case get the user's input.  Then if the user wants all edit-vs-move 
potential conflicts to be resolved automatically, the user simply switches on 
the appropriate flag in the callback's baton by ticking a box in the GUI or 
passing a command-line option.

Then selection of a default behaviour becomes an almost orthogonal discussion 
with zero impact on the svn library implementation.

- Julian

Reply via email to