Commit Briefs

cd25827e24 Neels Hofmeyr

myers_divide: stop traversing snakes after reasonable max effort (neels/max_effort)


8546b0450f Neels Hofmeyr

diff result: ensure sane order of result chunks

Ensure that a adjacent chunks of same type are combined, and that a minus block always precedes an adjacent plus block. The upcoming myers-divide optimization is prone to produce weird ordering of plus and minus chunks.


2c8a57df59 Neels Hofmeyr

add ARRAYLIST_INSERT()


44cf49504c Neels Hofmeyr

patience: error handling from diff_atoms_same()


ac2eeeffef Neels Hofmeyr

myers: error handling from diff_atoms_same()




3e6cba3a54 Stefan Sperling

replace enum diff_rc errors with plain errno values


80b447444e Stefan Sperling

fix build with 'make PROFILE=1' on OpenBSD



Branches

Tags

This repository contains no tags

Tree

.gitignorecommits | blame
GNUmakefilecommits | blame
LICENCEcommits | blame
READMEcommits | blame
compat/
diff/
diff-version.mkcommits | blame
include/
lib/
man/
test/

README

This is a collection of diff algorithms, to test various combinations.

The initial aim was to provide a faster diff implementation for got
(gameoftrees.org) with a BSD license, at the u2k20 OpenBSD hackathon.
A side effect could be improving OpenBSD's /usr/bin/diff utility.

At the time of writing, this is little more than a playground / benchmark basis
/ diff algorithm analysis platform. What could be done:
- add profiling and test series to rate diff algorithm combinations.
- interface with / merge into got.

The Myers and Patience Diff algorithm implementations found here are based on
the explanations found in these blog post series:
  https://blog.jcoglan.com/2017/02/12/the-myers-diff-algorithm-part-1/ ff.
and
  https://blog.jcoglan.com/2017/09/19/the-patience-diff-algorithm/ ff.
-- possibly the single most comprehensive explanations of these algorithms.
Many thanks for this valuable door opener!
The source code itself is not based on the code found in those blogs, but
written from scratch with the knowledge gained.

Compile:
  OpenBSD:
    make -C diff
  Linux:
    make -f linux_Makefile -C diff

Test:
  make -C test/