NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #1370 most downloaded on crates.io
Implements various git object databases
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 50 of 53 stable releases
1 version withdrawn
withdrawn after publishing
4 years old
54 releases · first in 2023
One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
implement Write::*_with_known_id()
Write::*_with_known_id()<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
6428edc)e68a251)9bb9736)c67345e)a868fcd)c0794db)d1a055c)155ff6d)9402adc)69caccd)Write::*_with_known_id() (a7f0645)f7d4f33)
</details>20 commits contributed to the release over the course of 28 calendar days.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
10c58bb)575113d)1bc4ce3)gix-testtools (ce9e6bd)278d7ec)justfile and automate feature tests (db7b97b)sha1 and sha256 forwardings for all crates (09b982c)4743361)1980190)e3d5a04)ab2fee1)2cb17b2)e10d5f6)3675a8d)3af9b4a)d3e4c17)23af41a)gix_object::Data (4309fa4)78b7fdf)adb8328)
</details>3 commits contributed to the release over the course of 2 calendar days.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
53f880c)can't connect to localhost in journey tests (09687eb)4d5ba23)
</details>enforce the specification of alloc_init_bytes to handle untrusted input This breaking change is intended to force a decision about how much memory all…
alloc_init_bytes to handle untrusted input
This breaking change is intended to force a decision about how
much memory allocation an untrusted party can command by tempering
with binary file formats.alloc_limit_bytes option
This is passed to packs and indices, to prevent them from
trying to allocate too much memory in intrusted input.<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)63b8419)7429b15)alloc_init_bytes to handle untrusted input (91d0c26)9b57db2)alloc_limit_bytes option (5aea8ec)02e420b)7d50c30)d9b358b)gix-object (6df1d55)2a5db88)e4f380e)444a92b)package.include patterns more specific so they don't match ignored files (c2c917f)44020e0)9d04035)29c275e)b1102c2)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>4 commits contributed to the release over the course of 10 calendar days.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
ecf90fc)29040a8)993d377)9327b73)
</details>4 commits contributed to the release over the course of 19 calendar days.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
d66ac10)8bceefb)7ce3c55)f7d0975)
</details>10 commits contributed to the release over the course of 21 calendar days.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
cbbdef5)a5225a7)562e684)fa302a1)0a333e5)c663b3f)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>expose raw commit/tag actor headers for round-tripping. Note that this means you have to call CommitRef::commiter|author()? and TagRef::tagger()? inst
<csr-id-1955b5b1a436518c036cfc9bf642170f9c7b6540/> expose raw commit/tag actor headers for round-tripping.
Note that this means you have to call CommitRef::commiter|author()? and TagRef::tagger()? instead
of assuming pre-parsed fields.
This PR makes signature handling truly lossless for "creative" emails and other info. We now stash the raw name <email> slice on IdentityRef/SignatureRef and fall back to it when rewriting, so even commits with embedded angle brackets round-trip cleanly (might want to expand to other malformed characters before merging? Parsing and serialization honor that flag but still keep strict validation for normal input. I also added regression coverage for these scenarios.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
21fecdf)f471ac5)1955b5b)
</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)fbf9c39)
</details>3 commits contributed to the release over the course of 1 calendar day.
<csr-id-6f469a6fea59c88e6c69a5f94b0bc8a5977cb75b/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
bdcce5f)doc_auto_cfg feature to fix docs.rs documentation. (6f469a6)3313233)
</details>16 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>
49f8d53)89fb308)4da2927)b188a7d)6cc8464)9365cc3)838ff95)dc7343c)79ba9d0)651f9fa)4289ae6)202bc6d)d64f257)589d63e)007e3f6)784c046)
</details>improve error message for when there is too many packs. Affects https://github.com/jj-vcs/jj/issues/6906
<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>
5a919c4)65037b5)a773854)dd5f0a4)554ce13)f8d7c0a)151e3a5)c3f06ae)d2b4c44)28935a5)dbf65c9)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>Adapt to changes in gix-actor Use the committer date and author date that are now backed by bytes and interpret these bytes into a gix_date::Time on d
gix_date::Time on demand.<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>
cc5b696)49fa9f3)db0b095)0bf84db)3b1bef7)c3c6504)6f009d7)gix-date and gix-actor (afdf1a5)b07f907)cd1a777)5fd0ab9)5823b22)Cargo.toml files in workspace to gix-features bump (6315536)b5e9059)68e6b2e)79dabb0)1792178)1612c73)fc5faf2)420e730)
</details>adjust error return types to handle collision detection This does mean a lot of churn across the tree, but the change is usually just an adjustment to
git_hash::verify::Error instead of bespoke duplicated versions
thereof, and occasionally returning an ObjectId instead of ()
for convenience.<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>
d248e3d)ada5a94)b41312b)38dff41)4660f7a)4501086)gix_object::{try_ =>}compute_hash users (3d7e379)fbf6cc8)5095f44)4f2b649)54e5764)gix_hash::Hasher::finalize() (4e935ce)gix_hash (baa1430)16a248b)8e96ed3)8df0db2)
</details>improve handling of overflows when there are more pack than we can hold. Internally, there is a statically allocated vec which holds opened packs and
<csr-id-17835bccb066bbc47cc137e8ec5d9fe7d5665af0/>
<csr-id-724601d474ce4acd30ee482e77fd96be2fe3425b/> improve handling of overflows when there are more pack than we can hold. Internally, there is a statically allocated vec which holds opened packs and indices. When reconciling the disk-state with what's currently loaded, it was possible to get into a situation where there were more files than we could fit into the slotmap and got into an invalid state.
The system now generously trashes existing slots to be able to load more rencent ones, which seems to help in this situation. It's probably still leading to strange situations where not all objects can be read.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
dea106a)1f6390c)e4fb21e)724601d)7ec21bb)rust-version to 1.70 (17835bc)0ab4f64)gix-hash (201e853)d22937f)
</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>
beb0ea8)c1ba571)7ea8582)e8b3b41)
</details>move gix-odb::Write trait to gix-object::Write. There it's far more useful and plumbing crates are enabled to write objects without pulling in gix-odb
gix-odb::Write trait to gix-object::Write.
There it's far more useful and plumbing crates are enabled to write
objects without pulling in gix-odb as dependency.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
4000197)8ce4912)bc9d994)7a40648)0f0e4fe)3fb989b)gix-object and gix-odb (96488f7)gix-odb::Write trait to gix-object::Write. (7325c58)db5c9cf)
</details>add InMemoryPassThrough implementation. An implementation of Header, Write and Find, that can optionally write everything to an in-memory store, and i
<csr-id-64ff0a77062d35add1a2dd422bb61075647d1a36/>
<csr-id-ca5294af0971da372c5d5a5c7a569810dd53de93/> add InMemoryPassThrough implementation.
An implementation of Header, Write and Find, that can optionally
write everything to an in-memory store, and if enabled, also read
objects back from there.
That way it can present a consistent view to objects from two locations.
<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>
f1364dc)3f7e8ee)795962b)64ff0a7)37c1e4c)af03832)f35b109)gix-object (528f549)93e86f1)012a754)d69c617)InMemoryPassThrough implementation. (ca5294a)649f588)beba720)37ba461)2e0ce50)c3a7dcf)29ad2df)f992fb7)ec69c88)
</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>
b3ff033)209b6de)
</details>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.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
4fe330e)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/>
Clippy helped 1 time to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
6232824)a1b73a6)0470df3)99c00cc)15f1cf7)bf3d82a)7330844)a4bb7b9)8d89b86)c1d7c02)1dfa90d)tar files (dcab79a)9fa1054)ecfde07)f36b9bd)2f9f0ac)ca31249)9c65d98)ea12fc2)68cbea8)2cefe77)
</details>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/n
<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-id-7b3dc92d04e5240a7bdbcdaa4019ac93cec6eaa3/> use tempfile permissions support to set the correct mode on unix.
Previousoly it would make an additional syscall to change permissions, which
is slower than necessary.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
4f98e94)9511416)d3588ca)04ef31e)gix-pack (bad5b48)addf446)tempfile permissions support to set the correct mode on unix. (7b3dc92)
</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>
095c673)5755271)
</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)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>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.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
45b4470)f2e111f)7b44c7f)8430442)b8cba96)
</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.
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)5d176fc)gix_fs::current_dir(precompose_unicode). (7d8d167)gix-features (eacb5a4)b6c04c8)39f35da)3ef3bc2)
</details>3 commits contributed to the release.
<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>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)<csr-id-aea89c3ad52f1a800abb620e9a4701bdf904ff7d/>
<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>
e1aae19)e78a92b)4454c9d)aea89c3)d38d1cc)1691ba6)7549559)35439de)98b08f4)
</details>Remove Find trait (as it's now living in gix-odb) This makes it easier to access objects via trait from other crates without having to pull in all of
Find trait (as it's now living in gix-odb)
This makes it easier to access objects via trait from other crates
without having to pull in all of gix-odb.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
d3fd11e)55d386a)d3dcbe5)51c7abc)dfb3f18)gix-object (Find::try_header()) (336d161)5a0d93e)bb3224c)ff99a18)gix-object (203d69c)c8bd660)gix-pack (40e7440)Find trait (as it's now living in gix-odb) (fad2982)c0e72fb)b65a80b)
</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>A maintenance release without user-facing changes.
<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>
68e5432)1347a54)995bc84)345712d)b842691)gix-object (ffcb110)
</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>
7891fb1)8a60d5b)
</details>use dyn trait where possible. This reduces compile time due to avoiding duplication.
<csr-id-ed327f6163f54756e58c20f86a563a97efb256ca/>
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>
8bd0456)375db06)6135a5e)gix-pack (6b27ffa)dynification (f658fcc)dyn trait where possible. (072ee32)prodash (ed327f6)9ad9c5b)gix-pack (46a4d4d)b7560a2)3be2b1c)5044c3b)363ee77)
</details>9 commits contributed to the release over the course of 18 calendar days.
<csr-id-01c6ef62e260246f1623bdf05f49c03eff14ac69/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
6c62e74)30b2761)e80ed04)f23ea88)8f3f358)01c6ef6)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>
231ac1c)db63815)e4d2890)f8b1f55)090357e)
</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>
0062971)107a64e)16295b5)c4cc5f2)5cb3589)2fc66b5)9064ea3)
</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>
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>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>
69c6a36)c143cf4)gix-path across all crates (73c1292)
</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>
27e8c18)00f96fb)
</details>provide basic tracing spans for common operations. This is just the beginning and more crates will integrate with it over time.
<csr-id-bcad5c22049d56a25ef69d6c7a3344e78f9a1d4d/>
tracing spans for common operations.
This is just the beginning and more crates will integrate with it over time.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
ea9f942)18b0a37)just fmt (871dd0b)5861afb)891a061)aa16c8c)4f635fc)tracing spans for common operations. (3cffa26)fe59956)clippy::redundant-closure-for-method-calls lint (bcad5c2)8d2e6a9)gix-actor (4a80e86)gix-date (d575336)
</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>
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
2560a2c)298f3d7)
</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>Store::alternate_db_paths().
Provides a way to learn about loose database paths that are provided by
git alternates.Clone for Sink.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
9a9fa96)8f15cec)ae845de)Store::alternate_db_paths(). (8c72a23)420553a)2578e57)150463c)dbf8aa1)2087032)3ef5c90)3eff567)9375cd7)b057500)facaaf6)2f275d5)Clone for Sink. (3db18c4)4f879bf)
</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>A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
7ebc9f7)0135158)43ebaf2)
</details>set permissions of newly written loose objects to be similar to git. Note that the current implementation lacks all of the sophistication that git app
<csr-id-07e11cf210682337f777f1cbbc0d25794c1179ca/> set permissions of newly written loose objects to be similar to git.
Note that the current implementation lacks all of the sophistication that git
applies, and doing this properly definitely takes more work as we would need
to support core.sharedRepository.
Further, our tempfile implementation doesn't allow the setup of file modes right when it matters, so that could mean quite some work to either workaround or contribute.
<csr-id-416ceccf7eaf1946efed5a2c95461a2690ae367a/> collisions of newly written object's don't trigger collisions anymore. It's solved by special-casing windows and assume that certain kinds of filesystem errors are the result of a collision (with some degree of concurrency/contention).
<csr-id-b83ee366a3c65c717beb587ad809268f1c54b8ad/> Rename serde1 cargo feature to serde and use the weak-deps cargo capability.
With it it's possible to not automatically declare all optional dependencies externally visible
features, and thus re-use feature names that oterwise are also a crate name.
Previously I thought that serde1 is for future-proofing and supporting multiple serde versions
at the same time. However, it's most definitely a burden I wouldn't want anyway, so using
serde seems to be the way to go into the future.
<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>
serde1 cargo feature to serde and use the weak-deps cargo capability. (b83ee36)416cecc)d7173b2)e4df557)91134a1)30a1a71)6ebd61e)14e64e7)69faad0)git. (07e11cf)sink module non-public. (45a0ac1)8dbd0a6)cdef398)19338d9)b574a39)
</details>3 commits contributed to the release.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
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>
29a0870)e06f5f5)
</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>A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
93e75fe)895e482)0f411e9)
</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><csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
ea9fd1d)e6cc618)addd789)94c99c7)d686d94)num_cpus dependency in favor of std::thread::available_parallelism() (9567102)56c005b)
</details>Allow 'refactor' and 'other' in conventional messages if they have breaking changes (`4eebaac`)
<csr-id-ebc7f47708a63c3df4415ba0e702660d976dfb3e/> <csr-id-2290d006705ff47ad780b009fe58ee422b3285af/> <csr-id-598698b88c194bc0e6ef69539f9fa7246ebfab70/> <csr-id-46636e64c9a48ec0e85e014ac0cc8b48846d8462/> <csr-id-e0b8636f96e4bfe1bc72b5aa6ad4c4c8538ff92c/> <csr-id-5d57c1f7e3b9a84f7b46a4378015572155f3104b/> <csr-id-47ca6ab2ff0cbf8801d0a82cebbbeb8c4f62cdae/> <csr-id-2d6960f886c1165f0bdb6f2d653388e1e0b57a2d/> <csr-id-424c9b3a2b467f5a1e339700257cd4ab72e2e692/> <csr-id-b1c82a7959fba1541642fc8dfae46b27848f2ba3/> <csr-id-9235106986e14551a28693bfe4ea92f046c65406/> <csr-id-747a13e9a1fe5200c53055dd961507c9fef667e1/> <csr-id-4c77e4c97641ab3b02b56aaa702a7d2ca5bced7c/> <csr-id-d53c4b0f91f1b29769c9430f2d1c0bcab1170c75/> <csr-id-b317200b72096573d511d229c6e61e74e7ba14db/> <csr-id-eaae9c1bc723209d793eb93f5587fa2604d5cd92/> <csr-id-13159eb972ed78ce4ebee2313b288023cec91c47/> <csr-id-0092c256b3bfaf2818566540e660cdefcf68d246/> <csr-id-9945eba749afb020e0deaaa5bb01fda6ff9ccd84/> <csr-id-cfd8a25f9125c48afe4b66eab6b6ecf71097c486/> <csr-id-1525f36d29574699d2fcb16b70678121030fd109/> <csr-id-4ff21686c32a6edc84ea041c3040f33ae24f9519/> <csr-id-91c8fc1f0c50af55d7cb233bbe813c6d12fe11bc/> <csr-id-f7f136dbe4f86e7dee1d54835c420ec07c96cd78/> <csr-id-c800fdd331e6d7a0b8d756ba822915259f26e9e8/>
<csr-id-1fabdc51b9468ba2c6b8cf74509ad5aa2a0b86f4/> alternate::resolve(…) now takes the current_dir as argument.
That way it's more consistent with similar low-level functions and it's
possible to avoid multiple calls to std::env::current_dir().
Furthermore, the usage of current_dir() is made explicit when
instantiating a store to allow it to be resued.
<csr-id-d9d05b0db6b4453e7385117d466bf7c2e8de81fa/> add Store::try_header() for obtaining object information quickly.
Note that this feature also comes with various refactorings related to the error
type used by various methods in order to get away from a 'one error fits all' kind
of situation.
<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-95210cb2ba85f75148b4ef48ccea9d9f8a0a0114/> Provide optional candidates for ambigious entries during lookup_prefix()
The candidate entries are all entries matching a given prefix.
<csr-id-92d8be1101a7e76e70cd90db6a943b9e31e20802/> loose::Db and Store can return all candidate objects for a single prefix
This is the first step towards auto-disambiguating objects in rev-parse.
<csr-id-bf73a94b43288b6634dbb33f2433656987a73baf/> Cache::inner removed in favor of Deref/Mut and into_inner()
Making the inner field available allows changing it, which would make
it potentially incompatible with existing caches. The new
implementation makes it essentially read-only while allowing more
convenient access to methods on inner.
<csr-id-ab4e726fcec65871a81056a9c69af8ea3f56b2a3/> <csr-id-8bb5c9a75cd91ae0d888bc8e93707cfc9cc08090/> <csr-id-580e96c1b2d9782a2e8cf9d1123f6d53a5376a3d/> <csr-id-3f05fea55dc8acce1ed62ecbe4e0a1394f2720b7/>
<csr-id-8c5ae77f06a64c57df9a9ad1190266896a223dbe/> Remove deprecated compound and linked object databases The dynamic/general store is the only maintained can-do-it-all DB now.
<csr-id-91d047658b114f372735116c9d8e6962a3873137/> cleanup and unify verify_integrity() method signature
Previously they used many different ways of handling their parameters
despite all boiling down to calling the same 'index::File::traverse()`
method.
This allows for more reuse of Options structs and generally makes
clearer how these optinos are used.
<csr-id-2ef9a8424af51310db8c1e6df31dde9953ed3d21/> Change accessors named hash_kind() to object_hash() for consistency
<csr-id-49998cce419a27f3928ec4ac39da5e3b500e5cb2/> consistently use object_hash instead of hash_kind
<csr-id-67c42fbf5f88f8dc42a9ebd7c6276d57ba1d4624/> remove Write::*(…, hash_kind)
The hash_kind is now intrinsic to the implementation of the write
trait and thus isn't passed along anymore in parameters.
The sink() function now takes the kind of hash as parameter.
<csr-id-ad1b9ea17eb4b98ebd2fddebe82a8fee1d63e9dd/> various changes to the loose::Store
path field to read-only path() methodloose lookup_prefix<csr-id-d792ea543246632bf1ca8d0e1d239bbe7f07e219/> use enumerations to advertise progress ids publicly. Previously these were an implementation detail which also means they couldn't be relied upon.
Thanks to an intermediate enumeration, they become part of the public API and their actual value is not exposed.
<csr-id-e9d1f45e944e91bb9715a3ee89a4f28b09250411/> support for pack-order when iterating objects.
<csr-id-7f19bd7e63d78e3151e43d5094ae9d35cbe34f46/> add loose::Store::try_header() to obtain loose object information without content.
<csr-id-c8835c6edae784c9ffcb69a674c0a6545dbb2af3/> upgrade to prodash 21.1 and add Ids to all progress instances.
That way callers can identify progress they are interested in, say, for
selective visualizations.
<csr-id-b1c40b0364ef092cd52d03b34f491b254816b18d/> use docsrs feature in code to show what is feature-gated automatically on docs.rs
<csr-id-517677147f1c17304c62cf97a1dd09f232ebf5db/> pass --cfg docsrs when compiling for https://docs.rs
<csr-id-81e1a9d38aac9e6dd0618266ff826593e038cce8/> Add Cache::has_object_cache() and Cache::has_pack_cache() methods.
That way it's possible to conditionally set or change the cache size.
<csr-id-84ec54e904378c5b3d7da9efff66b02e88b16916/> Handle::packed_object_count() Provide packed objects numbers and cache the value for fast access later on.
<csr-id-996bfb3061fd9ee2cf38c93f39e0d4c7c6163386/> loose::Store::lookup_prefix(…)
<csr-id-58c2edb76755ab71e10eef4cd9a51533825c291f/> git_pack::Find::try_find_cached(…, pack_cache) With this method it's easier to bypass local caches and control the cache oneself entirely.
<csr-id-36fde720c34e02429a810ddd43b894a37516f51a/> add linked::Store::rc_iter() For completeness in case of single-threaded operations
<csr-id-a81b33359a4394a66f854195445f8f9aa0a46179/> linked::Store sorts bundles by modification date, newest first
<csr-id-e25f4eadec679406aad6df10026e27e4832c2482/> A simplified version of the Find trait
It's meant for the next generation of object db handles which keep a
local cache of all the details of the actual object database.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 40 times to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
04b9ca0)e695eda)0c81769)a517e39)4eebaac)4a9a05f)f536bad)a0bc98c)2f75db2)e1861ca)58ab2ae)c857d61)6b5c394)9d6f263)719b6bd)2f43a54)598698b)6776a3f)a88981b)b605c1f)cfd36ee)9474a43)5562e88)c499843)2c2a2e9)1b74c14)c800fdd)b88f253)52a4dcd)3da91ce)sink::Sink to the top-level exclusively (ab4e726)494772c)a44dd4b)loose::iter::Iter to loose::Iter (8bb5c9a)0364f48)360bf9d)dde5c6b)af0cc5f)0384007)2f9e342)8ad25c5)92b9764)ad36fb9)62d3f10)b9f308b)6cb474e)5de29f4)2c23f42)b7a6ab7)a4f3670)a3a16d6)8f58c30)a0aae84)c64a45a)6525847)0c40eb3)3f8c540)bb602e8)2d6960f)4e87a56)8488b41)c24015a)8cbef57)94be3a0)f04ff80)0c6b7b1)7bce101)41d91f9)6e678e7)cbf2d13)569c40b)456f1e7)6388ba2)eac8c45)55645ae)e1ec535)5074f4c)4c13e14)11d3325)c910af5)6e0cd6d)d5565da)11b98b8)25b56c5)4eb43d0)a1070de)df4e4eb)3a5cb5f)9909eaf)e2f0cb0)Handle to Cache (580e96c)fc1b640)dceaea2)22d35bd)7eff6bf)bundle::Location (1f8954d)cf1b1e6)5cdc27d)3ab9b03)3e1ae25)make_object_cache parameter from git_pack::data::output::count::objects() (3f05fea)c326cb3)424c9b3)3c30769)2be6725)b1c82a7)5fa1a9d)58c2edb)9702ed4)ab14f70)ef08f7f)1361c31)3310d8f)9235106)36fde72)Deref instead of Borrow in linked ODB iterator (a96b1e5)Find::try_find(…) (ebc7f47)a81b333)2290d00)Find trait (e25f4ea)dfdd6fb)4137327)bb35c69)853d468)1fb08df)a4ad5bf)aec0895)b46979b)10bc3ab)efe2579)e440bcd)a8773df)dff05ef)data::Id typedef (e0b8636)56f174f)28e648d)25eb157)Cache::inner removed in favor of Deref/Mut and into_inner() (bf73a94)8b9da35)hash_kind() to object_hash() for consistency (2ef9a84)object_hash instead of hash_kind (49998cc)7331e99)28dba20)b8f109e)9b5451a)72eb9da)Write::*(…, hash_kind) (67c42fb)loose::Store (ad1b9ea)find() and contains() (68f1031)1a2a049)core.multiPackIndex option (1495efc)b22e146)9f8d61f)4b4f9f8)47860b7)4a464f2)831397c)38426a1)80a4a7a)53d835a)3dfec81)a24307d)d63176f)1d995ef)b5dd059)verify_integrity() method signature (91d0476)9b28b18)84ec54e)a45f378)7d4d281)c7cd4ab)4455af3)fe87704)a4ccd18)6244c06)5c228e1)loose::Store::lookup_prefix(…) (9fa4817)996bfb3)622abd7)f95c1a0)9c14de3)84cb256)cc2d810)git-path crate instead of git_features::path (47e607d)50ff7aa)ba48629)8e49aa6)81d2bf2)055b117)a891315)c19331e)917480b)dddb4a5)d4f1590)0f65282)89b628a)72b97f2)2e1437c)4b320e7)Cache::has_object_cache() and Cache::has_pack_cache() methods. (81e1a9d)41d4943)87f974e)5ffe54f)4db4754)candidates for ambigious entries during lookup_prefix() (95210cb)loose::Db and Store can return all candidate objects for a single prefix (92d8be1)6bc6337)caa7a1b)2455178)oid type (3930a6f)oid where possible in git-odb (68a709e)be84b36)ca78d15)accf89d)a3f2816)rust-version to 1.64 (55066ce)ffc99b8)8c0bca3)59e9fac)48f5bd2)a5869e0)41d57b9)e313112)6efd0d3)6ccc88a)e49aed9)c9275b9)git-testtools to gix-testtools (b65c33d)git-pack to gix-pack (1ee81ad)git-odb to gix-odb (476e2ad)git-odb to gix-odb (93047bb)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-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)109f434)1ecfb7f)Your coding agent can read these notes before it upgrades. Set up the MCP server →