Bug Fixes
-
stop merge-base walks when one paint side is exhausted
Tested withgix merge-baseand noticed that even withgix 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-core3.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
sysinfoandrusqlite
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 forwardingErroralias andSimpletype, and adapt the
porcelain API to returngix::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;
gixandgix-mergecompile 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)