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