Commits


patience: do not swallow identical neighbors This does not make much sense, because if common-unique lines swallow their neighboring ones, they count less, and another bad, shorter sequence may gain more weight than a very long sequence that was combined to just one common-unique chunk. It also much simplifies the code and avoids bugs we had to implement complex fixes for before.


set diff box recursion limit to UINT_MAX by default In practice, recursion is already limited by our Myers max-effort cut and this heuristic should generally provide a better split than a limit on the number of diff boxes. A recursion limit is only required for diff configs that do not include the Myers algorithm, which we currently don't have. Discussed with Neels


set a minimum myers effort limit to avoid an early short-cut on small files discussed with Neels


allow for telling the difference between empty and non-existent files Adjust labels used in diff output accordingly; non-existent files should have the label "/dev/null"


handle binary files like diff(1) does; new -a option forces text


expose struct diff_atom in public API for external atomizer implementations


add a missing include for uint8_t and switch from <inttypes.h> to <stdint.h> ok millert stsp


fix patience diff assertion failure exposed by test122


add a test case which triggers an assertion in diff -P


add another test case where a context line appears as both - and + This line appears as a context line with regular diff(1) and git diff: crd->crd_key = sd->mds.mdd_crypto.scr_key[0]; [[[ + crd->crd_alg = sd->mds.mdd_crypto.scr_alg; + crd->crd_klen = sd->mds.mdd_crypto.scr_klen; crd->crd_key = sd->mds.mdd_crypto.scr_key[0]; - bcopy(&blk, crd->crd_iv, sizeof(blk)); + memcpy(crd->crd_iv, &blkno, sizeof(blkno)); ]]] Our diff produces a different result where this context line is both deleted and added: [[[ - crd->crd_alg = CRYPTO_AES_XTS; + crd->crd_alg = sd->mds.mdd_crypto.scr_alg; + crd->crd_klen = sd->mds.mdd_crypto.scr_klen; + crd->crd_key = sd->mds.mdd_crypto.scr_key[0]; + memcpy(crd->crd_iv, &blkno, sizeof(blkno)); + } - switch (sd->mds.mdd_crypto.scr_meta->scm_alg) { - case SR_CRYPTOA_AES_XTS_128: - crd->crd_klen = 256; - break; - case SR_CRYPTOA_AES_XTS_256: - crd->crd_klen = 512; - break; - default: - goto unwind; - } - crd->crd_key = sd->mds.mdd_crypto.scr_key[0]; - bcopy(&blk, crd->crd_iv, sizeof(blk)); - } - crwu->cr_wu = wu; - crwu->cr_crp->crp_opaque = crwu; - return (crwu); ]]]


add some API functions which allow access to opaque struct diff_chunk


fix patience: off-by-one preventing swallow the same identical line twice


results_test: fix output: print atom indexes, not file pos


assertions fixup: unused var for non-debug


include sys/types.h for size_t in our string.h compat header file


remove a bunch of overly verbose debug


fix result chunks: add minus above plus failed to shift "empty" positions


add test020


undup code to add result chunks


add sanity assertions around adding result chunks uncovers errors related to placing minus chunks above already added plus chunks.


add strlcat and strlcpy compat functions for Linux


add test117


fix patience crash: iron out overlapping identical-blocks on the right


remove stray blank line


patience debug