github GitoxideLabs/gitoxide gix-revision-v0.50.0
gix-revision v0.50.0

7 hours ago

Bug Fixes

  • stop merge-base walks when one paint side is exhausted
    Tested with gix merge-base and noticed that even with gix merge-base @ @~800
    with first: Sha1(707df3375124b51048233625a7e1c801e8c8a7fd) | others: [Sha1(c9c0543b52d8cfe3a3b15d1e39ab9dbc91be6df4)]
    this branch implementation is noticably faster, roughly 10.2ms vs 61.2ms.

    The merge-base walk kept following unrelated ancestry while any queued
    commit remained non-stale, even after one paint color could no longer
    contribute a merge base. Its termination check also scanned the queue
    on every iteration.

    Adapt Git's side-exhaustion optimization from 02d7ba092d: count
    non-stale queued commits carrying each color and stop when either count
    reaches zero in the topologically ordered region. Candidates contribute
    to both counts so they are processed before termination. Track queue
    membership to handle flag changes and duplicate inputs without counting
    a commit twice.

    Keep the existing stale-only termination for missing, zero, or saturated
    generations, where date ordering can revive an apparently exhausted
    color. Continue removing redundant candidates after the paint walk.

    Use existing fixtures to prove that unrelated ancestry is skipped and
    cover pending candidates, duplicate inputs, graph reuse, and clock skew.
    The skipped-ancestry regression fails before this change.

Changed (BREAKING)

  • raise MSRV to Rust 1.88

    The newly published dua-core 3.3 release used by linked-worktree removal
    requires Rust 1.88, so raise every workspace crate and the advertised badge
    together.

    Keep the MSRV checks buildable by selecting the latest sysinfo and rusqlite
    release lines that support Rust 1.88.

Bug Fixes (BREAKING)

  • preserve merge-base lookup failures

    rubber stamp, but checked the diff and asked for fixes to use gix_error::TestResult instead,
    which for the sake of simplicity is going to happen in a future commit.

    Merge-base traversal replaced object-store and decoding errors with a static
    message. Missing objects, retryable I/O failures, and custom backend errors
    therefore lost their causes and classifications at the revision boundary.

    Return Exn<Message> and raise graph insertion context around the original
    failure. Remove the forwarding Error alias and Simple type, and adapt the
    porcelain API to return gix::Error.

    The regression reproduces the lost backend cause before the fix and verifies
    its concrete I/O kind, missing-resource classification, and retry policy after
    conversion. All 113 revision tests and the porcelain revision tests pass;
    gix and gix-merge compile with the changed signature.

Commit Statistics

  • 9 commits contributed to the release over the course of 31 calendar days.
  • 32 days passed between releases.
  • 3 commits were understood as conventional.
  • 0 issues like '(#ID)' were seen in commit messages

Commit Details

view details
  • Uncategorized
    • Merge pull request #2847 from GitoxideLabs/gix-error-completion (6356013)
    • Preserve merge-base lookup failures (b692589)
    • Merge pull request #3003 from GitoxideLabs/merge-base-perf (31b9128)
    • Stop merge-base walks when one paint side is exhausted (d798250)
    • Merge pull request #2949 from GitoxideLabs/error-conversion-review (a095334)
    • Raise MSRV to Rust 1.88 (4b42e0c)
    • Merge pull request #2955 from GitoxideLabs/transport-url-encoding (7e35849)
    • Release gix-path v0.12.6, gix-error v0.3.2, gix-command v0.10.1, gix-transport v0.59.2 (888677a)
    • Merge pull request #2940 from GitoxideLabs/vendor-bisync (dda600d)

Don't miss a new gitoxide release

NewReleases is sending notifications on new releases.