NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #1338 most downloaded on crates.io
A crate of the gitoxide project
Last release 13 days ago
25 Sep 2026
Ships on a steady schedule
a new release about every 4 weeks
Nearly every release is documented
notes for 49 of 50 stable releases
1 version withdrawn
withdrawn after publishing
4 years old
51 releases · first in 2023
One column per quarter.
Keep rust workspace tests inside disposable repositories and isolated environments
Keep rust workspace tests inside disposable repositories and isolated environments
Direct Git launches inherited repository selectors and user configuration even
when tests supplied a fixture working directory. Tests of default-environment
APIs and local Git transports also shared the runner's environment. A few
journey tests wrote beneath source directories or used the source checkout as
the repository under test.
Use the shared gix-testtools Git command builder for subprocess setup, isolated
repository options for fixtures, and isolated child processes where the real
environment-reading API must be exercised. Scope CWD changes, copy the fixture
used by an object-write test, and run shell journeys through jtt run. Keep
journey worktrees and example output within their disposable sandboxes and
replace the attributes checkout test with a representative fixture repository.
Prompt examples also run in isolated children and must build successfully; the
old tests could ignore build failures and execute stale cached binaries.
The affected Rust crate suites, internal test-tool build, and max-pure journey
suite pass from a source copy without Git metadata. Signing and Git-daemon
checks use only disposable keys, repositories, and local sockets.
migrate errors to gix-error
rubberstamp
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.
Nothing published for this version
6 commits contributed to the release.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
cb6ec7d)c16b5a1)43ff87a)cf3053a)27aec47)1b1541e)
</details>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 t
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.
gix editor command
Provide a small plumbing command that opens zero or more paths withRepository::editor()'s Git-compatible selection. Prepare editor definitions withgix editor command (d930653)<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
6428edc)b5b2d54)bc4064c)2125012)f7d4f33)
</details>remove gix tix screen selection Remove the plumbing CLI screen-mode option now that the interactive history always owns the alternate screen. The auto
remove gix tix screen selection
Remove the plumbing CLI screen-mode option now that the interactive history always owns the alternate screen. The automatic and half-screen modes depended on inline rendering behavior that is being retired from gix-tix.
Stop accepting --screen for gix tix and its aliases, and remove the mode validation and translation into gix-tix. Construct the reduced gix-tix options directly from the remaining quit and hidden-revision arguments. Keep a command-line regression assertion so the removed option cannot silently return as an ignored argument.
delegate tix commands through gix-tix
Embed the complete gix-tix Clap platform in the plumbing command instead of maintaining a second parser and dispatcher. This keeps standalone and plumbing invocations aligned, adds worktree-tip parity, and makes amend and spill available through gix tix without duplicating their execution logic.
show other worktree checkouts in tix
Decorate commits checked out by other main or linked worktrees with light-blue name@ labels, replacing the ordinary branch label. Keep the checkout from which tix was opened represented by the graph @ marker and its ordinary local reference, and use directory basenames for other detached worktrees. Keep other-worktree labels visible on the selected row when references are hidden.
Add -w/--worktrees to include every successfully resolved worktree HEAD, including the current checkout, alongside implicit or explicit traversal tips without weakening hidden-revision exclusions. Discover worktrees from their private Git metadata so stale checkout directories remain useful, while malformed, unborn, or inaccessible entries are logged and skipped.
Watch linked HEAD and worktree membership changes so decorations and optional tips stay current, while ignoring unrelated linked indexes, logs, and metadata. Document the behavior and cover current, attached, detached, stale, malformed, hidden-reference, CLI, and watcher cases.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
10c58bb)87433ed)f962ed1)575113d)gix-testtools (ce9e6bd)278d7ec)0ec3bb7)sha1 and sha256 forwardings for all crates (09b982c)1cd36be)GIX_TEST_FIXTURE_HASH for gix-traverse-tests (9f064a3)ab2fee1)2cb17b2)e10d5f6)3675a8d)adb8328)
</details>support cloning a single revision
support cloning a single revision
A full object ID passed through with_ref_name() produced an object-ID refspec
mapping and panicked while clone assumed every mapping had a name. Branch and
tag checkout also retained ordinary clone tracking semantics instead of offering
a single-revision mode.
Add PrepareFetch::with_revision() and gix clone --revision for full refs, HEAD,
and full object IDs. Revision clones use a one source-only implicit refspec,
detach HEAD to the fetched commit, create no ordinary refs, persist no fetch
refspec, and disable tag following. Existing with_ref_name() and --ref behavior
stays unchanged.
This follows Git commit 337855629f59 (builtin/clone: teach git-clone(1) the
--revision= option) and its t/t5621-clone-revision.sh behavior.
gix-date (613ff86)keep descendants of ignored directories excluded
I looked at this carefully, and ended up having a better comment
to provide an example for what this covers.
Ultimately, this is test extension is still minimal compared to the
behaviour that it enables, scoped status, but I think it's fine
in there interest of less code.
Scoped status walks can enter an ignored directory when a pathspec
matches. If a deeper directory matches a negated rule such as !out/,
the ignore stack previously stopped at that nearer match and exposed its
contents as untracked. Tix uses scoped walks for filesystem refreshes,
so ignored Cargo output appeared after unrelated worktree events and
disappeared after a full refresh.
Continue through negated directory matches to check excluded ancestors.
Keep the nearest negation as the fallback when no ancestor excludes the
path, and preserve the precedence of positive directory matches,
including precious-file handling.
Extend the Git-reference fixture below a negated child directory and
refresh both hash archives. The extended fixture fails with the previous
matcher. All directory-walk, status, and worktree tests pass, as do the
SHA-256 ignore baseline, formatting, and Clippy with -D warnings.
Clippy retains the workspace's existing removed-lint warning.
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.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
53f880c)gix-object (91bfab0)4d5ba23)
</details>11 commits contributed to the release over the course of 30 calendar days.
gix-testtools (0cbe539)Store::at() where possible (17fea2a)GIX_TEST_FIXTURE_HASH for more tests (bbea2c4)with-hidden()
This is achieved by precomputing a hidden-frontier which the actual
traversal then cannot cross.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 1 time to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
f9fbcba)7d50c30)gix-object (6df1d55)6f47e98)with-hidden() (f6d993e)2a5db88)e4f380e)444a92b)3e05ca3)package.include patterns more specific so they don't match ignored files (c2c917f)98bae84)
</details>add sha1 and sha256 features to gix. This way one can control which hashes are compiled in exactly, while having reasonable defaults automatically.
sha1 and sha256 features to gix.
This way one can control which hashes are compiled in exactly,
while having reasonable defaults automatically.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
c389a2c)6183fd0)6bdb331)e8bf096)sha1 and sha256 features to gix. (3832916)gix-hash (e71c703)f7277f3)
</details>gix dirwalk as a way to run gix-dir directly This is mostly for testing walks specifically, without needing them as part of gix clean or gix status.
gix dirwalk as a way to run gix-dir directly
This is mostly for testing walks specifically, without needing them as part
of gix clean or gix status.gix merge tree --message '' to allow creating commits
This is useful for controlling cherry-picks precisely.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
1322a36)gix dirwalk as a way to run gix-dir directly (add4cf4)ab2fee1)2cb17b2)e10d5f6)0771cb2)gix merge tree --message '' to allow creating commits (6ab327e)
</details><csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
ecf90fc)9327b73)
</details>use graph painting for hide() to ensure correct behavior The hide() function now fully traverses all hidden tips and marks all reachable commits as Hi
<csr-id-4ad0dbf8a5274d591f56e4af8ad745f3567f9543/> use graph painting for hide() to ensure correct behavior The hide() function now fully traverses all hidden tips and marks all reachable commits as Hidden before returning. This "graph painting" approach ensures correct behavior regardless of graph topology or traversal order, matching git's behavior.
Previously, hidden commits were traversed lazily during iteration, interleaved with interesting commits. While this worked in most cases, the new approach is simpler and more robust.
Added tests to verify correct behavior when:
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
d66ac10)8c88c59)647d008)d568b3d)gix-traverse (209641b)4ad0dbf)8bceefb)7ce3c55)f7d0975)
</details>Use std::ControlFlow where possible
std::ops::ControlFlow where possible<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
cbbdef5)562e684)fa302a1)std::ops::ControlFlow where possible (5c1bd03)0a333e5)c663b3f)
</details>4 commits contributed to the release over the course of 5 calendar days.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
7be8f90)d914d95)4edc5dd)211b4fb)
</details>2 commits contributed to the release over the course of 9 calendar days.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
115e208)d6c5b9d)
</details>4 commits contributed to the release over the course of 12 calendar days.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
21fecdf)93dd630)703644c)
</details>2 commits contributed to the release.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
82ff92f)3313233)
</details>14 commits contributed to the release over the course of 99 calendar days.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
89fb308)4da2927)6cc8464)9365cc3)838ff95)dc7343c)79ba9d0)651f9fa)4289ae6)202bc6d)d64f257)589d63e)007e3f6)784c046)
</details>allow credential fill with gix credential fill to run without a repo
<csr-id-6f469a6fea59c88e6c69a5f94b0bc8a5977cb75b/>
gix credential fill to run without a repo<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
commit::Simple::hide() to hide a given set of tips.
That means, these tips and all their ancestors will be hidden from
the traversal.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
5a919c4)65037b5)dab97f7)a9a8ea1)92febae)219655f)commit::Simple::hide() to hide a given set of tips. (1b08fd9)c3f06ae)
</details>Add commit::Either::commit_time()
commit::Either::commit_time()<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
d2b4c44)gix-index (bfc4880)800738a)4408166)8be3193)9c3e288)commit::Either::commit_time() (b40ba17)8d4c4d1)
</details>3 commits contributed to the release.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
e104545)5f7f805)631f07a)
</details>add a gix commit sign prototype
gix commit sign prototypegix branch list<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
8699d0f)82f788e)gix commit sign prototype (aacc326)4da2927)6cc8464)gix-blame (a721e74)gix-blame (268dac4)525873f)04650a7)6651548)e537611)gix branch list (58b5060)c149116)gix tag list when JSON is requested (fb2766b)
</details>gix_date::Time on demand.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
cc5b696)db0b095)0bf84db)3b1bef7)c3c6504)b07f907)b5e9059)68e6b2e)420e730)
</details>add first debug version of gix tag list
<csr-id-37d3bf24ac1a79302f3e97b97372e4ad381c45e2/> add first debug version of gix tag list
<csr-id-ab52a49a555ab25e6cf632cb0b080eab72958a7d/> gix revision list --long-hashes for faster iteration.
The performance of the short-hash generation was improved as well.
<csr-id-c5bc49f2a02e9b28c2466ea4c7ae711d091ffc96/> support for commitgraph list from..to to exercise the new 'hide' capability.
<csr-id-1df1ebb34dd3e2101d8a112dda66f6bac5261ea7/> Enable precious file parsing in gix CLI by default, allow overrides.
That's pretty neat as one can now set GIX_PARSE_PRECIOUS=0 in the environment
to disable precious file parsing, good to see what difference it makes.
It's also possible to do this wiht gix -c gitoxide.parsePrecious=0.
<csr-id-36a6ffeea7bbde7fb3689ddf2a107e09a50e602c/> add support for multiple blame ranges like gix blame -L <range> -L <other-range> ...
Update the blame subcommand to handle multiple line ranges. This allows specifying multiple -L options similar to the usage of git.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
c7af04d)750ae9b)gix tag list (37d3bf2)c2eb0c1)bfb1c34)dd5f0a4)f933f80)gix revision list --long-hashes for faster iteration. (ab52a49)gix-blame (4afc51d)76eddf8)3e5365c)92febae)commitgraph list from..to to exercise the new 'hide' capability. (c5bc49f)5f9de52)gix CLI by default, allow overrides. (1df1ebb)de13b16)d4461e7)gix blame -L <range> -L <other-range> ... (36a6ffe)gix-blame (8143d69)
</details>commit::Either::tree_id()commit::find and commit::Either
For a way to obtain a commit either by ODB lookup, or by retrieving
it from the commit-graph.
This is useful for the implementation of custom traversals.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 2 times to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
b41312b)38dff41)544cdaf)commit::Either::tree_id() (625f9dd)85b060c)3c1b1df)8776a3e)9dcfd15)16a248b)8e96ed3)aa05ef0)commit::find and commit::Either (47c8a1f)8df0db2)
</details>It's a breaking change as the Visitor trait gets another way to pop a tracked path, suitable for the stack used for depth first.
<csr-id-17835bccb066bbc47cc137e8ec5d9fe7d5665af0/>
<csr-id-22f8939d862c74f2f55c74fded2f066a6d6536a1/> tree::depthfirst() traversal
A depth-first traversal yields the .git/index order.
It's a breaking change as the Visitor trait gets another way
to pop a tracked path, suitable for the stack used for depth first.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
dea106a)1f6390c)7ec21bb)rust-version to 1.70 (17835bc)0ab4f64)tree::depthfirst() traversal (22f8939)d22937f)
</details>add topo::Builder::new fn for creating a bare builder Previously, the only way to create a Builder would be via Builder::from_iters. That fn takes as
<csr-id-59148a2043f0f502edfb895e19843b7fab6efeac/> add topo::Builder::new fn for creating a bare builder
Previously, the only way to create a Builder would be via
Builder::from_iters. That fn takes as arguments both the tips and
ends, and used to be the only possibility for specifying either of them
during the building process. However, in order to enhance the builder-
likeness of Builder, we recently introduced fns with_tips and
with_ends for adding additional tips and ends.
With those fns, the only component which needs to be supplied up-front
is find. Users can specify and empty Iterator and None for tips
and ends respectively when calling Builder::from_iters and add
additional tips and ends at their leisure, without the need to chain
Iterators or collecting them in some external data structure.
Now, calling Builder::from_iters with a empty lists for tips and ends
is a bit awkward. Thus, we provide a new method for creating a bare
Builder.
<csr-id-a7a8d7cd79550033cc9e0277a0ab9155e5ab6739/> add topo::Builder::with_tips fn for adding tips after from_iters
Currently, Builder::from_iters takes as arguments both the tips and
ends. Previously, this would be the only possibility for specifying
either of them during the building process. To enhance the
builder-likeness of Builder, we recently introduced a fn for adding
additional ends.
This change introduces a fn which allows adding additional tips after
initial construction of a "fresh" Builder, allowing for more usage
patterns.
<csr-id-1c1d03775ce169dc3a353c2b81ce5770cbda15f5/> add topo::Builder::with_ends for adding ends after from_iters
Currently, Builder::from_iters takes as arguments both the tips and
ends, and it's the only possibility for specifying either of them during
the building process. Considering that ends in Builder::from_iters
is an Option, this is not very builder-like and obstructs some
use-cases.
This change introduces a fn which allows adding additional ends after
initial construction of a "fresh" Builder.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
c1ba571)7ea8582)3e63721)topo::Builder::with_tips and with_ends for non-default pred (d9426f4)67f20b1)55eaf52)29e3bbf)topo::Builder::new fn for creating a bare builder (59148a2)topo::Builder::with_tips fn for adding tips after from_iters (a7a8d7c)topo::Builder::with_ends for adding ends after from_iters (1c1d037)e8b3b41)
</details>4 commits contributed to the release.
<csr-id-f952c101cc8686e685074e8604e0f332c06d6767/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
4000197)8ce4912)bc9d994)7a40648)0f0e4fe)db5c9cf)
</details>add first 'debug' version of gix diff file
<csr-id-dd366a52d46078729a6e36468211b97c92c2921d/>
gix diff file<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 1 time to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
b10cc6f)1039ae9)dd366a5)gix diff file (dbb1532)dce127e)gix-blame (8a31d88)36a846f)7059609)--since (330711d)gix-blame (e7084d8)6acca19)147eb41)16a248b)8e96ed3)
</details><csr-id-64ff0a77062d35add1a2dd422bb61075647d1a36/>
<csr-id-1dbb94adeeea4ca09a7899697a3380c1e6a03130/> add option to traverse commits from oldest to newest This change introduces an enum to control commit traversal order. Users can now choose between newest-first or oldest-first traversal. The default behavior remains newest-first, but it can be toggled by passing a CommitTimeOrder to a Sorting::ByCommitTime* variant.
This feature is particularly useful for searching early repository history. The implementation remains largely agnostic to this change, with only minor logic adjustments in key areas as necessary.
The reversed order is achieved by inverting the PriorityQueue key when an oldest-first traversal is requested.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
3f7e8ee)795962b)64ff0a7)20f9b3f)6ac14d7)1dbb94a)649f588)beba720)37ba461)2e0ce50)f992fb7)ec69c88)e82f795)5ef8ae8)
</details>add gix env to print paths relevant to the Git installation.
gix blame -L start,endgix env to print paths relevant to the Git installation.gix blame to the CLI
That way it's possible to see the blame result of any file in the
repository.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
90fef01)gix blame -L start,end (4a78395)851a7c4)31d83a4). for consistency (ddddf02)gix env to print paths relevant to the Git installation. (75d689f)278125a)6ed9976)4ffe6eb)gix blame to the CLI (80e5804)
</details>A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
b3ff033)209b6de)
</details>add first 'debug' version of gix log It's primarily meant to better understand gix blame.
gix log
It's primarily meant to better understand gix blame.--tree-favor to gix merge tree|commit.
With it one can decide which side to favor in case of
irreconcilable tree-conflicts.gix merge file now uses THEIRS instead of OURS where needed<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
gix merge file now uses THEIRS instead of OURS where needed (0727b56)29cb775)gix log (c7e04e9)520c832)gix-diff (960773e)--tree-favor to gix merge tree|commit. (471e046)e8ce25f)
</details>A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
f2b522d)a65a17f)d19af16)0f25841)5871fb1)9fd1090)
</details>A maintenance release without user-facing changes.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
6232824)a1b73a6)0470df3)99c00cc)bf3d82a)c1d7c02)1dfa90d)tar files (dcab79a)9fa1054)9c65d98)ea12fc2)68cbea8)
</details>A maintenance release without user-facing changes.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
4f98e94)9511416)d3588ca)
</details>Expose the decoded path, query pairs, and fragment of Git remote URLs separately. Consumers can identify repository paths and inspect HTTP(S) paramete
add Url::path_query_fragment()
Expose the decoded path, query pairs, and fragment of Git remote URLs
separately. Consumers can identify repository paths and inspect HTTP(S)
parameters without implementing scheme-specific splitting and decoding.
Recognize delimiters before decoding and reuse validated original spelling
to borrow decoded bytes. Preserve encoded separators, nested escapes,
ordered duplicate query keys, and literal percent text after construction
or mutation. Query pairs use form decoding (+ becomes space); SSH/SCP
paths, existing accessors, and serialization keep their behavior.
Reference Git's connect.c::parse_connect_url() and url.c at
1630431f326e. Use fetch-pack --diag-url to check SSH delimiters;
standalone url-parse does not model that transport.
migrate errors to gix-error
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.
Url::path_query_fragment() (cd90fe1)gix merge commit --debug
This yields additional debugging information with details about detected conflicts.gix merge commitsgix merge tree to merge trees similarly to git merge-tree.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
0b7abfb)gix merge commit --debug (0a5993f)905e5b4)gix merge commits (4a5afc7)a876533)gix (8d590f3)3fb989b)gix merge tree to merge trees similarly to git merge-tree. (84707c2)80e006b)
</details>topo more similar to Ancestors, but also rename Ancestors to Simplecommit::ancestors to be more consistent with other plumbing crates.
This makes sure that each time is reached by only a single path.State as ultimately,this capability
wasn't all that useful.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
1f6c8ab)095c673)5755271)u8 for WalkFlags in the hopes that this can save memory. (a5751bc)55f379b)f72ecce)b590a9d)topo more similar to Ancestors, but also rename Ancestors to Simple (2a9c178)commit::ancestors to be more consistent with other plumbing crates. (3f938fa)ee13bdb)e0969c3)25b3d23)5b3dfbb)ecc049c)
</details>support for listing worktrees with gix worktree list
<csr-id-28ac6572722f7ea31795dc0417521c70bcb6ec8f/> <csr-id-786bfec7c2cf25a68705b6ef09ba6390600742b8/>
<csr-id-c7213bcf2cf6be4058a78dbd86bbab4c5ad4afa7/> support for listing worktrees with gix worktree list
<csr-id-0c554e096cf2bf0a2bb91397143f524219693a3b/> add first 'debug' version of gix diff tree.
It's primarily meant to better understand gix blame.
<csr-id-9c8bc03de99e6494abd9755deef7e7be5577bce2/> add new gix cat command.
It only prints things without fuzz.
Inspired by https://youtu.be/JYH5ILv5g1g?si=bHLBPFJiZyRUTl6u&t=211.
<csr-id-3da2da9d7993adc16b19fc63e7524c768a6e2e7f/> add gix merge-file with similar features as git merge-file
<csr-id-7249291016253647c920852fb37eb9e29d615775/> gix merge-base for the CLI
For now it only supports the standard merge-base, but more derivatives
can be added easily on demand.
gix clean warning and help for worktree fixgit clean options
-r/--repositories and --skip-hidden-repositories to make it
clearer what their relationship is, avoid creating the false
impression that repositories are never deleted in the absence of
-r/--repositories, and note that --skip-hidden-repositories
is sometimes needed to preserve not only separate repositories but
the (probably rarer) case of hidden nested worktrees of the current
repository.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
gix commit-graph is (49bca2a)48aa74b)0bebe52)f186c23)6777ecb)gix diff tree. (0c554e0)31bdd2e)gix cat command. (9c8bc03)5ffccd2)gix merge-file with similar features as git merge-file (3da2da9)e0b09d2)d69c617)649f588)gix merge-base for the CLI (7249291)beba720)f992fb7)ec69c88)472fe5f)786bfec)25a3f1b)b31d6b7)5871fb1)time to jiff (28ac657)a9aac4f)gix clean warning and help for worktree fix (6eb4ea6)c241422)33eacfb)gix worktree list (c7213bc)
</details>A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
b050327)52c3bbd)3e5c974)f8ce3d0)
</details>preserve allocation failure sources
preserve allocation failure sources
rubberstamp
Keep the original TryReserveError inside the OutOfMemory I/O error so structured classification can distinguish allocator failure without treating malformed stream metadata as corruption.
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.
<csr-id-202f3e48a96b38d32b11d28449358c7d1f3546ff/>
mailmap check similar to git check-mailmap.
That way it becomes a little easier to maybe try out other special cases
in the wild.gix clone with --ref support.
--ref is similar to --branch, but was renamed as it also supports
tags for example.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 1 time to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
f107014)mailmap check (3e08fa3)mailmap check similar to git check-mailmap. (2a56387)9fa1054)ecfde07)gix clone with --ref support. (9bf01e4)2f9f0ac)acc1331)bb30e52)bf5a111)src/plumbing/main.rs (4596a39)0b5dc74)202f3e4)
</details>A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
eb6aa8f)6a2e0be)
</details>A maintenance release without user-facing changes.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
3 commits contributed to the release over the course of 1 calendar day.
<csr-id-3bd09ef120945a9669321ea856db4079a5dab930/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
972241f)8c492d7)rust-version manifest field back to 1.65. (3bd09ef)
</details>6 commits contributed to the release over the course of 30 calendar days.
Store::at() where possible (17fea2a)<csr-id-886d6b58e4612ac21cc660ea4ddf1dd0b49d1c6e/> checkout respects options for core.protectHFS and core.protectNTFS.
This also adds gitoxide.core.protectWindows as a way to enforce
additional restrictions that are usually only available on Windows.
Note that core.protectNFS is always enabled by default, just like
it is in Git.
<csr-id-addf446f052ff74edcdb083f2b2968b313daa940/> more robustness in the face of a trampling-herd of threads loading a single index. The motivating example is here: https://github.com/praetorian-inc/noseyparker/issues/179
Previously, it was possible for a trampling herd of threads to consolidate the disk state. Most of them would be 'needs-init' threads which could notice that the initialization already happened, and just use that.
But a thread might be late for the party and somehow manages to not get any newly loaded index, and thus tries to consolidate with what's on disk again. Then it would again determine no change, and return nothing, causing the caller to abort and not find objects it should find because it wouldn't see the index that it should have seen.
The reason the thread got into this mess is that the 'is-load-ongoing' flagging was racy itself, so it would not wait for ongoing loads and just conclude nothing happened. An extra delay (by yielding) now assures it either seees the loading state and waits for it, sees the newly loaded indices.
Note that this issue can be reproduced with:
'./target/release/gix -r repo-with-one-pack -t10 --trace odb stats --extra-header-lookup'
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
d6cd449)79dce79)core.protectHFS and core.protectNTFS. (886d6b5)f3d5a69)04ef31e)addf446)
</details><csr-id-aea89c3ad52f1a800abb620e9a4701bdf904ff7d/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
e1aae19)e78a92b)4454c9d)aea89c3)1691ba6)7549559)35439de)
</details>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 t
migrate errors to gix-error
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.
<csr-id-84c74ffa698d35f8395c63db6acd3d0e6700d07f/> add gix status --ignored support
<csr-id-66e87cd31c060c3f97ac685ee0541c408f600362/> add gix status --index-worktree-renames
This enables rename-tracking between worktree and index, something
that Git also doesn't do or doesn't do by default.
It is, however, available in git2.
<csr-id-61c002bc4ca5b5345c411e561fdcb492e7ae1d97/> gix status with submodule and rewrite support.
Submodule changes are now picked up as long as the submodule is
in the index.
Further, it's possible to enable rename-tracking between
index and worktree separately.
<csr-id-98b368095ec99d1bc287da7f9294a9fce424deed/> add gix is-clean|is-changed
It's a good way to compare the time it takes to run a full status
compared to a quick is-dirty check.
<csr-id-afd20caadb40b6b793f2099b7232669f9a8f9086/> gix submodules list --dirty-suffix for dirty-information
This is a submodule-centric and greatly simplified way of obtaining
describe information with dirty-suffix.
Note that status information is also possible, but it seems
hard to display nicely, which this command isn't great at
in the first place.
<csr-id-58231b418fa39ea122ef41bb7691289f5b0be855/> add gix commit describe --dirty-suffix
That way a suffix will be added depending on the dirty-state of the repository.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
55f379b)f72ecce)3e5c974)gix status --format to communicate the current format is very simple. (23bea36)gix status --ignored support (84c74ff)gix status --index-worktree-renames (66e87cd)f8ce3d0)gix status with submodule and rewrite support. (61c002b)gix is-clean|is-changed (98b3680)gix submodules list --dirty-suffix for dirty-information (afd20ca)gix commit describe --dirty-suffix (58231b4)
</details>gix-object::Find trait<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
55d386a)d3dcbe5)ff99a18)gix-object (203d69c)c8bd660)gix-object::Find trait (806ea47)gix_object and gix_odb. (24e319e)c0e72fb)b65a80b)
</details>add gix clean --patterns-for-entries|-m to help with wildcards.
gix clean --patterns-for-entries|-m to help with wildcards.gix clean<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
d53504a)-n argument as no-op to make them more compatible. (8959b21)gix clean --patterns-for-entries|-m to help with wildcards. (9863d75)ed79aa7)e25d7eb)cebeedf)454e6b9)4ac597a)4fd6ab8)abe0043)c0c4d59)cc8d008)1ecc96d)fcd585b)face359)gix clean (e8597f3)d4d478b)2482023)39f35da)3ef3bc2)
</details>A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
68e5432)1347a54)995bc84)
</details>Add rev parse --reference. It's similar to git rev-parse --symbolic-full-name.
rev parse --reference.
It's similar to git rev-parse --symbolic-full-name.<csr-id-59b8104a5320d946abc9f5736fa76696cef1459d/> mark gix::interrupt::init_handler() as unsafe
The passed interrupt() argument will be called from a signal
handler, so that needs to be documented and the call sites need to
state that they fulfill the contract.
Thanks to @Manishearth for pointing this out.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
4454c9d)a78caba)0fe20e8)rev parse --reference. (193ffcd)1691ba6)4917beb)gix::interrupt::init_handler() as unsafe (59b8104)
</details>A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
7891fb1)8a60d5b)
</details>gix rev parse --format to provide different versions of the same content. This only applies to blobs, but allows to obtain different versions of the s
<csr-id-4aea9b097fb08e504cdfc4a7c3b7511a308dc074/> <csr-id-c6e83cf69f1a17e9ba3010bcce3a4ddd3305424c/> <csr-id-8f795e8abf706a24fe104500bf15efaa2bc07b15/> <csr-id-8dfbb4ba531d86894a59e2b85ec29cd3133c8c4d/> <csr-id-f9ae1bc6b514b6bbcda2c672f7b7ccbd999356a0/> <csr-id-886289f98003f935d774a40f6db746ae70649936/>
<csr-id-cf51a4de2d06eb28435ef8e386131710003b6928/> gix rev parse --format to provide different versions of the same content.
This only applies to blobs, but allows to obtain different versions of the same blob
like:
--trace mode, greatly increase message-buffer size.
That way, it's much less likely that messages will get lost
due to being overwritten before they can be displayed every
100ms or so.GITOXIDE_* environment variables to GIX_#<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
8156340)GITOXIDE_* environment variables to GIX_# (2189cee)5fdc9df)gix rev parse --format to provide different versions of the same content. (cf51a4d)51c7abc)dfb3f18)gix-diff (1706e23)diff::resource_cache() low-level utility for rapid in-memory diffing of combinations of resources. (4aea9b0)5ce9784)c6e83cf)5a0d93e)be1fa2f)bb3224c)1f9aca5)fsck connectivity into just fsck much like git fsck (7ab5c76)7a88b42)8f795e8)48ef17e)--tree-style raw. (8dfbb4b)e7de4c7)-c options are given on the command-line. (f9ae1bc)--trace mode, greatly increase message-buffer size. (b230078)16170d9)gix free discover to inform about repository discovery. (886289f)fb81093)7f2bc08)eab22bd)
</details>dyn trait where possible.
This reduces compile time due to avoiding duplication.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
8bd0456)375db06)dynification (f658fcc)dyn trait where possible. (072ee32)363ee77)
</details>This release includes an overhaul of the url parsing implementation, allowing more urls to be parsed correctly and refining the error messages for inv
This release includes an overhaul of the url parsing implementation, allowing more urls to be parsed correctly and refining the error messages for
invalid ones. Improvements include the added support for ssh aliases (github:byron/gitoxide has previously been parsed as local path), adjustments
around the interpretation of colons in file names (previously we disallowed colons that were not followed up with a slash character) and some smaller
changes that bring the interpretation of file urls more in line with Git's implementation.
There are still many (edge) cases in Git's url parsing implementation which are not handled correctly by Gitoxide. If you notice any such deviation please open a new issue to help us making Gitoxide even more correct.
gix status auto-writes changed indices.
This prevents expensive operations to re-occour.gix status -s/--statistics to obtain additional information on what happened.
This is useful for understanding performance characteristics in detail.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
681c607)fdd2df8)215c3ac)70923a0)b842691)f929d42)gix status auto-writes changed indices. (46e5919)gix status -s/--statistics to obtain additional information on what happened. (7ba2fa1)
</details><csr-id-229bd4899213f749a7cc124aa2b82a1368fba40f/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
30b2761)f23ea88)8f3f358)73c685a)229bd48)4604f83)6b4a303)ef8ccd9)
</details>A maintenance release without user-facing changes.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
16295b5)c4cc5f2)5cb3589)2fc66b5)9064ea3)
</details>This release contains a security fix which assure URLs like 'ssh://-oProxyCommand=open$IFS-aCalculator/foo' will not execute attacker-controlled strin…
<csr-id-d3ac691446c9d029eb4f04d111887fa06720939d/> <csr-id-ed327f6163f54756e58c20f86a563a97efb256ca/>
This release contains a security fix which assure URLs like 'ssh://-oProxyCommand=open$IFS-aCalculator/foo' will not execute attacker-controlled
strings. The above can, on MacOS, launch the calculator app when using it with gix clone for example, up to v0.29.0.
gix status with basic index-worktree comparisongix free index from-list and gix index from-tree gain --skip-hash.
This flag can be derived from options, but thus far we have no higher-level
writing of the index so this has to do to see the difference in performance.dyn trait where possible.
This reduces compile time due to avoiding duplication.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 1 time to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
4ef9a32)ein and gix now share some code via the gitoxide library. (d3ac691)54a8495)gix status with basic index-worktree comparison (f094f71)dynification (f658fcc)dyn trait where possible. (072ee32)prodash (ed327f6)b7560a2)4bfd1cc)0d6d4ec)gix-index and pass skip-hash through for performance.. (713cd59)gix free index from-list and gix index from-tree gain --skip-hash. (3ff5ac0)index.skipHash (773b6e3)
</details>A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
4aca8c2)68ae3ff)c70e54f)e4dded0)
</details>gix submodule subcommand for simple submodule listing and information retrieval
gix submodule subcommand for simple submodule listing and information retrievalgix index entries --recurse-subomdules to also list submodules.gix index entries with styles and pathspecs.
This adds support for more simple git style, which is faster and thus
allows for more direct comparisons to git ls-files.gix commit verify-signature to do something akin to git ... --show-signature.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
8f3f358)gix submodule subcommand for simple submodule listing and information retrieval (1ccbe16)0d258f4)36f7b78)gix index entries --recurse-subomdules to also list submodules. (6bc69e3)a3afaa4)gix (ca972a2)Defaults::from_environment() when parsing pathspecs. (2a99034)gix index entries (22477bd)9f4dfe0)gix index entries with styles and pathspecs. (c30ac0c)f194cfc)f584d76)gix (a201f0d)b37affe)gix commit verify-signature to do something akin to git ... --show-signature. (cd6cfe4)c7d9129)gix-archive (feba76d)b629f8a).gitmodule file abstraction (6a2e6a4)
</details><csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
27e8c18)00f96fb)b407461)gix-date (fba45c6)9cfc4aa)
</details>8 commits contributed to the release over the course of 29 calendar days.
gix archive<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
1dda48b)4a9d0f1)gix archive, which is where it should shine. (567b1a4)gix archive (32bbb8b)b19a56d)3fbd7b0)3fd5e16)fa04378)
</details>commit::Sorting::ByCommitTimeNewestFirstCutoffOlderThan {time_in_seconds_since_epoch} to seconds.
This is possible now that there is a type for the time with that name.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
ea9f942)18b0a37)just fmt (871dd0b)aa16c8c)4f635fc)8d2e6a9)commit::Sorting::ByCommitTimeNewestFirstCutoffOlderThan {time_in_seconds_since_epoch} to seconds. (e4e8ddc)gix-actor (4a80e86)gix-date (d575336)
</details>This release fixes a possibility for V1 fetches to deadlock if negotiation would span multiple rounds (see issue #882) for details.
<csr-id-bcad5c22049d56a25ef69d6c7a3344e78f9a1d4d/>
This release fixes a possibility for V1 fetches to deadlock if negotiation would span multiple rounds (see issue #882) for details.
gix level.
This is merely a debug tool to learn about generation numbers.
All commit-graph commands now operate on a repository.<csr-id-c494cfd6f80cf273107c626d0f2cbe054db378ee/> gix --trace to also print tree-like instrumentation
<csr-id-452ed6b79ed0e12ae214af3c8cd49a87dba91c73/> gix fetch --open-negotiation-graph[=limit]
Open the negotiation graph as SVG, after optionally specifying a limit
as rendering/layouting can be very slow.
It's useful to see how the negotiation algorithm is reasoning about each commit.
<csr-id-096838ffa529148b2da3a2382a2d1fdbfe5bee5b/> gix fetch --negotiation-info to provide additional information about the negotiation phase.
<csr-id-bd32e393fedd01e27a4f6984281bcc3182c63b67/> bit revision list --svg to create a visual graph of commits.
It's mainly a test of how well layout-rs performs.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 1 time to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
gitoxide publishable again (c16b1df)5861afb)corpus --dry-run and --task-sql-suffix and --repo-sql-suffix (4cef57d)0f973ac)gix-trace (bd6e3d7)aa16c8c)361cf96)gix --trace to also print tree-like instrumentation (c494cfd)cfd8e88)a0b4385)a4300c8)fcbda1d)gitoxide version according to what's in git (83f6466)d9e74ff)036e60a)gix fetch --open-negotiation-graph[=limit] (452ed6b)gix fetch --negotiation-info to provide additional information about the negotiation phase. (096838f)gix docs available when using cargo doc (518159d)bit revision list --svg to create a visual graph of commits. (bd32e39)fe59956)2213321)ff8d42a)750b07a)clippy::redundant-closure-for-method-calls lint (bcad5c2)8d2e6a9)gix level. (b82edc8)gix config tree (7aaaebf)
</details>commit::Ancestors::with_commit_graph(graph) to set and use a commitgraph.
That way, traversal speed is greatly improved for traversals that only need
access to parents and commit time, while still being more efficient if it
saves the caller to retrieve a commit again to parse it for parents.<csr-id-8d7b62736848841e0577aa0498eb39aec492a2fa/> gix_traverse::commit::Ancestors now returns rich commit information.
As part of the iteration, it will decode part of the commit and read parents and possibly
the commit time if time-based sorting is desired. These values will now be made available
instead of just the id of the commit.
This saves the caller time to parse the commit again in case it needs similar information.
<csr-id-affc9df48e7b7540a95e2d6024f05b391f38c8f0/> previously the commit-traversal sorted by date must have been wonky & rename Sorting::Topological to Sorting::BreadthFirst.
This is now fixed by using a proven data structure, the BinaryHeap as priority
queue.
The rename is to differentiate git log --topo-order from what we are doing, which is actually quite
different.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
2560a2c)298f3d7)fdee9a2)commit::Ancestors::with_commit_graph(graph) to set and use a commitgraph. (6c5c66e)Sorting::Topological to Sorting::BreadthFirst. (affc9df)gix_traverse::commit::Ancestors now returns rich commit information. (8d7b627)
</details>The main attraction of this release is support for multi-round negotiations thanks to support for the standard negotiations algorithms. Further, gix i
The main attraction of this release is support for multi-round negotiations thanks to support for the standard negotiations algorithms.
Further, gix index entries now lists attributes as well, and there is the new gix attribute query sub-command in the vain of git check-attrs.
gix attributes validate to validate attributes and ignore against git as baseline.
Use this command to test the entire index for ignored paths and their attributes and use
git check-attr and git check-ignore to validate that git agrees. Collect all
mismatches and print them.--statistics for gix excludes query
With it one gets some insights into the work done to fulfil the query.gix attribute query as something similar to git check-attrs.no-repo index from-list to create an index with empty files from the given list.
The list could be created with find . -type f for example.gitoxide on docs.rs<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
just fmt (ffc1276)ae845de)gix (7983f6f)d925896)dbf8aa1)b057500)4507f94)33b7770)a849da8)gix attributes validate to validate attributes and ignore against git as baseline. (e1fcc7f)1d70213)--statistics for gix excludes query (450b232)gix attribute query as something similar to git check-attrs. (bfdcb14)no-repo index from-list to create an index with empty files from the given list. (b8db207)edeb4de)gitoxide on docs.rs (13a0f1e)jwalk to have a better comparison. (d67551d)
</details>A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
9a9fa96)8f15cec)67da689)0269eed)420553a)2578e57)dbf8aa1)3ef5c90)3eff567)9375cd7)facaaf6)4f879bf)
</details>A maintenance release without user-facing changes, just to fix installation
A maintenance release without user-facing changes, just to fix installation
Debug for commit::Sorting.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 1 time to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
Debug for commit::Sorting. (a70085e)91134a1)30a1a71)6ebd61e)14e64e7)8dbd0a6)b574a39)a884121)
</details>gix index entries also prints attributes.
gix index entries also prints attributes.gix clone and gix fetch with controls for shallow repositories.ein t trace-path know accepts the trace-file alias.stdout on each write, now this is done only once.gix free index entries into gix index entries.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
ed63ec0)7bd8823)f37a930)gix index entries also prints attributes. (08e8fc2)dd14a80)gix free index entries into gix index entries. (ca8ebdf)3456c84)gix-worktree (13a070f)69faad0)8d5762c)23ee47f)3d47919)9237121)ee36e5b)bbb4cb0)index.skipHash (f29f35c)3836cc0)cc0f506)c502fa8)531dd19)gix clone and gix fetch with controls for shallow repositories. (9723e1a)ein t query (d5616b6)8ef1cb2)3827ac6)ein t trace-path know accepts the trace-file alias. (f93e964)
</details>A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
This release adds the new ein tool query analytics engine, which maintains a database of a git repository as acceleration data structure to run useful
This release adds the new ein tool query analytics engine, which maintains a database of a git repository as acceleration data structure to run useful queries on.
It's nothing more than an MVP, and was inspired by a program to accelerate Git-Heat-Map.
ein tool query - a git analytics engine.
A tool to build and efficiently maintain a database of information contained
in a git repository, preferably the kind of information that is expensive to obtain,
in order to facilitate queries that would be prohibitive without an accelerating
data structure.gix tree entries with rev-spec support.
Previously it wanted a tree-id, now it can derive it itself.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
ea9fd1d)e6cc618)addd789)94c99c7)8ef1cb2)
</details>add tree::Recorder::path_clone() and tree::Recorder::track_filename() builder method. That way, the recorder can be used in other applications to keep
tree::Recorder::path_clone() and tree::Recorder::track_filename() builder method.
That way, the recorder can be used in other applications to keep track of the full
path or the filename.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
2 commits contributed to the release over the course of 30 calendar days.
time improved the way one can opt-in to potential unsoundness
in their local time support, forcing the application to make that
decision at runtime.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
73372d0)
</details><csr-id-ebc7f47708a63c3df4415ba0e702660d976dfb3e/> <csr-id-2290d006705ff47ad780b009fe58ee422b3285af/> <csr-id-2f2d856efe733d3cf81110c0e0607d2e7c40d968/> <csr-id-1d5ab44145ccbc2064ee8cc7acebb62db82c45aa/> <csr-id-7bce49c1d27cb279b61ff51de0038e01fcf3561e/> <csr-id-cbc5b8171cdef5933d684c481300d9fcff43cf4b/> <csr-id-329d183ad4e256a4f9cdeb34589b5f3432495f79/> <csr-id-f7f136dbe4f86e7dee1d54835c420ec07c96cd78/> <csr-id-533e887e80c5f7ede8392884562e1c5ba56fb9a8/>
<csr-id-dcdf6573a90c7f9a6855aa7be8bf707b92b73ecf/> commit traversal now sorts by commit-time more thoroughly Previously the sorting was only partial as it was only among parents. Now it is full and among all currently visible commits.
That way it is similar to what git log would produce.
<csr-id-3d8fa8fef9800b1576beab8a5bc39b821157a5ed/> upgrade edition to 2021 in most crates. MSRV for this is 1.56, and we are now at 1.60 so should be compatible. This isn't more than a patch release as it should break nobody who is adhering to the MSRV, but let's be careful and mark it breaking.
Note that git-features and git-pack are still on edition 2018
as they make use of a workaround to support (safe) mutable access
to non-overlapping entries in a slice which doesn't work anymore
in edition 2021.
<csr-id-83746f613a559a86a0ea81370fca3f094bc81e35/> require Ancestors traversal find() to return Result
Previously it would return an Option and squelch legitimate errors
which already let to quite a bug hunt.
Now find() should always return the original error when finding an
existing object, and keep it around in a Box.
That way we don't add yet another type parameter.
Performance implications are measurable, but marginable. The error type might be too big which is something we can indeed look at.
<csr-id-5cf9323dbe09789e806ed55d865281298af1a11b/> rename commit::Ancestors::mode() to *::parents()
The previous name was too generic to be helpful or discoverable.
<csr-id-86a99a90eb992322099a870fbba10dddbcb80e83/> add commit::Sorting::ByCommitTimeNewestFirstCutoffOlderThan(time).
It allows to stop traversals early if all commmits to be traversed are
older than a given time.
<csr-id-6b2af578fbff43999266c2af324070b013d1699f/> Make it possible to access the current commits buffer during commit ancestor iteration. This is useful to avoid additional lookups of the same object for reading additional data from it.
Currently one needs an object cache to avoid duplciate object extraction work, with such a cache being slower than accessing the same buffer again.
<csr-id-eb36a3dda83a46ad59078a904f4e277f298a24e1/> Add sorting mode to ancestor traversal #270
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
52b38bc)e695eda)0c81769)a517e39)145103d)4a9a05f)f536bad)a0bc98c)e1861ca)58ab2ae)c857d61)6b5c394)9d6f263)719b6bd)7bce49c)6776a3f)9498816)84cb256)rust-version to 1.64 (55066ce)8c0bca3)a5869e0)41d57b9)e313112)6efd0d3)6ccc88a)c9275b9)git-testtools to gix-testtools (b65c33d)git-pack to gix-pack (1ee81ad)git-odb to gix-odb (476e2ad)git-index to gix-index (86db5e0)git-diff to gix-diff (49a163e)git-commitgraph to gix-commitgraph (f1dd0a3)git-mailmap to gix-mailmap (2e28c56)git-discover to gix-discover (53adfe1)git-lfs to gix-lfs (b9225c8)git-chunk to gix-chunk (59194e3)git-bitmap to gix-bitmap (75f2a07)git-protocol to gix-protocol (823795a)git-refspec to gix-refspec (c958802)git-revision to gix-revision (ee0ee84)git-transport to gix-transport (b2ccf71)git-credentials to gix-credentials (6b18abc)git-prompt to gix-prompt (6a4654e)git-command to gix-command (d26b8e0)git-packetline to gix-packetline (5cbd22c)git-worktree to gix-worktree (73a1282)git-traverse to gix-traverse (1781b34)git-hashtable to gix-hashtable (26a0c98)git-worktree to gix-worktree (108bb1a)git-url to gix-url (b50817a)git-date to gix-date (9a79ff2)git-attributes to gix-attributes (4a8b3b8)git-quote to gix-quote (648025b)git-config to gix-config (3a861c8)git-ref to gix-ref (1f5f695)git-lock to gix-lock (2028e78)git-tempfile to gix-tempfile (b6cc3eb)git-object to gix-object (fc86a1e)git-actor to gix-actor (4dc9b44)git-validate to gix-validate (5e40ad0)git-hash to gix-hash (4a9d025)git-features to gix-features (e2dd68a)git-glob to gix-glob (35b2a3a)git-sec to gix-sec (eabbb92)git-path to gix-path (d3bbcfc)git-config-value to gix-config-value (622b3e1)c196d20)7c846d2)1e544e8)39ed9ed)1fea18f)0e3d0a5)d679f5b)5ac9fbe)30d8ca1)e6b9906)7114bbb)c57bdde)083909b)git-testtools (4eb842c)7717170)6b9632e)95ad56c)50cb436)269d59e)bcd9654)b2c301e)e4648f8)b755b5b)c0bfb42)0e4462d)3d8fa8f)104d922)d232567)702a161)53acf25)f47c891)0699c7e)25a7726)29a043b)1f6e5ab)5869e9f)da0716f)bc64b96)51dc828)2571831)fc6b958)34e899a)cef0b51)85a3bed)2ed0ee2)cfa1440)4974eca)e2ee3de)31c2351)f7f136d)533e887)bd5f3e8)c96473d)c06ae1c)232784a)2f506c7)ce885ad)9b9ea02)6da8250)7b61506)4e7b343)e9fcb70)aa639d8)4737b1e)3c50625)085e76b)a22b1d8)598c853)349c590)654cf39)0eb2372)350df01)b612021)e58dc30)f0cbb24)b2df941)77b7cd9)40c48c3)1b76119)8f57c29)d78aab7)373cbc8)8900d69)4624725)7d2e20c)03d0660)6add377)eb36a3d)1d5ab44)d3f9227)acd3737)ec38950)f606fa9)f69b2d6)39b40c8)0e02953)59ffbd9)a474395)21541b3)bf0106e)d39fabb)1fd56ff)d4fc81f)1d508f1)49f5453)6efd90d)ab6554b)54f3541)058f68a)70e11c2)e603306)45d3934)fa5cd06)07be661)iter adjustments (461dc53)6deb012)708fc5a)2d7956a)96461ac)4684f1c)5e0edba)fbf2157)c40faca)f123f69)c67291f)7006150)b327590)e21142b)c52a491)28e58f6)a5be31c)22337ce)7453184)7ee278b)ae02dab)a77a71c)a92f1e6)866f86f)aea6cc5)7e802a0)2958145)769c649)f0c0e36)721303d)ea224e9)6a1b16a)966f058)6688073)f057aa9)5d7ee6a)f343dad)087e853)323d92f)85de287)e21f54f)684de4b)e415c5a)ecd37ee)d91b241)3fb8377)84897fd)aa6c9e6)db21062)c977eb5)f66ccd3)f7eb355)f0aeee1)3f9ee23)7d389c8)18ae6bd)6447661)cceff1c)d9514ee)60f72f5](https://Your coding agent can read these notes before it upgrades. Set up the MCP server →