Chore
- make
fuzztest myers algorithm resilient against pathological inputs.
Achieved by removing Myers as it's way of operation can't really be fixed. - add package.include directives to control which files are packaged.
New Features
- add
blob::text::PreparedMergeto allow re-running with different Conflict resolutions.
This is useful to quickly check different resolution results.
Bug Fixes
-
enable diff-postprocessing in when merging blobs
This can lead to cleaner, more Git-like merges. -
coalesce split Myers hunks to prevent false merge conflicts
When imara-diff's Myers algorithm diffs two files, it sometimes splits
what is logically one change into a non-empty deletion hunk and a
separate empty insertion hunk, with one unchanged base line between
them. This is a valid minimal edit script, but it differs from the
alignment that git's xdiff (also Myers-based) would choose.When the empty insertion lands at a base position that the other side
of a 3-way merge also touches,take_intersectingreports an overlap
and the merge produces a conflict — even thoughgit merge-file
resolves the same inputs cleanly.Fix this by adding a pre-processing step after sorting hunks: for each
empty-range insertion hunk, look backwards for the nearest same-side
non-empty hunk within a gap of at most one unchanged base line. If
found, extend that hunk to cover the gap and the insertion point. This
re-joins the split hunk, making the merge robust to different diff
algorithm alignment choices.The coalescing is conservative: it only applies when (a) the insertion
hunk has an empty before-range, (b) there is a same-side non-empty
hunk nearby (gap ≤ 1), and (c) that hunk is the nearest same-side
hunk. This avoids affecting cases like zdiff3-interesting where empty
insertions are standalone and represent genuinely different changes.
New Features (BREAKING)
- Use
imara-diff-v2with git sliders processing
The slider post-processing imrpoves the diff quality for about 8% slower diffs.
Line-counts, however, will be 50% faster to compute.
Commit Statistics
- 20 commits contributed to the release over the course of 32 calendar days.
- 32 days passed between releases.
- 6 commits were understood as conventional.
- 0 issues like '(#ID)' were seen in commit messages
Thanks Clippy
Clippy helped 1 time to make code idiomatic.
Commit Details
view details
- Uncategorized
- Update changelogs prior to release (f9fbcba)
- Merge pull request #2534 from GitoxideLabs/fuzz-merge-timeout (2e8a90d)
- Address auto-review (94b1c4b)
- Make
fuzztest myers algorithm resilient against pathological inputs. (ed32b8a) - Add
blob::text::PreparedMergeto allow re-running with different Conflict resolutions. (1ec2812) - Merge pull request #2497 from cruessler/pass-hash-len-to-tree-ref-iter (7d50c30)
- Adapt to changes in
gix-object(6df1d55) - Merge pull request #2476 from mtsgrd/fix/false-conflict-empty-insertion-overlap (172bd22)
- Review (7b82f3a)
- Enable diff-postprocessing in when merging blobs (91feaf2)
- Coalesce split Myers hunks to prevent false merge conflicts (680dbb7)
- Merge pull request #2513 from GitoxideLabs/v2-diff (2a5db88)
- Thanks clippy (e4f380e)
- Use
imara-diff-v2with git sliders processing (8094f5d) - Merge pull request #2518 from GitoxideLabs/improvements (444a92b)
- Add package.include directives to control which files are packaged. (3e05ca3)
- Merge pull request #2506 from GitoxideLabs/vendor-imara-diff (8f091d1)
- Add a test that reproduces a timeout issue in
gix-merge. (3bf4bdc) - Vendor
imara-diff0.1 and 0.2 (fd49295) - Merge pull request #2480 from GitoxideLabs/report (98bae84)