NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #1377 most downloaded on crates.io
A work-in-progress crate of the gitoxide project dedicated implementing the git index file
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 57 of 59 stable releases
1 version withdrawn
withdrawn after publishing
4 years old
60 releases · first in 2023
One column per quarter.
Nothing published for this version
Nothing published for this version
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>9 commits contributed to the release over the course of 27 calendar days.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
6428edc)f7d6608)155ff6d)9402adc)b5b2d54)bc4064c)6ab2993)GIX_TEST_FIXTURE_HASH for gix-index tests (3bca1a1)f7d4f33)
</details>Document vulnerability of State::from_tree() (`f3cc6b9`)
File debug output.
This allows tests to rely on it more with insta, and not miss a thing.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
10c58bb)85c6087)File debug output. (e4bdd1f)69d644e)7f4d492)08f22e5)575113d)gix-testtools (ce9e6bd)a0a3acb)f6f74e0)278d7ec)sha1 and sha256 forwardings for all crates (09b982c)4743361)1980190)e3d5a04)ab2fee1)2cb17b2)e10d5f6)3675a8d)4c77f81)3af9b4a)d3e4c17)1d9bae2)State::from_tree() (f3cc6b9)State::from_tree()`` benchmark coverage ([05f36c4`](https://github.com/GitoxideLabs/gitoxide/commit/05f36c440d5c8c9a7d43a3a16fcba0f23481af36))23af41a)gix-testtoolsand rename hash_kind -> object_hash (d9648e8)048e8df)7a426e7)adb8328)
</details>2 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)4d5ba23)
</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>
gix-index fuzzing and make it survivewasm32-wasip2 target across four crates:<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
f9fbcba)63b8419)e64e3b8)0396152)gix-index fuzzing and make it survive (93e587c)444a92b)package.include patterns more specific so they don't match ignored files (c2c917f)fb0f694)ce9dcd7)915139f)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)ab36136)6183fd0)afe154c)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>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>
<csr-id-7e25c3426b382493007fa6982873f76baa9d020d/> handle loongarch64-musl stat struct field names
On loongarch64-unknown-linux-musl with musl 1.2.3+, the libc stat
struct uses POSIX timespec fields (st_mtim, st_ctim) instead of
separate seconds and nanoseconds fields (st_mtime, st_mtime_nsec).
This was exposed by libc 0.2.180 which added proper time64 support for this target, causing compilation failures in rust-lang/rust CI.
Fixes the same pattern already used for AIX and Hurd targets.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
d66ac10)4fe8e38)7e25c34)8bceefb)7ce3c55)f7d0975)
</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>State::path_is_dir() and State::path_is_dir_icase()State::entry_closest_to_directory(_icase)() to State::entry_closest_to_directory_or_directory(_icase)().
This also changes the meaning, allowing it to return directory entries, which makes them a perfect match.std::ops::ControlFlow where possible<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
cbbdef5)562e684)12924d7)State::entry_closest_to_directory(_icase)() to State::entry_closest_to_directory_or_directory(_icase)(). (95a8d2d)gix_index::State::path_is_directory() work with submodules. (58507f8)std::ops::ControlFlow where possible (5c1bd03)State::path_is_dir() and State::path_is_dir_icase() (f1b3906)0a333e5)c663b3f)
</details>4 commits contributed to the release over the course of 5 calendar days.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
7be8f90)d914d95)4edc5dd)211b4fb)
</details>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-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
115e208)d6c5b9d)
</details>1 commit contributed to the release.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
21fecdf)
</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>
<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>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>PartialEq, Eq, PartialOrd, Ord to more types.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
89fb308)12b3257)027b3ef)4da2927)b188a7d)6cc8464)9365cc3)838ff95)8d8dba2)074ca1e)f3be6e3)PartialEq, Eq, PartialOrd, Ord to more types. (66158d2)dc7343c)79ba9d0)202bc6d)d64f257)473fe52)428412c)784c046)
</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>core.symlinks in entry::Mode<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
5a919c4)65037b5)dab97f7)a9a8ea1)00bd1fa)hashbrown to 0.15. (6f569ce)7ae3797)core.symlinks in entry::Mode (c85b92d)c3f06ae)
</details>7 commits contributed to the release over the course of 14 calendar days.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
d2b4c44)gix-index (bfc4880)33c4d6b)00e8934)800738a)4408166)8d4c4d1)
</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-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
e104545)5f7f805)631f07a)
</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>
cc5b696)614b389)49fa9f3)db0b095)0bf84db)3b1bef7)c3c6504)6f009d7)46227e6)06bf1e1)5823b22)Cargo.toml files in workspace to gix-features bump (6315536)3aec7fb)9f1fbc7)b5e9059)68e6b2e)1612c73)fc5faf2)6307f57)8969245)420e730)
</details>Expose the decoded path, query pairs, and fragment of Git remote URLs separately. Consumers can identify repository paths and inspect HTTP(S) paramete
add Url::path_query_fragment()
Expose the decoded path, query pairs, and fragment of Git remote URLs
separately. Consumers can identify repository paths and inspect HTTP(S)
parameters without implementing scheme-specific splitting and decoding.
Recognize delimiters before decoding and reuse validated original spelling
to borrow decoded bytes. Preserve encoded separators, nested escapes,
ordered duplicate query keys, and literal percent text after construction
or mutation. Query pairs use form decoding (+ becomes space); SSH/SCP
paths, existing accessors, and serialization keep their behavior.
Reference Git's connect.c::parse_connect_url() and url.c at
1630431f326e. Use fetch-pack --diag-url to check SSH delimiters;
standalone url-parse does not model that transport.
migrate errors to gix-error
raise MSRV to Rust 1.88
The newly published dua-core 3.3 release used by linked-worktree removal
requires Rust 1.88, so raise every workspace crate and the advertised badge
together.
Keep the MSRV checks buildable by selecting the latest sysinfo and rusqlite
release lines that support Rust 1.88.
Url::path_query_fragment() (cd90fe1)gix merge commit --debug
This yields additional debugging information with details about detected conflicts.gix merge commitsgix merge tree to merge trees similarly to git merge-tree.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
0b7abfb)gix merge commit --debug (0a5993f)905e5b4)gix merge commits (4a5afc7)a876533)gix (8d590f3)3fb989b)gix merge tree to merge trees similarly to git merge-tree. (84707c2)80e006b)
</details><csr-id-426c669d58231ca22cd900f6fd86d59138d6a6ea/>
From<gix_object::tree::EntryKind> for entry::Mode
That way it's easier to add new entries to the index.State::remove_(tree|resolve_undo)() to remove possibly outdated extensions.State::remove_entry_at_index(pos) by position.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>
b41312b)38dff41)4660f7a)4501086)gix-index end-of-index extension parsing for SHA256. (f879654)fbf6cc8)5095f44)4f2b649)54e5764)gix_hash::Hasher::finalize() (4e935ce)gix_hash (baa1430)7b17da6), just before ) on same line in function calls (66a5ae1)01bd76d)16a248b)8e96ed3)b4fe425)From<gix_object::tree::EntryKind> for entry::Mode (de4375a)State::remove_(tree|resolve_undo)() to remove possibly outdated extensions. (668cb12)State::remove_entry_at_index(pos) by position. (8173096)14d6b8d)from_fs doc (426c669)8df0db2)
</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><csr-id-17835bccb066bbc47cc137e8ec5d9fe7d5665af0/>
State::from_tree() is now faster.
It uses depth-first traversal out of the box which allows it to save
the sorting in the end. It's also a little bit faster.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
dea106a)1f6390c)c2d1a5d)worktree_mode actually represents it. (fc2021f)34fa6bb)entry::Mode::change_to_match_fs() (18b2a97)7ec21bb)rust-version to 1.70 (17835bc)0ab4f64)State::from_tree() is now faster. (4989cda)gix-traverse (1de4e70)e8b3b41)
</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>entry::Stage can now be converted into entry::Flags.
This makes it easier to change the stage of an entry.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
4000197)8ce4912)bc9d994)0b7abfb)entry::Stage can now be converted into entry::Flags. (63978f6)aeaebec)dc0a73a)<= on 32-bit for some size assertions (fc13fc3)7a40648)0f0e4fe)8e99eba)eab6735)f72ff21)417bf95)touch logic in file_metadata.sh more portable (c430897)db5c9cf)
</details>6 commits contributed to the release over the course of 30 calendar days.
Store::at() where possible (17fea2a)<csr-id-886d6b58e4612ac21cc660ea4ddf1dd0b49d1c6e/> checkout respects options for core.protectHFS and core.protectNTFS.
This also adds gitoxide.core.protectWindows as a way to enforce
additional restrictions that are usually only available on Windows.
Note that core.protectNFS is always enabled by default, just like
it is in Git.
<csr-id-addf446f052ff74edcdb083f2b2968b313daa940/> more robustness in the face of a trampling-herd of threads loading a single index. The motivating example is here: https://github.com/praetorian-inc/noseyparker/issues/179
Previously, it was possible for a trampling herd of threads to consolidate the disk state. Most of them would be 'needs-init' threads which could notice that the initialization already happened, and just use that.
But a thread might be late for the party and somehow manages to not get any newly loaded index, and thus tries to consolidate with what's on disk again. Then it would again determine no change, and return nothing, causing the caller to abort and not find objects it should find because it wouldn't see the index that it should have seen.
The reason the thread got into this mess is that the 'is-load-ongoing' flagging was racy itself, so it would not wait for ongoing loads and just conclude nothing happened. An extra delay (by yielding) now assures it either seees the loading state and waits for it, sees the newly loaded indices.
Note that this issue can be reproduced with:
'./target/release/gix -r repo-with-one-pack -t10 --trace odb stats --extra-header-lookup'
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
d6cd449)79dce79)core.protectHFS and core.protectNTFS. (886d6b5)f3d5a69)04ef31e)addf446)
</details><csr-id-64ff0a77062d35add1a2dd422bb61075647d1a36/>
<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)64ff0a7)37c1e4c)af03832)c2bdda4)b12c7c9)22fbe70)fe1eb97)649f588)beba720)37ba461)2e0ce50)c3a7dcf)29ad2df)f992fb7)ec69c88)
</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>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 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>
f2b522d)a65a17f)d19af16)0f25841)9b72c61)touch in test fixture fall back to portable format (bbbd1eb)
</details>re-export gix_validate as it's now part of the public API. This allows calling State::from_tree().
<csr-id-daf3844c8f5ce6d0812e35677b1a46d568e226db/>
gix_validate as it's now part of the public API.
This allows calling State::from_tree().<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
6232824)a1b73a6)0470df3)99c00cc)c2753b8)Change type. (b3973e4)bf3d82a)7330844)a4bb7b9)<< rather than <<- heredoc operator (2641f8b)6df6e84)d944598)f71b7a0)gix_validate as it's now part of the public API. (c8c56ae)1dfa90d)tar files (dcab79a)9fa1054)9c65d98)ea12fc2)68cbea8)2cefe77)e8b6bc2)daf3844)
</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><csr-id-b6a67d7fe3b5645fccb785af01d72919c6761c52/>
From<gix_object::tree::Mode> for gix_index::entry::Mode.State::from_tree() now performs name validation.
Previously, malicious trees could be used to create a index with
invalid names, which is one step closer to actually abusing it.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
4f98e94)9511416)d6cd449)79dce79)State::from_tree() now performs name validation. (2ea87f0)bad9a79)b6a67d7)From<gix_object::tree::Mode> for gix_index::entry::Mode. (9564699)977346e)
</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>
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>entry::Stage into an enum.
This way, it's much clearer what possible values are.
For performance, it also adds Entry::stage_raw() to avoid having
to match on a number.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
2e06a00)095c673)5755271)45edd2e)gix-index (1e1fce1)entry::Stage into an enum. (a6cc781)
</details>A re-release to deal with breakage in the dependency tree (self-caused).
A re-release to deal with breakage in the dependency tree (self-caused).
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
b7c9275)
</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>
155cc45)129ba3d)41cd53e)b05af9f)
</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>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)259b38e)
</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><csr-id-cbda06d7673c3461b82f5999295d3b00a7c273ef/> refactor ignore-case functionality to actually work. The new implementation does the same as Git, and initializes an alternative lookup location.
All previous implementations with _icase suffix were removed
without replacement.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
45b4470)f2e111f)5fc379d)c5c69bd)f26f298)face359)ec37db4)cbda06d)7b44c7f)8430442)d4d478b)2482023)
</details>gix submodule subcommand for simple submodule listing and information retrieval
gix submodule subcommand for simple submodule listing and information retrievalgix index entries --recurse-subomdules to also list submodules.gix index entries with styles and pathspecs.
This adds support for more simple git style, which is faster and thus
allows for more direct comparisons to git ls-files.gix commit verify-signature to do something akin to git ... --show-signature.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
8f3f358)gix submodule subcommand for simple submodule listing and information retrieval (1ccbe16)0d258f4)36f7b78)gix index entries --recurse-subomdules to also list submodules. (6bc69e3)a3afaa4)gix (ca972a2)Defaults::from_environment() when parsing pathspecs. (2a99034)gix index entries (22477bd)9f4dfe0)gix index entries with styles and pathspecs. (c30ac0c)f194cfc)f584d76)gix (a201f0d)b37affe)gix commit verify-signature to do something akin to git ... --show-signature. (cd6cfe4)c7d9129)gix-archive (feba76d)b629f8a).gitmodule file abstraction (6a2e6a4)
</details>A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
eb6aa8f)6a2e0be)
</details>Add directory lookup, as well as ignore-case capabilities. This is needed to be able to refer from an entry on disk to the index, and figure out if th
<csr-id-7c2eeb07ed0184a6c271f4a54604cba7d2abe811/> Add directory lookup, as well as ignore-case capabilities. This is needed to be able to refer from an entry on disk to the index, and figure out if the index already has such entry.
New methods are:
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
b6c04c8)gix-index release (17d1aac)08e6ca8)bf49cd4)f4a29dc)5c57c6b)dfb7b0f)39f35da)6fc27ee)3ef3bc2)c3983c6)7c2eeb0)
</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>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><csr-id-aea89c3ad52f1a800abb620e9a4701bdf904ff7d/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
e1aae19)e78a92b)4454c9d)aea89c3)gix-hash (859a092)940e3ca)569caa0)1691ba6)7549559)35439de)
</details>NetBSD doesn't have st_mtime_nsec and st_ctime_nsec It has st_mtimensec and st_ctimensec instead.
<csr-id-e2e17c60008f287796c6c10e1fa8a64a3d4a9105/>
<csr-id-03fa7ac64c99abc804252630c03b5b9085e9ea81/> NetBSD doesn't have st_mtime_nsec and st_ctime_nsec
It has st_mtimensec and st_ctimensec instead.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
98b08f4)gix-index release (b3ecbb7)523692b)st_mtime_nsec and st_ctime_nsec (03fa7ac)ff1542c)e2e17c6)
</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>From<entry::Mode> for gix_object::tree::EntryMode.gix-object::Find traitgix-object::Find trait<csr-id-3c8421f003bc3a5f2f51cee1b5cb6a526d5e0f38/> Add git-style metadata support. As opposed to the Rust standard library, this one will get the ctime from the file itself, instead of from the inode.
That way, the index file written by gix will not continuously
be expensively rewritten by git, and vice versa.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
55d386a)d3dcbe5)5fdc9df)From<entry::Mode> for gix_object::tree::EntryMode. (21bea0f)51c7abc)dfb3f18)gix-diff (1706e23)f528ae8)f4c3380)5a0d93e)bb3224c)2b80d84)a0cc80d)c87f2cc)3c8421f)ff99a18)gix-object (203d69c)c8bd660)gix-object::Find trait where necessary (5761a4d)gix-object::Find trait (1165de0)gix-object::Find trait (806ea47)c0e72fb)b65a80b)
</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>PathStorageRef in place of &PathStorage<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
68e5432)1347a54)a899f74)357ba13)995bc84)b842691)PathStorageRef in place of &PathStorage (a1794b5)1568948)gix-features (9e7c3e1)
</details>A maintenance release without user-facing changes, just to fix installation
A maintenance release without user-facing changes, just to fix installation
State::from_tree() as it's rather time-consuming<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
7891fb1)8a60d5b)54a8495)fd034e0)State::from_tree() as it's rather time-consuming (959dc17)
</details>gix index entries also prints attributes.
gix index entries also prints attributes.gix clone and gix fetch with controls for shallow repositories.ein t trace-path know accepts the trace-file alias.stdout on each write, now this is done only once.gix free index entries into gix index entries.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
ed63ec0)7bd8823)f37a930)gix index entries also prints attributes. (08e8fc2)dd14a80)gix free index entries into gix index entries. (ca8ebdf)3456c84)gix-worktree (13a070f)69faad0)8d5762c)23ee47f)3d47919)9237121)ee36e5b)bbb4cb0)index.skipHash (f29f35c)3836cc0)cc0f506)c502fa8)531dd19)gix clone and gix fetch with controls for shallow repositories. (9723e1a)ein t query (d5616b6)8ef1cb2)3827ac6)ein t trace-path know accepts the trace-file alias. (f93e964)
</details>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)6135a5e)gix usage for faster compile time (9d33e2f)dynification (f658fcc)dyn trait where possible. (072ee32)b7560a2)
</details>prefixed_entries_range() now works correctly with directory prefixes. Previously, not all directory prefixes would work as expected due to incorrect s
prefixed_entries_range() now works correctly with directory prefixes.
Previously, not all directory prefixes would work as expected due to incorrect
search criteria.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
This release adds the new ein tool query analytics engine, which maintains a database of a git repository as acceleration data structure to run useful
This release adds the new ein tool query analytics engine, which maintains a database of a git repository as acceleration data structure to run useful queries on.
It's nothing more than an MVP, and was inspired by a program to accelerate Git-Heat-Map.
ein tool query - a git analytics engine.
A tool to build and efficiently maintain a database of information contained
in a git repository, preferably the kind of information that is expensive to obtain,
in order to facilitate queries that would be prohibitive without an accelerating
data structure.gix tree entries with rev-spec support.
Previously it wanted a tree-id, now it can derive it itself.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
State::prefixed_range() to obtain a range of entries matching a prefix.
This makes it easier to make changes to entries of a certain prefix.State::remove_entries() and entry_range().
This makes it possible to, among other things, delete all
occurrences of a particular entry.write::Options::skip_hash.
With it, a hash will not be produced for indices.gix-index prefix matching should now work correctly with conflicting files.
It was done in a rush and lacks a lot of tests. At least now it
has a greater chance of working, as tests that would truly validate
this are still missing for a lack of test date. It can be produced
with git update-index, but it wasn't yet worth it.File::at() just like git, or skip the check.
Note that indices written with index.skipHash=true will be vastly
faster to read by a factor of 2 or more.index.skipHash, which may skip
producing the hash at the end of the index file, just filling in the
null-hash.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
3be2b1c)gix-index release (6fdbc66)State::prefixed_range() to obtain a range of entries matching a prefix. (cfbfa43)State::remove_entries() and entry_range(). (8b689c2)gix-index prefix matching should now work correctly with conflicting files. (6169325)4bfd1cc)File::at() just like git, or skip the check. (61c2e34)write::Options::skip_hash. (2f42132)b310d04)363ee77)
</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>
c9275b9)git-protocol to gix-protocol (823795a)git-features to gix-features (e2dd68a)6461c3d)git-repository to gix (7bed2a9)9e7d792)0f2ed59)
</details><csr-id-93feea269eebd114e866e6f29f4a73c0096df9e0/>
entry::Mode::is_submodule()State::prefixed_entries() returning a range of entries with a given prefix.
This is useful to limit entry traversal and thus do less work.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
6c62e74)30b2761)f23ea88)8f3f358)73c685a)93feea2)36f7b78)entry::Mode::is_submodule() (5fd6364)9f4dfe0)State::prefixed_entries() returning a range of entries with a given prefix. (05ed965)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>
0062971)107a64e)16295b5)c4cc5f2)5cb3589)2fc66b5)1dda48b)gix-fs capabilities (1c1d19b)9064ea3)
</details>gix clone is now permitted without specifying a destination directory. Note that the implementation doesn't take into account potential redirects and
<csr-id-1d9a5e925890883e9e712db14ac82411ad2fdfc3/>
gix clone <url> is now permitted without specifying a destination directory.
Note that the implementation doesn't take into account potential redirects and renames
as it's implemented only with the first URL it sees (not the redirected ones).http.schannelCheckRevoke<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>
gix clone <url> is now permitted without specifying a destination directory. (b81f650)e22080e)7bba270)gix progress now usees the configuration tree as basis for data. (ea76bf5)f7b8794)1d9a5e9)b93f0c4)9e04685)tabled (7aed326)76c99f3)f8c562a)d336368)ssh related configuration variables. (3f91088)d821fc5)38ae61a)
</details>State::entry_by_path_ours() to find an entry which is either stage 0 or stage 2.
This is the preferred way of accessing entries for lookup in the object database as it
will also work while merges are ongoing, returning the correct object accordingly.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
4aca8c2)68ae3ff)c70e54f)e4dded0)b19a56d)3821089)State::entry_by_path_ours() to find an entry which is either stage 0 or stage 2. (20c0d25)
</details>allow requiring archived scripted fixtures
allow requiring archived scripted fixtures
Add version-aware fixture loaders:
scripted_fixture_read_only_with_git_version()scripted_fixture_read_only_with_args_with_git_version()Both use normal fixture generation when the installed Git version satisfies
the caller-provided predicate. For incompatible versions, they require an
identity-matching archive, ignore GIX_TEST_IGNORE_ARCHIVES, and return None
instead of running the fixture script when no usable archive exists.
git --version each time a metadata directory is created.expand gix-testtools fixture support
Note that I did only skim through git.rs,
considering the details of the implementation secondary to the outcome.
gix.rs was refactored quite a bit, helping to provide more utilities
in other plumbing crates to help with this 'gix' avoidance.
Add deterministic repository snapshots covering HEAD, references, reachable
commits, every index stage, conflict-free index trees, and exact worktree
contents. Provide a portable form which omits platform-specific filesystem modes
for stable cross-platform assertions.
Add writable Git-version-aware fixture APIs for copy and execute creation modes.
Require archived fixtures when the selected Git is incompatible, without running
unsupported scripts or post-processing.
Use the Git executable selected by gix-path consistently for version checks,
helper commands, and fixture scripts, including PATH selection for scripts.
Harden signing fixtures with command-compatible paths, isolated homes, and
complete SSH key pairs.
git --version each time a metadata directory is created. (4314d09)gix-attributes (e11d7a2)This release also fixes compatibility issues that formerly prevented to fetch or clone form https://googlesource.com.
GIT_(COMMITTER|AUTHOR)_(NAME|EMAIL|DATE) with git configuration.
That way it becomes more obvious where values are coming from.<csr-id-98143699bb9481b010e21647f64dcb8a74bd80ad/> auto-enabled verbosity for gix fetch/clone and add --no-verbose.
I found myself always adding (and having to remember to add) the -v flag
for long-running operations so these should be able to default to a
higher verbosity level.
To counter that, there is a new --no-verbose flag to turn that off.
<csr-id-aeb4a1d5cb76316058c7d687e26f5c7db351c09c/> add --strict option to enforce strict checking of configuration.
<csr-id-8c9c243fc574dc17b92a8e2025fbd8efdf2833da/> gix odb stats to calculate statistics on the object database.
This includes the amount of objects along with a listing of where they are
located.
<csr-id-e2b8c5dce7185b5fa194b90f32e642e5c9d1227f/> gix clone --no-tags support.
This is the same as git clone --no-tags.
<csr-id-49f39d6bb487c0254176a5082f2c7851b83952a1/> open::ReplacementObjects is removed in favor of two custom git-configuration flags.
Now it's possible to map the environment variables GIT_REPLACE_REF_BASE and GIT_NO_REPLACE_OBJECTS
to custom git configuration keys which can also be set, namely gitoxide.odb.replaceObjectsRefBase
and gitoxide.odb.noReplaceObjects.
Along with the possibility of disabling the usage of GIT_ prefixed environment variables one
reaches the previous level of control without making object replacement a special case.
<csr-id-becbd8d896a1663f1607be4e86e632773e926f1f/> represent object cache configuration like GITOXIDE_PACK_CACHE_MEMORY in git-configuration.
That way there is a unified system for how to set values, which may be overridable by configuration
variables or not.
With this changes, the explicit application of environment variables for setting the cache isn't required anymore as everything happens using git-configuration, and automatically, while providing full control like before.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
ein t estimate-hours command (4c93de1)3d01252)gix odb stats to calculate statistics on the object database. (8c9c243)c57bdde)083909b)gix clone --no-tags support. (e2b8c5d)gix progress to inform about remote.<name>.tagOpt (3ebb340)70ccbb2)77ab98d)gix fetch/clone and add --no-verbose. (9814369)atty to is-terminal (7304bc1)git-repository (c4f68bf)GITOXIDE_PACK_CACHE_MEMORY in git-configuration. (becbd8d)GIT_(COMMITTER|AUTHOR)_(NAME|EMAIL|DATE) with git configuration. (a4ac9cf)open::ReplacementObjects is removed in favor of two custom git-configuration flags. (49f39d6)9441c26)git-repository (f1a4c8b)872dc1a)--strict option to enforce strict checking of configuration. (aeb4a1d)62cae0e)git-config (1c2e755)bcd9654)
</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>Make reqwest TLS backend configuration easy. We provide the choice of native-tls or rust-tls. If none is provided, the user can configure on their on
<csr-id-3ddbd2de369b521fa3f21935f10fe9c248840893/> Make reqwest TLS backend configuration easy.
We provide the choice of native-tls or rust-tls. If none is
provided, the user can configure on their on similar to how it's done
in gix.
Please note that a choice now has to be made or HTTPS will not be available, so use one of…
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
reqwest TLS backend configuration easy. (3ddbd2d)
</details>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)5861afb)891a061)aa16c8c)4f635fc)tracing spans for common operations. (3cffa26)
</details>This releases fixes gix fetch so that it is able to clone or fetch pytorch or other repositories on case-insensitive file systems.
This releases fixes gix fetch so that it is able to clone or fetch pytorch or other repositories on case-insensitive file systems.
It's also an attempt to trigger CI to build binary releases.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
665b53e)c76572b)gitoxide.http.connectTimeout for more control for git clients (2ab80e4)no_proxy environment variable support (f0625de)3d9fb6c)0ec5220)1c012f4)f5499a5)1afaebd)
</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>
2560a2c)298f3d7)
</details>gix remote ref-map --show-unmapped-remote-refs. That way it's more obvious to see what was filtered out by ref-specs.
<csr-id-e973dfeaf17ca63385496202e9fdcdd912e20f42/> gix remote ref-map --show-unmapped-remote-refs.
That way it's more obvious to see what was filtered out by ref-specs.
It's also great to validate that server-side filtering via ref-prefix will not send refs that are referred to by symbolic refs that are not filtered out. That should be fine as it's all about objects, it's just something to deal with as we may have to deal with symbolic refs that aren't in the set of refs the server sent to us.
<csr-id-b1edb9e3537df86669714f03666f4a88e0ac3709/> diff algorithm is controlled by git configuration diff.algorithm
<csr-id-20259da4ddf9fabfb2d2bd4e2274c0ed42bdb0e5/> ein t hours allows to specify the amount of worker threads.
<csr-id-3a053284cfefe27873dcc5b4f74d63a560bb5d41/> collect stderr and print it afterwards to avoid intersection with line progress.
Previously it would happen that stderr would be printed directly and mix
with the line progress (as in -v) which also prints to stderr.
Now errors are collected and output at the end once the line renderer was already shutdown.
lock_mode from all methods dealing with reference edits.
It is now read from core.filesRefLockTimeout accordingly.gix remote --url in favor of determining the intention similar to git fetch<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>
443a75a)gix remote ref-map --show-unmapped-remote-refs. (e973dfe)diff.algorithm (30d32e7)c8ef759)stderr and print it afterwards to avoid intersection with line progress. (3a05328)clone and print once entire clone is done (9a476df)gix clone (23a5e8b)63947ae)f5e2eeb)core.checkState (8b2aba1)de13c66)gix progress (0e9bd41)d10a82e)init.defaultBranch - now used by custom initialization. (4d6d7bb)gix fetch (c47dcc6)d034882)gix remote --url in favor of determining the intention similar to git fetch (92bbe33)--url for arbitrary urls when fetching (8c7351c)gix fetch (5b72d27)fd18320)lock_mode from all methods dealing with reference edits. (3a0fb1b)7076891)3c188b2)eade88f)6abd5a4)5c0d0ab)65e6496)b42b08a)317e02a)gix progress show (92e082a)ein t hours allows to specify the amount of worker threads. (20259da)ba17db0)index.version for when we can write V4 indices. (da96d34)ad44982)1ec27f8)extension.worktreeConfig (fe1e646)c4e6849)init.templateDir to gix progress (9fab050)ea2136b)def53b3)diff.algorithm (b1edb9e)fa27570)f53f942)git-diff for a 2x speedup when calculating line changes (296f3b6)gix progress records (b05a2e7)de4fe06)6225f35)da5f63c)c8d0345)8c24386)67f2247)01ab5ca)09d767a)507dc7e)1a1e862)clone. variables (8b804a3)702a161)53acf25)f47c891)3c49400)c5c0ac5)8ef3fcb)8dadd70)b862fc5)25a7726)
</details>State::into_entries().
It's useful to create standalone boxable iterators over entries
without having to clone.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
9a9fa96)8f15cec)420553a)2578e57)dbf8aa1)2087032)3ef5c90)3eff567)9375cd7)facaaf6)4f879bf)a849da8)State::into_entries(). (973bf70)
</details>docs.rs builds work again by correctly specifying serde dependency.
serde dependency.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
ein tool hours -s was split into -f|--file-stats and -l|line-stats. That way more information is generated at increasingly high costs.
ein tool hours -s was split into -f|--file-stats and -l|line-stats.
That way more information is generated at increasingly high costs.ein tool hours --stat to collect additional statistics per author.
Note that these are expensive and unconditionally use threads to speed
up these computations.ein tool hours -b ignores bots.
For now it only considers bots with names containing [bot].<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
11851f3)4720666)2237495)f4d8198)ref-map sub-command. (94c2b78)gix commands will now load the git installation configuration (23d2dec)7abc0a3)gix credential (642e21f)26489d1)cf7182e)ein tool hours -b ignores bots. (5d0332f)3773b92)gix index from-tree (2fbd3df)535e967)5c05198)bc64b96)56ba481)791dd66)
</details>Index::entries_mut_and_pathbacking().
With it one can read entries and read paths at the same time.<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)d7173b2)e4df557)91134a1)30a1a71)6ebd61e)14e64e7)8dbd0a6)5d2b5d0)cdef398)19338d9)27471e7)Index::entries_mut_and_pathbacking(). (9af47c3)691758a)1e19760)4736b60)bf8a7a4)9cb76e9)f2a9b3f)d7f250d)0f747f3)870bdb2)c49f12d)b574a39)d0052c1)bitflags version. (594cca5)
</details>3 commits contributed to the release.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
gix remote refs to list all remote references of a suitable remote. This takes into account either a named remote, or the remote associated with the c
<csr-id-f7f136dbe4f86e7dee1d54835c420ec07c96cd78/>
-c/--config in gixgix remote refs to list all remote references of a suitable remote.
This takes into account either a named remote, or the remote associated
with the current branch, or the default remote it could deduce or obtain
from the configuration.gix free remote ref-list in favor of gix remote refs
The functionality is the same, but the latter is built on top of a
repository which is slightly less flexible, but preferable over
maintaining a non-repo version.<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>
gix config. (19c1746)gix free remote ref-list in favor of gix remote refs (dda9957)-c/--config in gix (45a30f0)e0be6e9)df3cf18)gix remote refs to list all remote references of a suitable remote. (5d6d5ca)db4df25)gix remote refs without any implementation. (f8f1249)39d585d)bb6813a)e2ee3de)31c2351)b1c40b0)f7f136d)bd5f3e8)
</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>
29a0870)e06f5f5)
</details>Invert behaviour to open::Options::strict_config(), with lenient being the default. This means API users will get libgit2 behaviour but commands like
open::Options::strict_config(), with lenient being the default.
This means API users will get libgit2 behaviour but commands like gix can
change options to emulate git behaviour.--cat-file flag for gix rev parse to cat instead of resolving.gix rev previous-branches subcommandein tools to ein tool for as it's more intuitivegix rev resolve --explain<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
dbaff13)gix-config can be lenient. (6a9c58f)open::Options::strict_config(), with lenient being the default. (0235111)c4bf958)805f432)ein tools to ein tool for as it's more intuitive (edf73dd)a938986)a6d79e3)2f506c7)ce885ad)9b9ea02)6da8250)7b61506)47724c0)4e7b343)e9fcb70)
</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)04ab852)git-features (726b2cd)
</details>Adjustments due to breaking changes in git_path (`4420ae9`)
gix config with section and sub-section filtering.gix config lists all entries of all configuration files git considers.
Filters allow to narrow down the output.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 3 times to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
0c597fe)--show-ignore-patterns to gix repo exclude query (09f904b)exclude query (9cb8385)7d98b21)cb56f12)3ff991d)gix repo exclude query (a331314)50ff7aa)gix restructuring (59b95c9)gix config with section and sub-section filtering. (eda39ec)gix config lists all entries of all configuration files git considers. (d99453e)a437abe)8e5b796)5cf08ce)0ed65da)38a8350)72876f1)ac7d99a)c9c78e8)8967fcd)f99c3b2)83585bd)1cdecbc)141c5f1)f4e1810)faaf791)git_path (4420ae9)afecb63)48b3f4a)085e76b)0700b09)89ea12b)0e9df36)229dc91)41ea8ba)05eb340)7cb1972)251b6df)98da8ba)056e8d2)fdec111)4086335)e90d3fd)
</details><csr-id-41c8151451d55b47c0784e4799aec102e6ab9f29/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
ea9fd1d)e6cc618)3cfbf89)addd789)94c99c7)d686d94)btoi instead of atoi. (41c8151)56c005b)8ef1cb2)
</details>compatibility with bstr v1.3, use *.as_bytes() instead of .as_ref(). as_ref() relies on a known target type which isn't always present. However, once
bstr v1.3, use *.as_bytes() instead of .as_ref().
as_ref() relies on a known target type which isn't always present. However, once
there is only one implementation, that's no problem, but when that changes compilation
fails due to ambiguity.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
9604783)bstr v1.3, use *.as_bytes() instead of .as_ref(). (135d317)
</details>read shared indices by dissolving them into the current one. This allows the 'link' extension to be processed correctly, even though it won't be maint
<csr-id-dc3fd48327a16bf8599eaf70b55ab6c1d754e4bb/> <csr-id-4a6d46f3ab3d15eb851c92f7e49eb6772bc4023b/> <csr-id-6c17f96fcee9e2935b464c8ffbd30b253d9f5a6c/> <csr-id-533e887e80c5f7ede8392884562e1c5ba56fb9a8/>
impl Debug for State to print all entries in a digestible form.State::sort_entries_by(...) to allow comparing by additional criteria.
This allows to orgranize entries based on flags, for example, which may help
in special occasions.entry::Time can convert from and to system time.State::sort_entries() and State::dangerously_push_entry().
Both methods work in tandem as one breaks invariants, but allows to quickly
add entries, while the other restores them.State::entry_mut_by_path_and_stage()State::write_to() respects the REMOVED flag.
That way, one can mark entries for removal and these will be pruned
at write time. This is preferable over performing removals expensively
in memory.git_hash as hash in the root of the crate.
This makes it easier to use the crate standalone as plumbing as instantiation
requires access to git_hash.File::at_or_default(...) to easily open or create an empty in-memory index.
This is a common operation in new repositories.State::new() to create a new empty in-memory index.File::set_path() to allow setting the location of an index file on disk.
This is useful to change the location of an index after reading it (from another
location, similar to copy-on-write).Filedecode::Options::default_from_object_hash()
An easier way to initialize decode options, providing only the mandatory
information.File::write() for secure and complete writing of index files.Stage::entry_index_by_path_and_stage(), now with ::entry_by_path_and_stage()State::entry_by_path_and_stage() to find entries.Debug and Clone for FileState::path_backing().
That way it's possible to call certain methods that take a separate
path buffer.decode::Options::default() - remove Default impl.
The contained git_hash::Kind can't actually be defaulted as we
have to know the actual kind used in the repository.write::Options::default().
In practice it's required to inform about the hash kind to use and it's
possibly incorrect to assume Sha1.<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-3753ad58a8303fbf325b07757b2b97c34253bca4/> remove File::into_state() in favor of From<File> for State.
That way it's less discoverable, but more idiomatic, and we don't want to
get into the habit of providing multiple names of the exact same
functionality.
<csr-id-59f679126aba6f8a432aeb53f0bbd5d136ec1deb/> write::Options::object_hash is now implied by the State itself.
The State, once initialized, knows the kind of object hash it uses and
there is no need to specify it again.
This affects some method signatures which now work without
object_hash.
<csr-id-908163ab2f86a1b603e69f04cd857fbf52e5abfb/> decode::Options::object_hash is now a parameter to methods.
It's not actually an option that could be defaulted, but an integral
piece of knowledge that must always be defined by the caller.
This also makes decode::Options::default() available once again.
<csr-id-92dda50e2d9c584b0e110026f59fb715ec41600a/> seal File members to preserve consistency better.
This also makes sure that it's obvious if the checksum is actually
already computed.
<csr-id-99905bacace8aed42b16d43f0f04cae996cb971c/> upgrade bstr to 1.0.1
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
50411c8)b062bec)3baeab4)421d1ba)5fb2857)f928350)2d101eb)017e915)c644565)28c056c)d1063aa)d0725bd)2e13989)762efa3)791a9f8)1cc07e0)9277cf8)0b1543d)c2cc939)f54bf4b)3d61afe)ae3b697)ea86eb0)53df605)04279bf)625b89a)20ebb81)9d9cc95)c41b933)a1dc8de)7857d08)2e39184)59f46fe)ed2fe5d)223f2cc)3c7ba24)29c1af9)229cabe)8359fdb)a38c3b8)9e99e01)353a53c)e18a2fd)8971991)e1daf18)f7e2bdd)995994a)de84a3a)6fea17d)a22cb0f)30de988)99d7224)35bdee4)6f04f8b)06640e3)273853f)f865ef6)77a062c)da556b0)0a03f19)01036ad)53e2d75)620d2e6)e7e0679)a2ea498)49fcb6f)07e8fb2)c17240d)d4b3a07)9fdd34b)cc33752)9ffd523)79ca582)9b28b18)068c716)5c731f8)826ca0c)494ed46)fbfea28)b481f13)aa60fdf)3040857)84cb256)c71b2bb)State::path_backing(). (8ab219a)open_index() on Worktree, but… (ff76261)645ed50)9841efb)475aa6a)16a0973)f23b8d2)1367cf5)636fa8a)cdca1df)d0c4563)72b97f2)2e1437c)caa7a1b)rust-version to 1.64 (55066ce)d7a8a7d)48f5bd2)a5869e0)41d57b9)e313112)6efd0d3)6ccc88a)c9275b9)sort_entries_by (eb48b16)git-testtools to gix-testtools (b65c33d)git-pack to gix-pack (1ee81ad)git-odb to gix-odb (476e2ad)git-index to gix-index (86db5e0)git-index to gix-index (ecd3541)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)6461c3d)git-repository to gix (7bed2a9)c196d20)7c846d2)1e544e8)39ed9ed)e22080e)1fea18f)cec2547)5dc408f)dc3fd48)VerifiedBitmaps structure… (49cf105)5b5b380)93bef97)b93f0c4)9e04685)2b22d91)8aa5c1d)f191c1a)impl Debug for State to print all entries in a digestible form. (6d8eb9f)State::sort_entries_by(...) to allow comparing by additional criteria. (7c8ba2c)State::dangerously_push_entry() more aware. (b56de39)0e3d0a5)d679f5b)9eee8fe)entry::Time can convert from and to system time. (1e3341a)State::sort_entries() and State::dangerously_push_entry(). (654bd8f)9509891)State::entry_mut_by_path_and_stage() (aa1b6ee)State::write_to() respects the REMOVED flag. (3ebe2d4)git_hash as hash in the root of the crate. (ec36586)File::at_or_default(...) to easily open or create an empty in-memory index. (5cc3a15)State::new() to create a new empty in-memory index. (0b40951)File::into_state() in favor of From<File> for State. (3753ad5)File::set_path() to allow setting the location of an index file on disk. (a7183e2)5ac9fbe)30d8ca1)e6b9906)7114bbb)c57bdde)ede718c)d6ba366)c840c0d)083909b)5cab553)1057ee4)dfd00e5)800fc2b)resolve_link_extension function (c62a25b)fc89517)git-testtools (4eb842c)70ccbb2)be6c65c)7717170)6b9632e)7893502)726dd87)fd2dd3a)bcd9654)0abab7d)b2c301e)e4648f8)0e4462d)3d8fa8f)0c253b1)fe5721f)7c5b37d)f0cab31)f5f3a9e)255be4d)efe0a51)d071583)423af90)ba17db0)49b539b)177d1c8)0a74625)53af48c)e61957e)5406630)04cfa63)c4e6849)ea2136b)def53b3)checked_is_sparse() instead of cached is_sparse flag (e41ad0f)3683963)646b868)3173c0b)3e37443) state when writing. ([2012b27`](https://github.com/GitoxideLabs/gitoxide/commit/2012b27246e8835b19725862409d2df23a2638c6))a929bcf)5bfd947)4a6d46f)cd1c752)77a9d42)sdir extension (66a675f)sdirextension (762e4cb)ddaa003)5589a7f)8a8a53e)is_sparse access method for State (7f012cf)de4fe06)da5f63c)write::Options::object_hash is now implied by the State itself. (59f6791)decode::Options::object_hash is now a parameter to methods. (908163a)decode::Options::default_from_object_hash() (9e03110)6fb3255)File members to preserve consistency better. (92dda50)decode::Options::default() - remove Default impl. (bd312ac)fc5cee1)abc3cf8)b86012b)write::Options::default(). (2da5a62)File::write() for secure and complete writing of index files. (eedcffa)281f5b8)8c24386)08d5c0b)104d922)d232567)4bb3e8b)d686020)b9937ad)82fd251)25a7726)29a043b](https://github.com/GitYour coding agent can read these notes before it upgrades. Set up the MCP server →