github GitoxideLabs/gitoxide gix-merge-v0.15.0
gix-merge v0.15.0

22 hours ago

Chore

  • make fuzz test 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::PreparedMerge to 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_intersecting reports an overlap
    and the merge produces a conflict — even though git 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-v2 with 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 fuzz test myers algorithm resilient against pathological inputs. (ed32b8a)
    • Add blob::text::PreparedMerge to 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-v2 with 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-diff 0.1 and 0.2 (fd49295)
    • Merge pull request #2480 from GitoxideLabs/report (98bae84)

Don't miss a new gitoxide release

NewReleases is sending notifications on new releases.