NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #1219 most downloaded on crates.io
A crate to handle git references
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 56 of 60 stable releases
2 versions withdrawn
withdrawn after publishing
4 years old
62 releases · first in 2023
One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
tolerate NUL suffixes in symbolic ref files Loose symbolic ref files can contain bytes after a NUL terminator. Git treats those bytes as invisible whe
<csr-id-5d702e36b7489bd2fdc3529688aca480c5f29ac0/> tolerate NUL suffixes in symbolic ref files Loose symbolic ref files can contain bytes after a NUL terminator. Git treats those bytes as invisible when reading the referent, so a HEAD file like 'ref: refs/heads/main\0...' still resolves to refs/heads/main.
gitoxide read the entire line until CR/LF before validating the symbolic target, which made the embedded NUL fail refname validation.
Match Git by stopping symbolic target parsing at the first NUL byte, while leaving direct object ref parsing unchanged.
Git baseline: local Git checkout 7760f83b59, refs/files-backend.c parse_loose_ref_contents() uses C-string semantics for symbolic referents; 'git symbolic-ref HEAD' returns refs/heads/main for a HEAD containing 'ref: refs/heads/main\0codex-hidden-head-metadata: status-clean-demo'.
<csr-id-c3ee5991fe9cbe0d9b229f1cc0b1b05d55a30f1c/> skip name validation in packed-refs binary search to unlock performance
<csr-id-9f432ef509daf09dc1a5bb3cd8201bef81d881ed/> handle loose ref path-prefix collisions
The GitButler branch creation flow reported that
repo.try_find_reference("refs/heads/A/new") could fail with a low-level
NotADirectory error when refs/heads/A already exists as a loose ref. That
lookup is asking whether the longer ref exists; the path-prefix collision
matters to creation/update code, but find should report absence for that
candidate.
Git reference: refs/refs-internal.h documents ENOTDIR as the case where a
ref prefix is not a directory, alongside ENOENT for non-existing refs. For
lookup, both mean the requested ref candidate was not found.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
6428edc)1514b0f)5d702e3)66f70f3)a8b885d)c3ee599)4f089fc)c9191ab)9f432ef)f7d4f33)
</details>16 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)gix-testtools (ce9e6bd)4743361)1980190)e3d5a04)ab2fee1)2cb17b2)e10d5f6)3675a8d)3af9b4a)d3e4c17)23af41a)gix_object::Data (4309fa4)gix-testtoolsand rename hash_kind -> object_hash (d9648e8)adb8328)
</details>add Category::is_remote_tracking_branch(). Mere convenience.
Category::is_remote_tracking_branch().
Mere convenience.Look at https://github.com/GitoxideLabs/gitoxide/issues/2491 and compare this with what Git at /Users/b yron/dev/github.com/git/git does. I think it will allow newlines and just trim whitespace. Once validat ed, create a test in
gix-refto reproduce the issue, then fix it.
sha-256 support to gix-ref.
This predominantly restricts parsing so it won't allow any hash
but the one that was passed.<csr-id-d4439cd5b5aa82c126198aa57de6a9ebbc15d371/> Limit Commit and Tag parsing to a given gix_hash::Kind
Doing so adds conformity with Git, but also simplifies the parser
which now only parse hex-hashes of a single valid length.
<csr-id-91c854e7b9f41738d0fde825cd474b8c00c1a49b/> remove winnow and replace it with hand-implemented parsers everywhere.
This will allow for simplified maintenance and editing (both human and machine)
down the road, and enable additional performance optimisations.
Parser compbinators to me ultimately were a failed experiment as I couldn't maintain them anyway, with it being too difficult for me to grasp and express everything in its very own kind of language, with a lot of different things to consider.
Note that this also removes detailed errors from all parsers that previously
used winnow, with the option to re-add those if there is demand.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
1bf4099)53f880c)Category::is_remote_tracking_branch(). (d5f9bf5)87b2da8)sha-256 support to gix-ref. (731248f)gix_hash::Kind (d4439cd)winnow and replace it with hand-implemented parsers everywhere. (91c854e)4d5ba23)2c3a08e)
</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.
Category::to_full_name() to be able to produce any full name.
Previously it learned to reject certain invalid branch names, but this has to
be done separately and led to some unpleasant changes in gix as well.refs/heads/HEAD just like Git in Category::to_full_name()
See https://github.com/git/git/blob/cf2139f8e1680b076e115bc0b349e369b4b0ecc4/refs.c#L776-L778
for the source of this rule.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
f9fbcba)63b8419)0396152)7d50c30)gix-object (6df1d55)444a92b)package.include patterns more specific so they don't match ignored files (c2c917f)e51c40b)Category::to_full_name() to be able to produce any full name. (5b229c6)420c5df)6a5a0ec)refs/heads/HEAD just like Git in Category::to_full_name() (4b4fba2)44020e0)9d04035)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)228caf7)GIX_TEST_FIXTURE_HASH for gix-commitgraph and gix-pack. (d51b858)9327b73)
</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>
d66ac10)5c9e6ae)gix-testtools (fb60c8a)8bceefb)7ce3c55)f7d0975)
</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>
cbbdef5)562e684)fa85ed3)64fb9de)dfeefe2)gix-ref (931c69b)6cff657)gix-commitgraph (1f58905)0a333e5)c663b3f)7be8f90)d914d95)4edc5dd)211b4fb)
</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>
115e208)d6c5b9d)
</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-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
21fecdf)93dd630)703644c)
</details>Category::to_full_name() can now be passed a full name without prefix duplication. This is for convenience, as it can then be passed a valid partial n
Category::to_full_name() can now be passed a full name without prefix duplication.
This is for convenience, as it can then be passed a valid partial name.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
82ff92f)bc62b1e)Category::to_full_name() can now be passed a full name without prefix duplication. (d2cd2ef)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>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>Reference::peel_to_id_in_place_packed
Also, update documentation where it was still referring to deprecated
in_place methods to refer to the new methods instead.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
89fb308)4da2927)b188a7d)6cc8464)9365cc3)838ff95)0a576b9)e670294)b813339)442f800)Reference::peel_to_id_in_place_packed (0380496)42f8db5)e179f82)a78bf84)e25ccbf)d8fbe1e)df91659)dc7343c)
</details>This release adjusts writes to lose ref files so they will contain newlines after the hash for compliance with Git.
This release adjusts writes to lose ref files so they will contain newlines after the hash for compliance with Git.
<csr-id-ba563b0e39ebc3ce635f399accd8a4be5210f816/> extend lifetime of iterators
Previously the iterators would return references with lifetimes that
were shorter than the actual lifetimes of the gix::Reference
themselves. This was dues to a footgun with '_ (eliding the lifetime).
When a function returns an elided lifetime, this lifetime usually is the
lifetime of the &self parameter, but sometimes it is the lifetime of
the type itself (e.g. Iter<'_>).
I made the lifetimes explicit to ensure we were using the correct ones.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
79ba9d0)gix-ref release (5315180)edcfdc2)6c0cc71)04a18f3)ba563b0)202bc6d)d64f257)473fe52)428412c)8892cb1)std::io::Error::other support. (88dc1c2)784c046)
</details>add Category::to_full_name() to easily generate full names from short ones.
Category::to_full_name() to easily generate full names from short ones.file::Store::is_empty()<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>
5a919c4)65037b5)60c29a5)43f92b5)fdf5153)a2741da)dd5f0a4)554ce13)249bf9a)Category::to_full_name() to easily generate full names from short ones. (f8b87f1)f8d7c0a)151e3a5)7ae3797)file::Store::is_empty() (c8a63ab)c3f06ae)d2b4c44)800738a)4408166)8d4c4d1)
</details>add gix free trust to easily check the assigned trust level of any given path This is particularly useful on Windows, which makes it easy to probe exi
gix free trust to easily check the assigned trust level of any given path
This is particularly useful on Windows, which makes it easy to probe existing paths
with ownership that might be complex to reproduce otherwise.<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>
a96587c)gix free trust to easily check the assigned trust level of any given path (ab2016f)2a5db88)e4f380e)50fb46f)gix-config. (344218a)
</details><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
<csr-id-b07f907ba2e01849744c72df35dac57b624f2f85/> 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 demand.
<csr-id-38b63c2fc9d407b3c634d8b0c72d4d0c104aa5ad/> make fs::walkdir_sorted_new() sort entries by paths literally
This follows up 7b1b5bf864e74706aefeb1213e8bdb0545d5464a. Since packed-refs
appears to be sorted by full ref name, loose-refs should also be emitted in
that order.
The comparison function is copied from gix::diff::object::tree::EntryRef. Non-utf8 file names are simply mapped to "" on Windows. We could add some fallback, but callers can't handle such file names anyway.
&RelativePath in *::prefixed() methods.
That way there now is a type to capture requirements.<csr-id-f5385595987e0be84fb56827682df013bf54e09c/> prefixed ref iteration now properly deals with slashes.
Previously, refs/heads/foo/bar would be listed when running
repo.references()?.prefixed("refs/heads/b"). The code identified that
the last component was not a directory and started to match it as a
filename prefix for all files in all recursive directories, effectively
matching refs/heads/**/b*.
This commit fixes that bug but also allows to use a trailing / in the
prefix, allowing to filter for refs/heads/foo/ and not get
refs/heads/foo-bar as a result.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
cc5b696)49fa9f3)db0b095)0bf84db)3b1bef7)c3c6504)gix-date and gix-actor (afdf1a5)70097c0)b07f907)46227e6)06bf1e1)fdc06b1)294902e)&RelativePath in *::prefixed() methods. (108a8ca)5823b22)Cargo.toml files in workspace to gix-features bump (6315536)71275d1)f538559)57c9014)b5e9059)68e6b2e)507d682)94faf51)3ca6811)1612c73)fc5faf2)7502b4a)420e730)
</details>Resolve Winnow deprecations (`3cd3e2a`)
<csr-id-d1b357ec53b9e2be2483ae130e25401be795f139/>
<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>
a06c409)b41312b)38dff41)cd96b64)56ba898)7b17da6), just before ) on same line in function calls (66a5ae1)write::Error::IllegalCharacter description (d1b357e)01bd76d)8776a3e)9dcfd15)16a248b)8e96ed3)11ac79c)fdc57e7)3cd3e2a)783c4e6)8df0db2)
</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-id-17835bccb066bbc47cc137e8ec5d9fe7d5665af0/>
<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>
dea106a)7570daa)1f6390c)7ec21bb)rust-version to 1.70 (17835bc)1ca480a)9193b05)d22937f)
</details>3 commits contributed to the release over the course of 1 calendar day.
> in them.
Previously these confused the signature parser, who gladly
took the entire message as part of the email.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
c1ba571)7ea8582)8fd53bc)> in them. (6abee88)743b979)cbdbb8a)e95afc0)4885e53)2010668)e8b3b41)
</details>make sure ordinary capitalized partial names can be found by partial name. For instance, previously, a ref named A could not be found even though refs
A could not be found even though refs/heads/A existed.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
4000197)8ce4912)bc9d994)aeaebec)<= on 32-bit for some size assertions (fc13fc3)7a40648)0f0e4fe)3fb989b)1fbb946)db5c9cf)
</details>remove workspace lints from Cargo manifests of fuzz-projects. They are not part of the parent workspace.
<csr-id-65f69f72a8a08b3b2462362ec10d1748be48019b/> <csr-id-64ff0a77062d35add1a2dd422bb61075647d1a36/>
<csr-id-17573779688e755a786546d5e42ab533088cd726/> remove all workspace dependencies The problem is that with them, we don't notice anymore if the crate changes, because a dependency changes. That also means that older versions of the dependency may stay even though some other crates might pick up a newer version.
Ultimately, this will lead to drift and subtle incompatibilities.
We declare this breaking to enforce a proper re-release.
<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>
3f7e8ee)795962b)65f69f7)64ff0a7)37c1e4c)af03832)72daa46)cdac4a9)7c2af44)694ebad)c2bdda4)b12c7c9)93e86f1)012a754)649f588)beba720)37ba461)2e0ce50)f992fb7)ec69c88)46cd1ae)1757377)
</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>
b3ff033)209b6de)
</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>serde support for varous reference name types.ReferenceExt::follow_to_object_in_place().
The missing link that makes it possible to follow to the first object
and then peel the object according to any preferred algorithm.<csr-id-43d8096dcdd797fd015c177cefeb8ee1f0ae5881/> improve naming and change Target::Peeled to Target::Object.
This also renames TargetRef::Peeled to TargetRef::Object to make clear
that it's not necessarily the peeled object that is contained.
Previously these terms were confusing due to the incorrect usage of the
word peeled.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
f2b522d)a65a17f)d19af16)0f25841)242fedc)ReferenceExt::follow_to_object_in_place(). (16b5e7e)Target::Peeled to Target::Object. (43d8096)d51f330)gix-validate (b9cf0f4)7dff447)serde support for varous reference name types. (70d835b)2e00b5e)winnow a workspace dependency (78a7e32)5871fb1)9fd1090)
</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><csr-id-ec1d6b44d7f65ded8ea34914350e723275121776/>
PartialNameCow<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
6232824)a1b73a6)0470df3)99c00cc)15f1cf7)f87322e)gix-testtools (f5a9884)bf3d82a)1e79c5c)ab02aa9)ec1d6b4)8d89b86)c1d7c02)1dfa90d)tar files (dcab79a)9fa1054)2f9f0ac)PartialNameCow (86e50ee)ca31249)9c65d98)ea12fc2)68cbea8)2cefe77)8da55a3)
</details>LineRef is now Copy and remove non-exhaustive After all, this struct refers to what's in a reflog line, which is stable.
LineRef is now Copy and remove non-exhaustive
After all, this struct refers to what's in a reflog line, which is stable.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
add file::Store::force_refresh_packed_buffer() to public API That way it's possible to explicitly refresh if the caller knows that some other operatio
file::Store::force_refresh_packed_buffer() to public API
That way it's possible to explicitly refresh if the caller knows that some other
operation might have invalidated the in-memory cache. The mtime based approach
doesn't work reliably on all filesystems due to coarse granularity of time.<csr-id-9555efe8964d3de3c692f79cef390916e34daefb/> assure that special device names on Windows aren't allowed. Otherwise it's possible to read or write to devices when interacting with references of the 'right' name.
This behaviour can be controlled with the new prohibit_windows_device_names flag,
which is adjustable on the Store instance as field, and which now has to be
passed during instantiation as part of the new store::init::Options struct.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
file::Store::force_refresh_packed_buffer() to public API (f2d8955)4f98e94)9511416)d6cd449)6f55f2a)79dce79)1242151)9555efe)d3588ca)048e43e)cargo check (4faf10e)e33efa2)68fd5b3)
</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>
MAP_PRIVATE
That way, the mmap process should work under more circumstances.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
MAP_PRIVATE (88061a1)b050327)52c3bbd)3e5c974)f8ce3d0)9e9b9fe)
</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>
45b4470)f2e111f)a663e9f)e175b20)516e105)face359)ae86a6a)7b44c7f)8430442)69cb78b)9470554)b8cba96)
</details>Nothing published for this version
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>precompose_unicode, which is now an extra argument in the Store constructor.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
eb6aa8f)6a2e0be)5d176fc)69c8232)precompose_unicode, which is now an extra argument in the Store constructor. (7523e5c)b6c04c8)
</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>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><csr-id-aea89c3ad52f1a800abb620e9a4701bdf904ff7d/>
packed::Buffer::from_bytes().
This way the source of the packed-refs file contents can be arbitrary.<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)0f71709)d83b4e0)8ee1194)5828f37)fb28daa)packed::Buffer::from_bytes(). (ff18e0b)3be3b15)3e37a22)1691ba6)
</details>add file::Store::set_packed_buffer_mmap_threshold(). That way it's possible to control under which circumstances, if at all, memory maps will be used.
file::Store::set_packed_buffer_mmap_threshold().
That way it's possible to control under which circumstances, if at all,
memory maps will be used..git/packet-refs on Windows.
The solution entails to not use memory maps on Windows which is certainly fine
on todays systems, even though it's likely to add latency.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
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>Reference::peeled is working.gix-object::Find trait<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
55d386a)d3dcbe5)winnow 0.5.24 (abcfb65)51c7abc)f528ae8)f4c3380)5a0d93e)bb3224c)c8bd660)gix-object::Find trait (dbb6886)gix_object and gix_odb. (24e319e)c0e72fb)b65a80b)c2cf20c)Reference::peeled is working. (266c9fc)
</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/>
Clippy helped 1 time to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
68e5432)1347a54)995bc84)345712d)
</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>
7891fb1)8a60d5b)
</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>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)b7560a2)3be2b1c)363ee77)
</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><csr-id-ef54aab9e5521add4154ee8d902d62612a9d8d4a/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
30b2761)f23ea88)8f3f358)e0c64fd)0d258f4)nom to winnow in remaining uses in gix-object, gix-ref, and gix-actor for ~20% more performance. (ef54aab)winnow to latest patch release (8c41848)df226dd)266864f)3f8c91f)12f03db)2fb4a54)f0cbf81)9ed7df0)86ea47f)b3f0418)fee441d)b37a909)ac0e81c)86d7fd1)ee75de1)
</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>
4604f83)gix-submodule (f3c4311)b629f8a)gix-validate (a8bc0de)6b4a303)ef8ccd9)
</details>5 commits contributed to the release over the course of 2 calendar days.
<csr-id-5f6cf22cd8eda37c151e67b83cdb36d953ee3793/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
231ac1c)db63815)e4d2890)f8b1f55)Change type. (5f6cf22)
</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>
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>
107a64e)16295b5)c4cc5f2)5cb3589)2fc66b5)9064ea3)
</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>
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>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>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)6fc7497)
</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-bcad5c22049d56a25ef69d6c7a3344e78f9a1d4d/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
ea9f942)18b0a37)aa16c8c)4f635fc)fe59956)clippy::redundant-closure-for-method-calls lint (bcad5c2)8d2e6a9)gix-actor (4a80e86)gix-date (d575336)
</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>
9a9fa96)8f15cec)67da689)0269eed)420553a)89a8cfe)2578e57)dbf8aa1)2087032)3ef5c90)3eff567)9375cd7)b057500)facaaf6)4f879bf)
</details>symbolic refs are now written with a newline. #(836) This should help some tools to work correctly.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
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>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>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><root>/HEAD twice due to a logic issue.remotes/HEAD if we are looking for HEAD.
This is because we already looked for that in the previous loop, and HEAD/HEAD makes no sense
as this case is made for things like origin as partial name.<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-id-b645d28f9641c6b4022e1e37ad9fe528922ec747/> remove types that are now available in gix-os
<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)91134a1)30a1a71)282a1a3)3e93141)remotes/HEAD if we are looking for HEAD. (0c79bdf)6ebd61e)14e64e7)8dbd0a6)cdef398)19338d9)gix-fs crate to consolidate all filesystem utilities (f8cc33c)23ee47f)3d47919)gix-os (b645d28)b574a39)
</details>uncategorized refs should not be per-worktree When creating a new ref from using a Repository instantiated from a linked worktree, if the ref did not
<csr-id-3d6832cb0ea5dc4b3d798fd4ff86602df8d54407/> uncategorized refs should not be per-worktree When creating a new ref from using a Repository instantiated from a linked worktree, if the ref did not fit one of the well-known categories, it would be incorrectly stored as a per-worktree reference instead of a shared reference.
For example, the reference "refs/stacks/linked" does not fit any of the well known categories. According to git-worktree(1), this ref should be shared across all worktrees; i.e. located at $GIT_COMMON_DIR/refs/stacks/linked and not in $GIT_COMMON_DIR/worktrees/linked/refs/stacks/linked.
This change tweaks the control flow so that uncategorized refs correctly fallback to being relative to commondir while still placing refs that are supposed to be per-worktree in the per-worktree location.
<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>
A maintenance release without any user-facing changes.
A maintenance release without any user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
c1f1bfb)c66e298)531dd19)01277a6)
</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>A maintenance release without user-facing changes.
Clone for PartialName.
Also improve documentation for FullName* and PartialName* types.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
29a0870)e06f5f5)Clone for PartialName. (8e8c71b)
</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>
93e75fe)895e482)0f411e9)
</details>A maintenance release without user-facing changes, just to fix installation
A maintenance release without user-facing changes, just to fix installation
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)3cfbf89)addd789)94c99c7)d686d94)gix-tempfile (bfcd1e3)56c005b)
</details>Your coding agent can read these notes before it upgrades. Set up the MCP server →