This branch adds a hook point that allows a plugin to perform the merging of the contents of specific files (see bug 491711).
The tests hopefully make the capabilities fairly clear. In short:
* it is invoked for all changes where one side has changed the content, and the other side has changed the content or deleted the file
* hook functions are passed the merger, file_id and trans_id (so can get access to filenames and file contents in the various this/other/base trees)
* hook functions can explicitly do nothing (allowing the next registered function to try), or return a conflict, a successful merge, or a deletion of the file.
* hook functions can set the contents of a file in both the success and conflict case
Some open questions (could be addressed in future patches perhaps):
* should merge of a file rename vs. a text change use this hook point?
* should a hook function be able to have some control over the emission of THIS/BASE/OTHER files when it results in a conflict, or over their contents of those files?
* what helpers can we provide to help people write hook functions?
* what more can we do to help multiple hook registrations co-exist peacefully? e.g. These functions already chain, but if multiple plugins register with this hook the ordering is not defined.
I think ideally this hook point would be marked experimental until we get some practical experience proving that it works well in practice (e.g. that someone can write a plugin to merge NEWS files), but that's what beta series are for ;)
This branch adds a hook point that allows a plugin to perform the merging of the contents of specific files (see bug 491711).
The tests hopefully make the capabilities fairly clear. In short:
* it is invoked for all changes where one side has changed the content, and the other side has changed the content or deleted the file
* hook functions are passed the merger, file_id and trans_id (so can get access to filenames and file contents in the various this/other/base trees)
* hook functions can explicitly do nothing (allowing the next registered function to try), or return a conflict, a successful merge, or a deletion of the file.
* hook functions can set the contents of a file in both the success and conflict case
Some open questions (could be addressed in future patches perhaps):
* should merge of a file rename vs. a text change use this hook point?
* should a hook function be able to have some control over the emission of THIS/BASE/OTHER files when it results in a conflict, or over their contents of those files?
* what helpers can we provide to help people write hook functions?
* what more can we do to help multiple hook registrations co-exist peacefully? e.g. These functions already chain, but if multiple plugins register with this hook the ordering is not defined.
I think ideally this hook point would be marked experimental until we get some practical experience proving that it works well in practice (e.g. that someone can write a plugin to merge NEWS files), but that's what beta series are for ;)