summaryrefslogtreecommitdiffstats
path: root/vendor/gix-chunk
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 12:41:41 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 12:41:41 +0000
commit10ee2acdd26a7f1298c6f6d6b7af9b469fe29b87 (patch)
treebdffd5d80c26cf4a7a518281a204be1ace85b4c1 /vendor/gix-chunk
parentReleasing progress-linux version 1.70.0+dfsg1-9~progress7.99u1. (diff)
downloadrustc-10ee2acdd26a7f1298c6f6d6b7af9b469fe29b87.tar.xz
rustc-10ee2acdd26a7f1298c6f6d6b7af9b469fe29b87.zip
Merging upstream version 1.70.0+dfsg2.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/gix-chunk')
-rw-r--r--vendor/gix-chunk/.cargo-checksum.json1
-rw-r--r--vendor/gix-chunk/CHANGELOG.md256
-rw-r--r--vendor/gix-chunk/Cargo.toml32
-rw-r--r--vendor/gix-chunk/src/file/decode.rs105
-rw-r--r--vendor/gix-chunk/src/file/index.rs107
-rw-r--r--vendor/gix-chunk/src/file/mod.rs20
-rw-r--r--vendor/gix-chunk/src/file/write.rs136
-rw-r--r--vendor/gix-chunk/src/lib.rs36
8 files changed, 693 insertions, 0 deletions
diff --git a/vendor/gix-chunk/.cargo-checksum.json b/vendor/gix-chunk/.cargo-checksum.json
new file mode 100644
index 000000000..7036c621a
--- /dev/null
+++ b/vendor/gix-chunk/.cargo-checksum.json
@@ -0,0 +1 @@
+{"files":{"CHANGELOG.md":"497f373341ebaf8a737efa6ea1310116fdfb79788231edec49e0dfa0058385ae","Cargo.toml":"ca69ab7b9bc98e127f89965bff0a8926e485bc5202d228d026cf4a580e575f3a","src/file/decode.rs":"9a9907e439c4f93adba5e2ddca29c3baba4ff663f83730da6930d214a7379a56","src/file/index.rs":"64bb6baa2cc9c3e3eb57917814cd83eb94b35a439b8100011f7e3cb02185d949","src/file/mod.rs":"cc861890b41fcfc823f0a3c4de3dfe9a7ac36f00d5da1872013156b985108d4c","src/file/write.rs":"6f72e146dd53177ded39d1ff779f0bfb84eb6440adc2f9e61e7287fd2980990a","src/lib.rs":"cd8ad1bd7dd031f5571bcf748c864c56537b45a7aef6c42816392fb610963f98"},"package":"b0d39583cab06464b8bf73b3f1707458270f0e7383cb24c3c9c1a16e6f792978"} \ No newline at end of file
diff --git a/vendor/gix-chunk/CHANGELOG.md b/vendor/gix-chunk/CHANGELOG.md
new file mode 100644
index 000000000..681daab79
--- /dev/null
+++ b/vendor/gix-chunk/CHANGELOG.md
@@ -0,0 +1,256 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## 0.4.2 (2023-02-17)
+
+### Bug Fixes
+
+ - <csr-id-e14dc7d475373d2c266e84ff8f1826c68a34ab92/> note that crates have been renamed from `git-*` to `gix-*`.
+ This also means that the `git-*` prefixed crates of the `gitoxide` project
+ are effectively unmaintained.
+ Use the crates with the `gix-*` prefix instead.
+
+ If you were using `git-repository`, then `gix` is its substitute.
+
+## 0.4.1 (2023-02-17)
+
+<csr-id-f7f136dbe4f86e7dee1d54835c420ec07c96cd78/>
+
+### New Features (BREAKING)
+
+ - <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-9d9f2ee55202788910cd955cdcc08196d18f2cf5/> Use `[u8;4]` as chunk id
+ This allows to remove the additional string to describe the ids, which
+ are usually ascii anyway.
+
+### Changed (BREAKING)
+
+ - <csr-id-11b0f4afc993fe1eb1316839baaa15187483d420/> `file::Index::chunks` is not public anymore
+ The internal state is validated, and to assure that it can't be publicly
+ accessible.
+ - <csr-id-9328015c653cae582882c346965b51d7cf6b9d08/> rename `into_usize_range()` to `range::into_usize()`
+ - <csr-id-dda26a4ddd7cc195c10b79a7f428d6298285197b/> rename `Kind` to `Id`
+ This is more in line with gits terminology and feels quite natural to
+ use as well.
+
+### New Features
+
+ - <csr-id-389fea2addc94801e73a521b2ac9a8529e4fbb3d/> Facilities to write chunk files
+ This includes utilities to plan chunks for writing the table of
+ contents, and to get a hand when actually writing the chunks themselves
+ while assuring they are written into the correct spot.
+ - <csr-id-373a85003e0b293666283ef742762b13e1211fc5/> add `file::Index::size_for_entries()` const fn
+ This is useful for min-size checks of files that are to be loaded.
+ - <csr-id-e14096e0c19689a1e2480b484537b2a0ffbfc3b9/> add `file::Index::usize_offset_by_id()` and `range::into_usize_or_panic()`
+ - <csr-id-d0fab1e7f083088f607365ceec056e6e521cbdcc/> new file::Index::highest_offset() method
+ With it it's simpler to figure out from where to read trailing
+ checksums.
+
+### Chore
+
+ - <csr-id-f7f136dbe4f86e7dee1d54835c420ec07c96cd78/> uniformize deny attributes
+
+### Documentation
+
+ - <csr-id-39ed9eda62b7718d5109135e5ad406fb1fe2978c/> fix typos
+
+### Commit Statistics
+
+<csr-read-only-do-not-edit/>
+
+ - 99 commits contributed to the release over the course of 424 calendar days.
+ - 11 commits were understood as [conventional](https://www.conventionalcommits.org).
+ - 4 unique issues were worked on: [#279](https://github.com/Byron/gitoxide/issues/279), [#450](https://github.com/Byron/gitoxide/issues/450), [#470](https://github.com/Byron/gitoxide/issues/470), [#691](https://github.com/Byron/gitoxide/issues/691)
+
+### Commit Details
+
+<csr-read-only-do-not-edit/>
+
+<details><summary>view details</summary>
+
+ * **[#279](https://github.com/Byron/gitoxide/issues/279)**
+ - write progress for multi-pack writing ([`1bea1d4`](https://github.com/Byron/gitoxide/commit/1bea1d47908d3ec44c83b2e39a5b67134ad51ee0))
+ - Facilities to write chunk files ([`389fea2`](https://github.com/Byron/gitoxide/commit/389fea2addc94801e73a521b2ac9a8529e4fbb3d))
+ - multi-pack index writing complete with large-offset support ([`f7d5c7f`](https://github.com/Byron/gitoxide/commit/f7d5c7f815dbf52c668444b316ae2e1485463bcb))
+ - fix docs ([`b61a920`](https://github.com/Byron/gitoxide/commit/b61a9200d267865be76bdd2f36477c3940bc4dcc))
+ - Writing of chunk index ([`17a93c3`](https://github.com/Byron/gitoxide/commit/17a93c3f072c4e3a9a28cf8b11e44e065232b293))
+ - Sketch all the chunk-write API and use it from multi-index write ([`5457761`](https://github.com/Byron/gitoxide/commit/545776180f75cba87f7119f9bd862d39f081f1bd))
+ - `file::Index::chunks` is not public anymore ([`11b0f4a`](https://github.com/Byron/gitoxide/commit/11b0f4afc993fe1eb1316839baaa15187483d420))
+ - cargo fmt ([`8b9da35`](https://github.com/Byron/gitoxide/commit/8b9da35b3e0d3458efcac150f7062c9d7382a6c4))
+ - fix docs ([`cd981e2`](https://github.com/Byron/gitoxide/commit/cd981e222af237c47fcfb74258de8fdfc04dfc1b))
+ - add `file::Index::size_for_entries()` const fn ([`373a850`](https://github.com/Byron/gitoxide/commit/373a85003e0b293666283ef742762b13e1211fc5))
+ - refactor ([`8b8b4c5`](https://github.com/Byron/gitoxide/commit/8b8b4c538823fb4d2c37be80340d843080f08d19))
+ - add `file::Index::usize_offset_by_id()` and `range::into_usize_or_panic()` ([`e14096e`](https://github.com/Byron/gitoxide/commit/e14096e0c19689a1e2480b484537b2a0ffbfc3b9))
+ - rename `into_usize_range()` to `range::into_usize()` ([`9328015`](https://github.com/Byron/gitoxide/commit/9328015c653cae582882c346965b51d7cf6b9d08))
+ - rename `Kind` to `Id` ([`dda26a4`](https://github.com/Byron/gitoxide/commit/dda26a4ddd7cc195c10b79a7f428d6298285197b))
+ - update changelog ([`099f055`](https://github.com/Byron/gitoxide/commit/099f0559f835e5893cfc91d6d07216ed65db0790))
+ - Use `[u8;4]` as chunk id ([`9d9f2ee`](https://github.com/Byron/gitoxide/commit/9d9f2ee55202788910cd955cdcc08196d18f2cf5))
+ - new file::Index::highest_offset() method ([`d0fab1e`](https://github.com/Byron/gitoxide/commit/d0fab1e7f083088f607365ceec056e6e521cbdcc))
+ - refactor ([`7a9e628`](https://github.com/Byron/gitoxide/commit/7a9e628725c927d4fed8ef70e96ca2b802195bff))
+ - remove unnecessary test dependencies ([`463afcc`](https://github.com/Byron/gitoxide/commit/463afcc71419ce73719720192424bf5a6d37c69a))
+ - update changelog prior to release ([`6ae49e3`](https://github.com/Byron/gitoxide/commit/6ae49e39b2251ad70b72a8f3b3840ebb9334ffd9))
+ - remove empty tests ([`e30dcea`](https://github.com/Byron/gitoxide/commit/e30dcea6ca56b7bea175be11868e924317ab9974))
+ - read and validate fanout chunk ([`3ca04e3`](https://github.com/Byron/gitoxide/commit/3ca04e355a413975e55adf8b204d6962a9341d32))
+ - Read all mandatory and optional chunks ([`99023bb`](https://github.com/Byron/gitoxide/commit/99023bbde027be82e9217868df7f73ecd09bf705))
+ - Load chunk index of midx file ([`fac8efa`](https://github.com/Byron/gitoxide/commit/fac8efacb31935c2143717ebe82003a0916f233f))
+ - frame for git-chunk crate to share among git-pack and git-commitgraph ([`b2d2ae2`](https://github.com/Byron/gitoxide/commit/b2d2ae221d43cc14aa169ada3c471e2bd2adadf4))
+ * **[#450](https://github.com/Byron/gitoxide/issues/450)**
+ - replace `quick-error` with `thiserror` ([`bc45906`](https://github.com/Byron/gitoxide/commit/bc45906ea38adb82a7179cb6b92f7bc34b7e0371))
+ * **[#470](https://github.com/Byron/gitoxide/issues/470)**
+ - update changelogs prior to release ([`caa7a1b`](https://github.com/Byron/gitoxide/commit/caa7a1bdef74d7d3166a7e38127a59f5ab3cfbdd))
+ * **[#691](https://github.com/Byron/gitoxide/issues/691)**
+ - set `rust-version` to 1.64 ([`55066ce`](https://github.com/Byron/gitoxide/commit/55066ce5fd71209abb5d84da2998b903504584bb))
+ * **Uncategorized**
+ - Release gix-credentials v0.9.1, gix-diff v0.26.1, gix-discover v0.13.0, gix-hashtable v0.1.1, gix-bitmap v0.2.1, gix-traverse v0.22.1, gix-index v0.12.3, gix-mailmap v0.9.2, gix-chunk v0.4.1, gix-pack v0.30.2, gix-odb v0.40.2, gix-packetline v0.14.2, gix-transport v0.25.4, gix-protocol v0.26.3, gix-revision v0.10.3, gix-refspec v0.7.2, gix-worktree v0.12.2, gix v0.36.0 ([`a5869e0`](https://github.com/Byron/gitoxide/commit/a5869e0b223406820bca836e3e3a7fae2bfd9b04))
+ - Release gix-config v0.16.1, gix-command v0.2.3, gix-prompt v0.3.2, gix-url v0.13.2, gix-credentials v0.9.1, gix-diff v0.26.1, gix-discover v0.13.0, gix-hashtable v0.1.1, gix-bitmap v0.2.1, gix-traverse v0.22.1, gix-index v0.12.3, gix-mailmap v0.9.2, gix-chunk v0.4.1, gix-pack v0.30.2, gix-odb v0.40.2, gix-packetline v0.14.2, gix-transport v0.25.4, gix-protocol v0.26.3, gix-revision v0.10.3, gix-refspec v0.7.2, gix-worktree v0.12.2, gix v0.36.0 ([`41d57b9`](https://github.com/Byron/gitoxide/commit/41d57b98964094fc1528adb09f69ca824229bf25))
+ - Release gix-attributes v0.8.2, gix-config-value v0.10.1, gix-tempfile v3.0.2, gix-lock v3.0.2, gix-validate v0.7.2, gix-object v0.26.1, gix-ref v0.24.0, gix-sec v0.6.2, gix-config v0.16.1, gix-command v0.2.3, gix-prompt v0.3.2, gix-url v0.13.2, gix-credentials v0.9.1, gix-diff v0.26.1, gix-discover v0.13.0, gix-hashtable v0.1.1, gix-bitmap v0.2.1, gix-traverse v0.22.1, gix-index v0.12.3, gix-mailmap v0.9.2, gix-chunk v0.4.1, gix-pack v0.30.2, gix-odb v0.40.2, gix-packetline v0.14.2, gix-transport v0.25.4, gix-protocol v0.26.3, gix-revision v0.10.3, gix-refspec v0.7.2, gix-worktree v0.12.2, gix v0.36.0 ([`e313112`](https://github.com/Byron/gitoxide/commit/e31311257bd138b52042dea5fc40c3abab7f269b))
+ - Release gix-features v0.26.4, gix-actor v0.17.1, gix-glob v0.5.3, gix-path v0.7.1, gix-quote v0.4.1, gix-attributes v0.8.2, gix-config-value v0.10.1, gix-tempfile v3.0.2, gix-lock v3.0.2, gix-validate v0.7.2, gix-object v0.26.1, gix-ref v0.24.0, gix-sec v0.6.2, gix-config v0.16.1, gix-command v0.2.3, gix-prompt v0.3.2, gix-url v0.13.2, gix-credentials v0.9.1, gix-diff v0.26.1, gix-discover v0.13.0, gix-hashtable v0.1.1, gix-bitmap v0.2.1, gix-traverse v0.22.1, gix-index v0.12.3, gix-mailmap v0.9.2, gix-chunk v0.4.1, gix-pack v0.30.2, gix-odb v0.40.2, gix-packetline v0.14.2, gix-transport v0.25.4, gix-protocol v0.26.3, gix-revision v0.10.3, gix-refspec v0.7.2, gix-worktree v0.12.2, gix v0.36.0 ([`6efd0d3`](https://github.com/Byron/gitoxide/commit/6efd0d31fbeca31ab7319aa2ac97bb31dc4ce055))
+ - Release gix-date v0.4.2, gix-hash v0.10.2, gix-features v0.26.4, gix-actor v0.17.1, gix-glob v0.5.3, gix-path v0.7.1, gix-quote v0.4.1, gix-attributes v0.8.2, gix-config-value v0.10.1, gix-tempfile v3.0.2, gix-lock v3.0.2, gix-validate v0.7.2, gix-object v0.26.1, gix-ref v0.24.0, gix-sec v0.6.2, gix-config v0.16.1, gix-command v0.2.3, gix-prompt v0.3.2, gix-url v0.13.2, gix-credentials v0.9.1, gix-diff v0.26.1, gix-discover v0.13.0, gix-hashtable v0.1.1, gix-bitmap v0.2.1, gix-traverse v0.22.1, gix-index v0.12.3, gix-mailmap v0.9.2, gix-chunk v0.4.1, gix-pack v0.30.2, gix-odb v0.40.2, gix-packetline v0.14.2, gix-transport v0.25.4, gix-protocol v0.26.3, gix-revision v0.10.3, gix-refspec v0.7.2, gix-worktree v0.12.2, gix v0.36.0 ([`6ccc88a`](https://github.com/Byron/gitoxide/commit/6ccc88a8e4a56973b1a358cf72dc012ee3c75d56))
+ - Merge branch 'rename-crates' into inform-about-gix-rename ([`c9275b9`](https://github.com/Byron/gitoxide/commit/c9275b99ea43949306d93775d9d78c98fb86cfb1))
+ - rename `git-testtools` to `gix-testtools` ([`b65c33d`](https://github.com/Byron/gitoxide/commit/b65c33d256cfed65d11adeff41132e3e58754089))
+ - adjust to renaming of `git-pack` to `gix-pack` ([`1ee81ad`](https://github.com/Byron/gitoxide/commit/1ee81ad310285ee4aa118118a2be3810dbace574))
+ - adjust to renaming of `git-odb` to `gix-odb` ([`476e2ad`](https://github.com/Byron/gitoxide/commit/476e2ad1a64e9e3f0d7c8651d5bcbee36cd78241))
+ - adjust to renaming of `git-index` to `gix-index` ([`86db5e0`](https://github.com/Byron/gitoxide/commit/86db5e09fc58ce66b252dc13b8d7e2c48e4d5062))
+ - adjust to renaming of `git-diff` to `gix-diff` ([`49a163e`](https://github.com/Byron/gitoxide/commit/49a163ec8b18f0e5fcd05a315de16d5d8be7650e))
+ - adjust to renaming of `git-commitgraph` to `gix-commitgraph` ([`f1dd0a3`](https://github.com/Byron/gitoxide/commit/f1dd0a3366e31259af029da73228e8af2f414244))
+ - adjust to renaming of `git-mailmap` to `gix-mailmap` ([`2e28c56`](https://github.com/Byron/gitoxide/commit/2e28c56bb9f70de6f97439818118d3a25859698f))
+ - adjust to renaming of `git-discover` to `gix-discover` ([`53adfe1`](https://github.com/Byron/gitoxide/commit/53adfe1c34e9ea3b27067a97b5e7ac80b351c441))
+ - adjust to renaming of `git-chunk` to `gix-chunk` ([`59194e3`](https://github.com/Byron/gitoxide/commit/59194e3a07853eae0624ebc4907478d1de4f7599))
+ - rename `git-chunk` to `gix-chunk` ([`0f98d23`](https://github.com/Byron/gitoxide/commit/0f98d23194c9887b7c870cacb6b2e58e41b6ad1f))
+ - adjust to renaming of `git-bitmap` to `gix-bitmap` ([`75f2a07`](https://github.com/Byron/gitoxide/commit/75f2a079b17489f62bc43e1f1d932307375c4f9d))
+ - adjust to renaming for `git-protocol` to `gix-protocol` ([`823795a`](https://github.com/Byron/gitoxide/commit/823795addea3810243cab7936cd8ec0137cbc224))
+ - adjust to renaming of `git-refspec` to `gix-refspec` ([`c958802`](https://github.com/Byron/gitoxide/commit/c9588020561577736faa065e7e5b5bb486ca8fe1))
+ - adjust to renaming of `git-revision` to `gix-revision` ([`ee0ee84`](https://github.com/Byron/gitoxide/commit/ee0ee84607c2ffe11ee75f27a31903db68afed02))
+ - adjust to renaming of `git-transport` to `gix-transport` ([`b2ccf71`](https://github.com/Byron/gitoxide/commit/b2ccf716dc4425bb96651d4d58806a3cc2da219e))
+ - adjust to renaming of `git-credentials` to `gix-credentials` ([`6b18abc`](https://github.com/Byron/gitoxide/commit/6b18abcf2856f02ab938d535a65e51ac282bf94a))
+ - adjust to renaming of `git-prompt` to `gix-prompt` ([`6a4654e`](https://github.com/Byron/gitoxide/commit/6a4654e0d10ab773dd219cb4b731c0fc1471c36d))
+ - adjust to renaming of `git-command` to `gix-command` ([`d26b8e0`](https://github.com/Byron/gitoxide/commit/d26b8e046496894ae06b0bbfdba77196976cd975))
+ - adjust to renaming of `git-packetline` to `gix-packetline` ([`5cbd22c`](https://github.com/Byron/gitoxide/commit/5cbd22cf42efb760058561c6c3bbcd4dab8c8be1))
+ - adjust to renaming of `git-worktree` to `gix-worktree` ([`73a1282`](https://github.com/Byron/gitoxide/commit/73a12821b3d9b66ec1714d07dd27eb7a73e3a544))
+ - adjust to renamining of `git-worktree` to `gix-worktree` ([`108bb1a`](https://github.com/Byron/gitoxide/commit/108bb1a634f4828853fb590e9fc125f79441dd38))
+ - adjust to renaming of `git-url` to `gix-url` ([`b50817a`](https://github.com/Byron/gitoxide/commit/b50817aadb143e19f61f64e19b19ec1107d980c6))
+ - adjust to renaming of `git-date` to `gix-date` ([`9a79ff2`](https://github.com/Byron/gitoxide/commit/9a79ff2d5cc74c1efad9f41e21095ae498cce00b))
+ - adjust to renamining of `git-attributes` to `gix-attributes` ([`4a8b3b8`](https://github.com/Byron/gitoxide/commit/4a8b3b812ac26f2a2aee8ce8ca81591273383c84))
+ - adjust to renaminig of `git-quote` to `gix-quote` ([`648025b`](https://github.com/Byron/gitoxide/commit/648025b7ca94411fdd0d90c53e5faede5fde6c8d))
+ - adjust to renaming of `git-config` to `gix-config` ([`3a861c8`](https://github.com/Byron/gitoxide/commit/3a861c8f049f6502d3bcbdac752659aa1aeda46a))
+ - adjust to renaming of `git-ref` to `gix-ref` ([`1f5f695`](https://github.com/Byron/gitoxide/commit/1f5f695407b034377d94b172465ff573562b3fc3))
+ - adjust to renaming of `git-lock` to `gix-lock` ([`2028e78`](https://github.com/Byron/gitoxide/commit/2028e7884ae1821edeec81612f501e88e4722b17))
+ - adjust to renaming of `git-tempfile` to `gix-tempfile` ([`b6cc3eb`](https://github.com/Byron/gitoxide/commit/b6cc3ebb5137084a6327af16a7d9364d8f092cc9))
+ - adjust to renaming of `git-object` to `gix-object` ([`fc86a1e`](https://github.com/Byron/gitoxide/commit/fc86a1e710ad7bf076c25cc6f028ddcf1a5a4311))
+ - adjust to renaming of `git-actor` to `gix-actor` ([`4dc9b44`](https://github.com/Byron/gitoxide/commit/4dc9b44dc52f2486ffa2040585c6897c1bf55df4))
+ - adjust to renaming of `git-validate` to `gix-validate` ([`5e40ad0`](https://github.com/Byron/gitoxide/commit/5e40ad078af3d08cbc2ca81ce755c0ed8a065b4f))
+ - adjust to renaming of `git-hash` to `gix-hash` ([`4a9d025`](https://github.com/Byron/gitoxide/commit/4a9d0257110c3efa61d08c8457c4545b200226d1))
+ - adjust to renaming of `git-features` to `gix-features` ([`e2dd68a`](https://github.com/Byron/gitoxide/commit/e2dd68a417aad229e194ff20dbbfd77668096ec6))
+ - adjust to renaming of `git-glob` to `gix-glob` ([`35b2a3a`](https://github.com/Byron/gitoxide/commit/35b2a3acbc8f2a03f151bc0a3863163844e0ca86))
+ - adjust to renaming of `git-sec` to `gix-sec` ([`eabbb92`](https://github.com/Byron/gitoxide/commit/eabbb923bd5a32fc80fa80f96cfdc2ab7bb2ed17))
+ - adapt to renaming of `git-path` to `gix-path` ([`d3bbcfc`](https://github.com/Byron/gitoxide/commit/d3bbcfccad80fc44ea8e7bf819f23adaca06ba2d))
+ - adjust to rename of `git-config-value` to `gix-config-value` ([`622b3e1`](https://github.com/Byron/gitoxide/commit/622b3e1d0bffa0f8db73697960f9712024fac430))
+ - Release git-date v0.4.2, git-hash v0.10.2, git-features v0.26.2, git-actor v0.17.1, git-glob v0.5.3, git-path v0.7.1, git-quote v0.4.1, git-attributes v0.8.2, git-config-value v0.10.1, git-tempfile v3.0.2, git-lock v3.0.2, git-validate v0.7.2, git-object v0.26.1, git-ref v0.24.0, git-sec v0.6.2, git-config v0.16.0, git-command v0.2.3, git-prompt v0.3.2, git-url v0.13.2, git-credentials v0.9.1, git-diff v0.26.1, git-discover v0.13.0, git-hashtable v0.1.1, git-bitmap v0.2.1, git-traverse v0.22.1, git-index v0.12.3, git-mailmap v0.9.2, git-chunk v0.4.1, git-pack v0.30.2, git-odb v0.40.2, git-packetline v0.14.2, git-transport v0.25.4, git-protocol v0.26.3, git-revision v0.10.2, git-refspec v0.7.2, git-worktree v0.12.2, git-repository v0.34.0, safety bump 3 crates ([`c196d20`](https://github.com/Byron/gitoxide/commit/c196d206d57a310b1ce974a1cf0e7e6d6db5c4d6))
+ - prepare changelogs prior to release ([`7c846d2`](https://github.com/Byron/gitoxide/commit/7c846d2102dc767366771925212712ef8cc9bf07))
+ - Merge branch 'Lioness100/main' ([`1e544e8`](https://github.com/Byron/gitoxide/commit/1e544e82455bf9ecb5e3c2146280eaf7ecd81f16))
+ - fix typos ([`39ed9ed`](https://github.com/Byron/gitoxide/commit/39ed9eda62b7718d5109135e5ad406fb1fe2978c))
+ - Merge branch 'main' into http-config ([`bcd9654`](https://github.com/Byron/gitoxide/commit/bcd9654e56169799eb706646da6ee1f4ef2021a9))
+ - Release git-hash v0.10.0, git-features v0.24.0, git-date v0.3.0, git-actor v0.14.0, git-glob v0.5.0, git-path v0.6.0, git-quote v0.4.0, git-attributes v0.6.0, git-config-value v0.9.0, git-tempfile v3.0.0, git-lock v3.0.0, git-validate v0.7.0, git-object v0.23.0, git-ref v0.20.0, git-sec v0.5.0, git-config v0.12.0, git-command v0.2.0, git-prompt v0.2.0, git-url v0.11.0, git-credentials v0.7.0, git-diff v0.23.0, git-discover v0.9.0, git-bitmap v0.2.0, git-traverse v0.19.0, git-index v0.9.0, git-mailmap v0.6.0, git-chunk v0.4.0, git-pack v0.27.0, git-odb v0.37.0, git-packetline v0.14.0, git-transport v0.23.0, git-protocol v0.24.0, git-revision v0.7.0, git-refspec v0.4.0, git-worktree v0.9.0, git-repository v0.29.0, git-commitgraph v0.11.0, gitoxide-core v0.21.0, gitoxide v0.19.0, safety bump 28 crates ([`b2c301e`](https://github.com/Byron/gitoxide/commit/b2c301ef131ffe1871314e19f387cf10a8d2ac16))
+ - prepare changelogs prior to release ([`e4648f8`](https://github.com/Byron/gitoxide/commit/e4648f827c97e9d13636d1bbdc83dd63436e6e5c))
+ - Merge branch 'version2021' ([`0e4462d`](https://github.com/Byron/gitoxide/commit/0e4462df7a5166fe85c23a779462cdca8ee013e8))
+ - upgrade edition to 2021 in most crates. ([`3d8fa8f`](https://github.com/Byron/gitoxide/commit/3d8fa8fef9800b1576beab8a5bc39b821157a5ed))
+ - Merge branch 'diff' ([`25a7726`](https://github.com/Byron/gitoxide/commit/25a7726377fbe400ea3c4927d04e9dec99802b7b))
+ - Release git-command v0.1.0, git-prompt v0.1.0, git-url v0.9.0, git-credentials v0.5.0, git-diff v0.19.0, git-mailmap v0.4.0, git-chunk v0.3.2, git-pack v0.23.0, git-odb v0.33.0, git-packetline v0.13.0, git-transport v0.20.0, git-protocol v0.20.0, git-revision v0.5.0, git-refspec v0.2.0, git-repository v0.24.0, git-commitgraph v0.9.0, gitoxide-core v0.18.0, gitoxide v0.16.0 ([`f5c36d8`](https://github.com/Byron/gitoxide/commit/f5c36d85755d1f0f503b77d9a565fad6aecf6728))
+ - Release git-hash v0.9.10, git-features v0.22.5, git-date v0.2.0, git-actor v0.12.0, git-glob v0.4.0, git-path v0.5.0, git-quote v0.3.0, git-attributes v0.4.0, git-config-value v0.8.0, git-tempfile v2.0.5, git-validate v0.6.0, git-object v0.21.0, git-ref v0.16.0, git-sec v0.4.0, git-config v0.8.0, git-discover v0.5.0, git-traverse v0.17.0, git-index v0.5.0, git-worktree v0.5.0, git-testtools v0.9.0, git-command v0.1.0, git-prompt v0.1.0, git-url v0.9.0, git-credentials v0.5.0, git-diff v0.19.0, git-mailmap v0.4.0, git-chunk v0.3.2, git-pack v0.23.0, git-odb v0.33.0, git-packetline v0.13.0, git-transport v0.20.0, git-protocol v0.20.0, git-revision v0.5.0, git-refspec v0.2.0, git-repository v0.24.0, git-commitgraph v0.9.0, gitoxide-core v0.18.0, gitoxide v0.16.0, safety bump 28 crates ([`29a043b`](https://github.com/Byron/gitoxide/commit/29a043be6808a3e9199a9b26bd076fe843afe4f4))
+ - Merge branch 'filter-refs' ([`e10554d`](https://github.com/Byron/gitoxide/commit/e10554d2a3b9c027353a432b0c84f7d3797b7cae))
+ - Merge branch 'main' into index-from-tree ([`bc64b96`](https://github.com/Byron/gitoxide/commit/bc64b96a2ec781c72d1d4daad38aa7fb8b74f99b))
+ - Merge branch 'main' into filter-refs-by-spec ([`cfa1440`](https://github.com/Byron/gitoxide/commit/cfa144031dbcac2707ab0cec012bc35e78f9c475))
+ - Release git-date v0.0.5, git-hash v0.9.8, git-features v0.22.2, git-actor v0.11.3, git-glob v0.3.2, git-quote v0.2.1, git-attributes v0.3.2, git-tempfile v2.0.4, git-lock v2.1.1, git-validate v0.5.5, git-object v0.20.2, git-ref v0.15.2, git-sec v0.3.1, git-config v0.7.0, git-credentials v0.4.0, git-diff v0.17.2, git-discover v0.4.1, git-bitmap v0.1.2, git-index v0.4.2, git-mailmap v0.3.2, git-chunk v0.3.1, git-traverse v0.16.2, git-pack v0.21.2, git-odb v0.31.2, git-packetline v0.12.7, git-url v0.7.2, git-transport v0.19.2, git-protocol v0.19.0, git-revision v0.4.2, git-refspec v0.1.0, git-worktree v0.4.2, git-repository v0.22.0, safety bump 4 crates ([`4974eca`](https://github.com/Byron/gitoxide/commit/4974eca96d525d1ee4f8cad79bb713af7a18bf9d))
+ - Merge branch 'main' into remote-ls-refs ([`e2ee3de`](https://github.com/Byron/gitoxide/commit/e2ee3ded97e5c449933712883535b30d151c7c78))
+ - Merge branch 'docsrs-show-features' ([`31c2351`](https://github.com/Byron/gitoxide/commit/31c235140cad212d16a56195763fbddd971d87ce))
+ - uniformize deny attributes ([`f7f136d`](https://github.com/Byron/gitoxide/commit/f7f136dbe4f86e7dee1d54835c420ec07c96cd78))
+ - Release git-diff v0.13.0, git-tempfile v1.0.4, git-chunk v0.3.0, git-traverse v0.12.0, git-pack v0.16.0, git-odb v0.26.0, git-packetline v0.12.3, git-url v0.3.5, git-transport v0.15.0, git-protocol v0.14.0, git-ref v0.11.0, git-repository v0.14.0, cargo-smart-release v0.8.0 ([`1b76119`](https://github.com/Byron/gitoxide/commit/1b76119259b8168aeb99cbbec233f7ddaa2d7d2c))
+ - Release git-actor v0.8.0, git-config v0.1.10, git-object v0.17.0, git-diff v0.13.0, git-tempfile v1.0.4, git-chunk v0.3.0, git-traverse v0.12.0, git-pack v0.16.0, git-odb v0.26.0, git-packetline v0.12.3, git-url v0.3.5, git-transport v0.15.0, git-protocol v0.14.0, git-ref v0.11.0, git-repository v0.14.0, cargo-smart-release v0.8.0 ([`8f57c29`](https://github.com/Byron/gitoxide/commit/8f57c297d7d6ed68cf51415ea7ede4bf9263326e))
+ - Release git-features v0.19.1, git-actor v0.8.0, git-config v0.1.10, git-object v0.17.0, git-diff v0.13.0, git-tempfile v1.0.4, git-chunk v0.3.0, git-traverse v0.12.0, git-pack v0.16.0, git-odb v0.26.0, git-packetline v0.12.3, git-url v0.3.5, git-transport v0.15.0, git-protocol v0.14.0, git-ref v0.11.0, git-repository v0.14.0, cargo-smart-release v0.8.0 ([`d78aab7`](https://github.com/Byron/gitoxide/commit/d78aab7b9c4b431d437ac70a0ef96263acb64e46))
+ - Release git-hash v0.9.1, git-features v0.19.1, git-actor v0.8.0, git-config v0.1.10, git-object v0.17.0, git-diff v0.13.0, git-tempfile v1.0.4, git-chunk v0.3.0, git-traverse v0.12.0, git-pack v0.16.0, git-odb v0.26.0, git-packetline v0.12.3, git-url v0.3.5, git-transport v0.15.0, git-protocol v0.14.0, git-ref v0.11.0, git-repository v0.14.0, cargo-smart-release v0.8.0, safety bump 4 crates ([`373cbc8`](https://github.com/Byron/gitoxide/commit/373cbc877f7ad60dac682e57c52a7b90f108ebe3))
+ - prepar changelogs for cargo-smart-release release ([`8900d69`](https://github.com/Byron/gitoxide/commit/8900d699226eb0995be70d66249827ce348261df))
+ - Release git-chunk v0.2.0, safety bump 4 crates ([`b792fab`](https://github.com/Byron/gitoxide/commit/b792fabf9f5f93ab906ac5a5bb3e4f01c179290a))
+ - Release git-chunk v0.1.0 ([`544f4a9`](https://github.com/Byron/gitoxide/commit/544f4a9c694e96236a4c7fe8b68fdfc229d76f25))
+ - thanks clippy ([`35cf46f`](https://github.com/Byron/gitoxide/commit/35cf46f87ecc42cf033ca001acf1b5918b3fea1b))
+</details>
+
+## 0.4.0 (2022-11-21)
+
+### New Features (BREAKING)
+
+ - <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 `gix-features` and `gix-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.
+
+## 0.3.2 (2022-09-20)
+
+Maintenance release without observable changes.
+
+## 0.3.1 (2022-08-24)
+
+<csr-id-f7f136dbe4f86e7dee1d54835c420ec07c96cd78/>
+
+### Chore
+
+ - <csr-id-f7f136dbe4f86e7dee1d54835c420ec07c96cd78/> uniformize deny attributes
+
+## 0.3.0 (2022-01-23)
+
+### New Features
+
+ - <csr-id-389fea2addc94801e73a521b2ac9a8529e4fbb3d/> Facilities to write chunk files
+ This includes utilities to plan chunks for writing the table of
+ contents, and to get a hand when actually writing the chunks themselves
+ while assuring they are written into the correct spot.
+ - <csr-id-373a85003e0b293666283ef742762b13e1211fc5/> add `file::Index::size_for_entries()` const fn
+ This is useful for min-size checks of files that are to be loaded.
+ - <csr-id-e14096e0c19689a1e2480b484537b2a0ffbfc3b9/> add `file::Index::usize_offset_by_id()` and `range::into_usize_or_panic()`
+
+### Changed (BREAKING)
+
+ - <csr-id-11b0f4afc993fe1eb1316839baaa15187483d420/> `file::Index::chunks` is not public anymore
+ The internal state is validated, and to assure that it can't be publicly
+ accessible.
+ - <csr-id-9328015c653cae582882c346965b51d7cf6b9d08/> rename `into_usize_range()` to `range::into_usize()`
+ - <csr-id-dda26a4ddd7cc195c10b79a7f428d6298285197b/> rename `Kind` to `Id`
+ This is more in line with gits terminology and feels quite natural to
+ use as well.
+
+## 0.2.0 (2021-12-20)
+
+### New Features
+
+ - <csr-id-d0fab1e7f083088f607365ceec056e6e521cbdcc/> new `file::Index::highest_offset()` method
+ With it it's simpler to figure out from where to read trailing
+ checksums.
+
+### New Features (BREAKING)
+
+ - <csr-id-9d9f2ee55202788910cd955cdcc08196d18f2cf5/> Use `[u8;4]` as chunk id
+ This allows to remove the additional string to describe the ids, which
+ are usually ascii anyway.
+
+## 0.1.0 (2021-12-20)
+
+Initial release with enough functionality to handle multi-pack indices and commitgraph files.
+
diff --git a/vendor/gix-chunk/Cargo.toml b/vendor/gix-chunk/Cargo.toml
new file mode 100644
index 000000000..c248cd94d
--- /dev/null
+++ b/vendor/gix-chunk/Cargo.toml
@@ -0,0 +1,32 @@
+# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
+#
+# When uploading crates to the registry Cargo will automatically
+# "normalize" Cargo.toml files for maximal compatibility
+# with all versions of Cargo and also rewrite `path` dependencies
+# to registry (e.g., crates.io) dependencies.
+#
+# If you are reading this file be aware that the original Cargo.toml
+# will likely look very different (and much more reasonable).
+# See Cargo.toml.orig for the original contents.
+
+[package]
+edition = "2021"
+rust-version = "1.64"
+name = "gix-chunk"
+version = "0.4.1"
+authors = ["Sebastian Thiel <sebastian.thiel@icloud.com>"]
+include = [
+ "src/**/*",
+ "CHANGELOG.md",
+]
+description = "Interact with the git chunk file format used in multi-pack index and commit-graph files"
+documentation = "https://github.com/git/git/blob/seen/Documentation/technical/chunk-format.txt"
+license = "MIT/Apache-2.0"
+repository = "https://github.com/Byron/gitoxide"
+
+[lib]
+test = false
+doctest = false
+
+[dependencies.thiserror]
+version = "1.0.34"
diff --git a/vendor/gix-chunk/src/file/decode.rs b/vendor/gix-chunk/src/file/decode.rs
new file mode 100644
index 000000000..1543ac9be
--- /dev/null
+++ b/vendor/gix-chunk/src/file/decode.rs
@@ -0,0 +1,105 @@
+use std::{convert::TryInto, ops::Range};
+
+mod error {
+ /// The value returned by [crate::FileRef::from_bytes()
+ #[derive(Debug, thiserror::Error)]
+ #[allow(missing_docs)]
+ pub enum Error {
+ #[error("Sentinel value encountered while still processing chunks.")]
+ EarlySentinelValue,
+ #[error("Sentinel value wasn't found, saw {:?}", std::str::from_utf8(actual.as_ref()).unwrap_or("<non-ascii>"))]
+ MissingSentinelValue { actual: crate::Id },
+ #[error("The chunk offset {offset} went past the file of length {file_length} - was it truncated?")]
+ ChunkSizeOutOfBounds {
+ offset: crate::file::Offset,
+ file_length: u64,
+ },
+ #[error("All chunk offsets must be incrementing.")]
+ NonIncrementalChunkOffsets,
+ #[error("The chunk of kind {:?} was encountered more than once", std::str::from_utf8(kind.as_ref()).unwrap_or("<non-ascii>"))]
+ DuplicateChunk { kind: crate::Id },
+ #[error("The table of contents would be {expected} bytes, but got only {actual}")]
+ TocTooSmall { actual: usize, expected: usize },
+ #[error("Empty chunk indices are not allowed as the point of chunked files is to have chunks.")]
+ Empty,
+ }
+}
+pub use error::Error;
+
+use crate::{file, file::index};
+
+impl file::Index {
+ /// Provided a mapped file at the beginning via `data`, starting at `toc_offset` decode all chunk information to return
+ /// an index with `num_chunks` chunks.
+ pub fn from_bytes(data: &[u8], toc_offset: usize, num_chunks: u32) -> Result<Self, Error> {
+ if num_chunks == 0 {
+ return Err(Error::Empty);
+ }
+
+ let data_len: u64 = data.len() as u64;
+ let mut chunks = Vec::with_capacity(num_chunks as usize);
+ let mut toc_entry = &data[toc_offset..];
+ let expected_min_size = (num_chunks as usize + 1) * file::Index::ENTRY_SIZE;
+ if toc_entry.len() < expected_min_size {
+ return Err(Error::TocTooSmall {
+ expected: expected_min_size,
+ actual: toc_entry.len(),
+ });
+ }
+
+ for _ in 0..num_chunks {
+ let (kind, offset) = toc_entry.split_at(4);
+ let kind = to_kind(kind);
+ if kind == crate::SENTINEL {
+ return Err(Error::EarlySentinelValue);
+ }
+ if chunks.iter().any(|c: &index::Entry| c.kind == kind) {
+ return Err(Error::DuplicateChunk { kind });
+ }
+
+ let offset = be_u64(offset);
+ if offset > data_len {
+ return Err(Error::ChunkSizeOutOfBounds {
+ offset,
+ file_length: data_len,
+ });
+ }
+ toc_entry = &toc_entry[file::Index::ENTRY_SIZE..];
+ let next_offset = be_u64(&toc_entry[4..]);
+ if next_offset > data_len {
+ return Err(Error::ChunkSizeOutOfBounds {
+ offset: next_offset,
+ file_length: data_len,
+ });
+ }
+ if next_offset <= offset {
+ return Err(Error::NonIncrementalChunkOffsets);
+ }
+ chunks.push(index::Entry {
+ kind,
+ offset: Range {
+ start: offset,
+ end: next_offset,
+ },
+ })
+ }
+
+ let sentinel = to_kind(&toc_entry[..4]);
+ if sentinel != crate::SENTINEL {
+ return Err(Error::MissingSentinelValue { actual: sentinel });
+ }
+
+ Ok(file::Index {
+ chunks,
+ will_write: false,
+ })
+ }
+}
+
+fn to_kind(data: &[u8]) -> crate::Id {
+ data[..4].try_into().unwrap()
+}
+
+fn be_u64(data: &[u8]) -> u64 {
+ u64::from_be_bytes(data[..8].try_into().unwrap())
+}
diff --git a/vendor/gix-chunk/src/file/index.rs b/vendor/gix-chunk/src/file/index.rs
new file mode 100644
index 000000000..5b59f6767
--- /dev/null
+++ b/vendor/gix-chunk/src/file/index.rs
@@ -0,0 +1,107 @@
+use std::ops::Range;
+
+use crate::file::Index;
+
+///
+pub mod offset_by_kind {
+ use std::fmt::{Display, Formatter};
+
+ /// The error returned by [Index::offset_by_kind()][super::Index::offset_by_id()].
+ #[allow(missing_docs)]
+ #[derive(Debug)]
+ pub struct Error {
+ pub kind: crate::Id,
+ }
+
+ impl Display for Error {
+ fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
+ write!(
+ f,
+ "Chunk named {:?} was not found in chunk file index",
+ std::str::from_utf8(&self.kind).unwrap_or("<non-ascii>")
+ )
+ }
+ }
+
+ impl std::error::Error for Error {}
+}
+
+///
+pub mod data_by_kind {
+ /// The error returned by [Index::data_by_kind()][super::Index::data_by_id()].
+ #[derive(Debug, thiserror::Error)]
+ #[allow(missing_docs)]
+ pub enum Error {
+ #[error("The chunk wasn't found in the file index")]
+ NotFound(#[from] super::offset_by_kind::Error),
+ #[error("The offsets into the file couldn't be represented by usize")]
+ FileTooLarge,
+ }
+}
+
+/// An entry of a chunk file index
+pub struct Entry {
+ /// The kind of the chunk file
+ pub kind: crate::Id,
+ /// The offset, relative to the beginning of the file, at which to find the chunk and its end.
+ pub offset: Range<crate::file::Offset>,
+}
+
+impl Index {
+ /// The size of a single index entry in bytes
+ pub const ENTRY_SIZE: usize = std::mem::size_of::<u32>() + std::mem::size_of::<u64>();
+ /// The smallest possible size of an index, consisting only of the sentinel value pointing past itself.
+ pub const EMPTY_SIZE: usize = Index::ENTRY_SIZE;
+
+ /// Returns the size in bytes an index with `num_entries` would take.
+ pub const fn size_for_entries(num_entries: usize) -> usize {
+ Self::ENTRY_SIZE * (num_entries + 1/*sentinel*/)
+ }
+
+ /// Find a chunk of `kind` and return its offset into the data if found
+ pub fn offset_by_id(&self, kind: crate::Id) -> Result<Range<crate::file::Offset>, offset_by_kind::Error> {
+ self.chunks
+ .iter()
+ .find_map(|c| (c.kind == kind).then(|| c.offset.clone()))
+ .ok_or(offset_by_kind::Error { kind })
+ }
+
+ /// Find a chunk of `kind` and return its offset as usize range into the data if found.
+ ///
+ ///
+ /// # Panics
+ ///
+ /// - if the usize conversion fails, which isn't expected as memory maps can't be created if files are too large
+ /// to require such offsets.
+ pub fn usize_offset_by_id(&self, kind: crate::Id) -> Result<Range<usize>, offset_by_kind::Error> {
+ self.chunks
+ .iter()
+ .find_map(|c| (c.kind == kind).then(|| crate::range::into_usize_or_panic(c.offset.clone())))
+ .ok_or(offset_by_kind::Error { kind })
+ }
+
+ /// Like [`Index::usize_offset_by_id()`] but with support for validation and transformation using a function.
+ pub fn validated_usize_offset_by_id<T>(
+ &self,
+ kind: crate::Id,
+ validate: impl FnOnce(Range<usize>) -> T,
+ ) -> Result<T, offset_by_kind::Error> {
+ self.chunks
+ .iter()
+ .find_map(|c| (c.kind == kind).then(|| crate::range::into_usize_or_panic(c.offset.clone())))
+ .map(validate)
+ .ok_or(offset_by_kind::Error { kind })
+ }
+
+ /// Find a chunk of `kind` and return its data slice based on its offset.
+ pub fn data_by_id<'a>(&self, data: &'a [u8], kind: crate::Id) -> Result<&'a [u8], data_by_kind::Error> {
+ let offset = self.offset_by_id(kind)?;
+ Ok(&data[crate::range::into_usize(offset).ok_or(data_by_kind::Error::FileTooLarge)?])
+ }
+
+ /// Return the end offset lf the last chunk, which is the highest offset as well.
+ /// It's definitely available as we have one or more chunks.
+ pub fn highest_offset(&self) -> crate::file::Offset {
+ self.chunks.last().expect("at least one chunk").offset.end
+ }
+}
diff --git a/vendor/gix-chunk/src/file/mod.rs b/vendor/gix-chunk/src/file/mod.rs
new file mode 100644
index 000000000..4ddd94999
--- /dev/null
+++ b/vendor/gix-chunk/src/file/mod.rs
@@ -0,0 +1,20 @@
+///
+pub mod decode;
+///
+pub mod index;
+
+///
+pub mod write;
+
+/// The offset to a chunk as seen relative to the beginning of the file containing it.
+pub type Offset = u64;
+
+/// A chunk file providing a table into the parent data.
+pub struct Index {
+ /// If true, we use `chunks` in a way that facilitates writing them.
+ will_write: bool,
+ /// Validated chunks as defined by their index entries.
+ ///
+ /// Note that this list cannot be empty.
+ chunks: Vec<index::Entry>,
+}
diff --git a/vendor/gix-chunk/src/file/write.rs b/vendor/gix-chunk/src/file/write.rs
new file mode 100644
index 000000000..8189140fe
--- /dev/null
+++ b/vendor/gix-chunk/src/file/write.rs
@@ -0,0 +1,136 @@
+use crate::file::{index::Entry, Index};
+
+mod write_chunk {
+ use std::collections::VecDeque;
+
+ use crate::file::index;
+
+ /// A [`Write`][std::io::Write] implementation that validates chunk sizes while allowing the user to know
+ /// which chunk is to be written next.
+ pub struct Chunk<W> {
+ chunks_to_write: VecDeque<index::Entry>,
+ inner: W,
+ next_chunk: Option<index::Entry>,
+ written_bytes: usize,
+ }
+
+ impl<W> Chunk<W>
+ where
+ W: std::io::Write,
+ {
+ pub(crate) fn new(out: W, chunks: VecDeque<index::Entry>) -> Chunk<W>
+ where
+ W: std::io::Write,
+ {
+ Chunk {
+ chunks_to_write: chunks,
+ inner: out,
+ next_chunk: None,
+ written_bytes: 0,
+ }
+ }
+ }
+
+ impl<W> std::io::Write for Chunk<W>
+ where
+ W: std::io::Write,
+ {
+ fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
+ let written = self.inner.write(buf)?;
+ self.written_bytes += written;
+ Ok(written)
+ }
+
+ fn flush(&mut self) -> std::io::Result<()> {
+ self.inner.flush()
+ }
+ }
+
+ impl<W> Chunk<W> {
+ /// Return the inner writer - should only be called once there is no more chunk to write.
+ pub fn into_inner(self) -> W {
+ self.inner
+ }
+ /// Return the next chunk-id to write, if there is one.
+ pub fn next_chunk(&mut self) -> Option<crate::Id> {
+ if let Some(entry) = self.next_chunk.take() {
+ assert_eq!(
+ entry.offset.end,
+ self.written_bytes as u64,
+ "BUG: expected to write {} bytes, but only wrote {} for chunk {:?}",
+ entry.offset.end,
+ self.written_bytes,
+ std::str::from_utf8(&entry.kind)
+ )
+ }
+ self.written_bytes = 0;
+ self.next_chunk = self.chunks_to_write.pop_front();
+ self.next_chunk.as_ref().map(|e| e.kind)
+ }
+ }
+}
+pub use write_chunk::Chunk;
+
+/// Writing
+impl Index {
+ /// Create a new index whose sole purpose is to be receiving chunks using [`plan_chunk()`][Index::plan_chunk()] and to be written to
+ /// an output using [`into_write()`][Index::into_write()]
+ pub fn for_writing() -> Self {
+ Index {
+ will_write: true,
+ chunks: Vec::new(),
+ }
+ }
+ /// Plan to write a new chunk as part of the index when [`into_write()`][Index::into_write()] is called.
+ pub fn plan_chunk(&mut self, chunk: crate::Id, exact_size_on_disk: u64) {
+ assert!(self.will_write, "BUG: create the index with `for_writing()`");
+ assert!(
+ !self.chunks.iter().any(|e| e.kind == chunk),
+ "BUG: must not add chunk of same kind twice: {:?}",
+ std::str::from_utf8(&chunk)
+ );
+ self.chunks.push(Entry {
+ kind: chunk,
+ offset: 0..exact_size_on_disk,
+ })
+ }
+
+ /// Return the total size of all planned chunks thus far.
+ pub fn planned_storage_size(&self) -> u64 {
+ assert!(self.will_write, "BUG: create the index with `for_writing()`");
+ self.chunks.iter().map(|e| e.offset.end).sum()
+ }
+
+ /// Return the amount of chunks we currently know.
+ pub fn num_chunks(&self) -> usize {
+ self.chunks.len()
+ }
+
+ /// After [planning all chunks][Index::plan_chunk()] call this method with the destination to write the chunks to.
+ /// Use the [Chunk] writer to write each chunk in order.
+ /// `current_offset` is the byte position at which `out` will continue writing.
+ pub fn into_write<W>(self, mut out: W, current_offset: usize) -> std::io::Result<Chunk<W>>
+ where
+ W: std::io::Write,
+ {
+ assert!(
+ self.will_write,
+ "BUG: create the index with `for_writing()`, cannot write decoded indices"
+ );
+ // First chunk starts past the table of contents
+ let mut current_offset = (current_offset + Self::size_for_entries(self.num_chunks())) as u64;
+
+ for entry in &self.chunks {
+ out.write_all(&entry.kind)?;
+ out.write_all(&current_offset.to_be_bytes())?;
+
+ current_offset += entry.offset.end;
+ }
+
+ // sentinel to mark end of chunks
+ out.write_all(&0u32.to_be_bytes())?;
+ out.write_all(&current_offset.to_be_bytes())?;
+
+ Ok(Chunk::new(out, self.chunks.into()))
+ }
+}
diff --git a/vendor/gix-chunk/src/lib.rs b/vendor/gix-chunk/src/lib.rs
new file mode 100644
index 000000000..0647e320b
--- /dev/null
+++ b/vendor/gix-chunk/src/lib.rs
@@ -0,0 +1,36 @@
+//! Low-level access to reading and writing chunk file based formats.
+//!
+//! See the [git documentation](https://github.com/git/git/blob/seen/Documentation/technical/chunk-format.txt) for details.
+#![deny(missing_docs, rust_2018_idioms, unsafe_code)]
+
+/// An identifier to describe the kind of chunk, unique within a chunk file, typically in ASCII
+pub type Id = [u8; 4];
+
+/// A special value denoting the end of the chunk file table of contents.
+pub const SENTINEL: Id = [0u8; 4];
+
+///
+pub mod range {
+ use std::{convert::TryInto, ops::Range};
+
+ use crate::file;
+
+ /// Turn a u64 Range into a usize range safely, to make chunk ranges useful in memory mapped files.
+ pub fn into_usize(Range { start, end }: Range<file::Offset>) -> Option<Range<usize>> {
+ let start = start.try_into().ok()?;
+ let end = end.try_into().ok()?;
+ Some(Range { start, end })
+ }
+
+ /// Similar to [`into_usize()`], but panics assuming that the memory map couldn't be created if offsets
+ /// stored are too high.
+ ///
+ /// This is only true for correctly formed files, as it's entirely possible to provide out of bounds offsets
+ /// which are checked for separately - we wouldn't be here if that was the case.
+ pub fn into_usize_or_panic(range: Range<file::Offset>) -> Range<usize> {
+ into_usize(range).expect("memory maps can't be created if files are too large")
+ }
+}
+
+///
+pub mod file;