After looking at various diff solutions it has been determined that all current offerings are not efficient enough or generic to the point of being the solely used solution. From there it has been determined that the module should provide 3 different backends / engines for the administrator to choose from.
The first option will be to use local system specific commands (diff and patch). Should the host not have these programs (or the administrator not want to use them) the next option is the PHP extension xdiff. This nifty code uses the libXdiff library to provide a nice set of PHP functions that will create unified diffs from strings and files as well as apply unified patches to both. Finally should the host not have that extension installed or the admin prefers another solution. A simple PHP diff and patch engine will be provided. But how does this apply to the issue title? The module needs to support any number of pluggable engines (which should be interoperable with eachother (ie a diff from one can used in the patch engine of another)). The three listed here are provided by default here, but this could be extended to use other engines.
This issue is coupled closely with the default engine issues located at:
#479064: Create System based diff back-end
#479066: Create Extension based diff back-end
#479068: Create PHP based diff back-end
Comments
Comment #1
bradfordcp commentedThe current system works fine for automatic merging, but when a conflict occurs the various backends return different results. I am in the process of testing a unified conflict format. This would provide a common interface for worker modules to implement as well as provide a simple way to manual merge conflicts.