summaryrefslogtreecommitdiffstats
path: root/vendor/gix
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-19 09:25:56 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-19 09:25:56 +0000
commit018c4950b9406055dec02ef0fb52f132e2bb1e2c (patch)
treea835ebdf2088ef88fa681f8fad45f09922c1ae9a /vendor/gix
parentAdding debian version 1.75.0+dfsg1-5. (diff)
downloadrustc-018c4950b9406055dec02ef0fb52f132e2bb1e2c.tar.xz
rustc-018c4950b9406055dec02ef0fb52f132e2bb1e2c.zip
Merging upstream version 1.76.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/gix')
-rw-r--r--vendor/gix/.cargo-checksum.json2
-rw-r--r--vendor/gix/CHANGELOG.md3038
-rw-r--r--vendor/gix/Cargo.lock934
-rw-r--r--vendor/gix/Cargo.toml118
-rw-r--r--vendor/gix/LICENSE-MIT2
-rw-r--r--vendor/gix/src/attribute_stack.rs12
-rw-r--r--vendor/gix/src/clone/checkout.rs20
-rw-r--r--vendor/gix/src/clone/fetch/util.rs3
-rw-r--r--vendor/gix/src/commit.rs8
-rw-r--r--vendor/gix/src/config/cache/access.rs121
-rw-r--r--vendor/gix/src/config/cache/init.rs68
-rw-r--r--vendor/gix/src/config/cache/util.rs12
-rw-r--r--vendor/gix/src/config/mod.rs88
-rw-r--r--vendor/gix/src/config/snapshot/access.rs13
-rw-r--r--vendor/gix/src/config/snapshot/credential_helpers.rs24
-rw-r--r--vendor/gix/src/config/tree/sections/core.rs6
-rw-r--r--vendor/gix/src/config/tree/sections/diff.rs74
-rw-r--r--vendor/gix/src/config/tree/sections/fetch.rs3
-rw-r--r--vendor/gix/src/config/tree/sections/gitoxide.rs90
-rw-r--r--vendor/gix/src/config/tree/sections/http.rs4
-rw-r--r--vendor/gix/src/create.rs2
-rw-r--r--vendor/gix/src/diff.rs127
-rw-r--r--vendor/gix/src/ext/object_id.rs10
-rw-r--r--vendor/gix/src/ext/rev_spec.rs1
-rw-r--r--vendor/gix/src/ext/tree.rs11
-rw-r--r--vendor/gix/src/filter.rs16
-rw-r--r--vendor/gix/src/head/peel.rs158
-rw-r--r--vendor/gix/src/lib.rs6
-rw-r--r--vendor/gix/src/object/blob.rs276
-rw-r--r--vendor/gix/src/object/errors.rs6
-rw-r--r--vendor/gix/src/object/tree/diff/change.rs47
-rw-r--r--vendor/gix/src/object/tree/diff/for_each.rs155
-rw-r--r--vendor/gix/src/object/tree/diff/mod.rs32
-rw-r--r--vendor/gix/src/object/tree/diff/rewrites.rs108
-rw-r--r--vendor/gix/src/object/tree/diff/tracked.rs490
-rw-r--r--vendor/gix/src/object/tree/iter.rs2
-rw-r--r--vendor/gix/src/object/tree/mod.rs5
-rw-r--r--vendor/gix/src/object/tree/traverse.rs9
-rw-r--r--vendor/gix/src/open/repository.rs31
-rw-r--r--vendor/gix/src/pathspec.rs7
-rw-r--r--vendor/gix/src/prelude.rs3
-rw-r--r--vendor/gix/src/reference/edits.rs3
-rw-r--r--vendor/gix/src/reference/errors.rs8
-rw-r--r--vendor/gix/src/reference/iter.rs14
-rw-r--r--vendor/gix/src/reference/mod.rs10
-rw-r--r--vendor/gix/src/remote/connect.rs6
-rw-r--r--vendor/gix/src/remote/connection/fetch/mod.rs3
-rw-r--r--vendor/gix/src/remote/connection/fetch/negotiate.rs2
-rw-r--r--vendor/gix/src/remote/connection/fetch/receive_pack.rs59
-rw-r--r--vendor/gix/src/remote/connection/fetch/update_refs/mod.rs14
-rw-r--r--vendor/gix/src/remote/connection/fetch/update_refs/tests.rs2
-rw-r--r--vendor/gix/src/remote/connection/mod.rs1
-rw-r--r--vendor/gix/src/remote/connection/ref_map.rs5
-rw-r--r--vendor/gix/src/repository/config/mod.rs46
-rw-r--r--vendor/gix/src/repository/config/transport.rs24
-rw-r--r--vendor/gix/src/repository/diff.rs45
-rw-r--r--vendor/gix/src/repository/filter.rs4
-rw-r--r--vendor/gix/src/repository/graph.rs8
-rw-r--r--vendor/gix/src/repository/index.rs4
-rw-r--r--vendor/gix/src/repository/kind.rs2
-rw-r--r--vendor/gix/src/repository/mod.rs5
-rw-r--r--vendor/gix/src/repository/object.rs11
-rw-r--r--vendor/gix/src/repository/reference.rs18
-rw-r--r--vendor/gix/src/repository/revision.rs3
-rw-r--r--vendor/gix/src/repository/worktree.rs12
-rw-r--r--vendor/gix/src/revision/mod.rs3
-rw-r--r--vendor/gix/src/revision/spec/mod.rs9
-rw-r--r--vendor/gix/src/revision/spec/parse/delegate/mod.rs2
-rw-r--r--vendor/gix/src/revision/spec/parse/delegate/navigate.rs20
-rw-r--r--vendor/gix/src/revision/spec/parse/mod.rs4
-rw-r--r--vendor/gix/src/revision/walk.rs4
-rw-r--r--vendor/gix/src/submodule/mod.rs7
72 files changed, 1961 insertions, 4539 deletions
diff --git a/vendor/gix/.cargo-checksum.json b/vendor/gix/.cargo-checksum.json
index 7ac96fdd7..ba40416bb 100644
--- a/vendor/gix/.cargo-checksum.json
+++ b/vendor/gix/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"CHANGELOG.md":"d7458903f64e1f690bc0e45ecc850476dafe90ff0618e92db40ed38c865070fd","Cargo.lock":"a680b27e388f17f6d528775fbddde500223fa88744892913394b693762e92710","Cargo.toml":"52ccf36b026646ed3d9763311a33138b1f38c80b1445323fb765df7d83cf2b78","LICENSE-APACHE":"cb4780590812826851ba250f90bed0ed19506ec98f6865a0e2e20bbf62391ff9","LICENSE-MIT":"49df47913ab2beafe8dc45607877ae64198bf0eee64aaad3e82ed9e4d27424e8","src/assets/init/HEAD":"28d25bf82af4c0e2b72f50959b2beb859e3e60b9630a5e8c603dad4ddb2b6e80","src/assets/init/description":"47aad2f8621afc777c66085c31f5ed14656df9bcfa5a2ae445680f175d0d2d0c","src/assets/init/hooks/applypatch-msg.sample":"1ae81b995a5c8c54582e1977084babed1e947a5a5c247ad29563142e432955ab","src/assets/init/hooks/commit-msg.sample":"b1451a4c89ee4406ba56f003a7e3d142e24a7452861fddddc23bfc77163c8650","src/assets/init/hooks/docs.url":"4424200fb80650f5063a3ec0a3864af4aaa3103f1319fe576b64d3bfc74f8a67","src/assets/init/hooks/fsmonitor-watchman.sample":"99ed87d785ada3687b4d86b8d9aa562f3430ce7061834e5381166b6a35a0d495","src/assets/init/hooks/post-update.sample":"e6d88132de729f20c45f66c2df51cc2e223a4b8b1512a2ce1cfdd0033ee53e53","src/assets/init/hooks/pre-applypatch.sample":"4c9754cac1c73109e4113ffd76070ae528a42667a85135e87fb826d572d13a4c","src/assets/init/hooks/pre-commit.sample":"1dd0fb2a11956784eb184e72af2fd87feca9050903400f163b90d4db7f19ce78","src/assets/init/hooks/pre-merge-commit.sample":"fca192309544e8e23638bd0987be7a5d00e271599b55382c1c6a4812070da223","src/assets/init/hooks/pre-push.sample":"0e6762e0b35b2475849d11c71d504cfae10cab2be0b947d7caa1e0d5959f2cec","src/assets/init/hooks/pre-rebase.sample":"d7c629ddbaa5f984d21c97a14889599d2019230220d3459aa103648316500968","src/assets/init/hooks/prepare-commit-msg.sample":"f804b4efd22ef832b49506a815a6a6b1103b8f77b6d6556fc3756232727396d8","src/assets/init/info/exclude":"df4c844761dc873ca9ea2f6fabcc2e2460b2f804ca65f8470e39ffbda7c3446e","src/attribute_stack.rs":"835abb1ed1477b26d6e57eb25b418096ad09b3c2d4781bc5f21bf72741846a42","src/clone/access.rs":"285795cc8f32a66cfb7a98ad7458dad29415ef8331eff995ca0b87a63aa39410","src/clone/checkout.rs":"bfb9f26cb9e471e0af0cdcd417a87bbbf28f4f7cabe3443480be5471f35c0be1","src/clone/fetch/mod.rs":"155a0ef9d742ee32325a60c613590bfe8dbb6ec393a2c84b272569d50904a921","src/clone/fetch/util.rs":"7a630bb12215431b5f9ea2f54b14819cc8611b6a78b60a08dce76f4112ca6262","src/clone/mod.rs":"f4238d146b6cd29bbb12c77f08efc25efd33f50eb4834daecead2176154fab79","src/commit.rs":"3cf4f1f485c025982e9bb398c48d356af321d9fd8775de7c1a911de1052a1ece","src/config/cache/access.rs":"9284a3cfa5e95c843f37f813129e269bf6515dc02c6ee1cce69da213a9144bc1","src/config/cache/incubate.rs":"75a949861c7c2d11eec84dea92c80059b68a6ebedaf399690305544836e0a7d3","src/config/cache/init.rs":"37fee4c9c661a37d2186940b832c2a067cfcaa2ea9ebc185ce8fb4bbb6ec72f5","src/config/cache/mod.rs":"3cce2cf0fafbc4f828870b85fef411a826ad6d1fe3ac5b6cbd2f5e049331aebf","src/config/cache/util.rs":"6dbd15b84e47d3d32c6535d1b9f6a9ad73171137411d5a8bb764c5d1f60b005e","src/config/mod.rs":"7895c0860c3b84faaf5df05a2cf06065fc2ade4b0e01e1322040713b559d8d67","src/config/overrides.rs":"ca3b08e3ab4d292c904ef3a0746e937c4e90440ae19389b03321c5645177e39e","src/config/snapshot/_impls.rs":"edae9b731c69828effbdfe01d32b7caa8c536df81d33de1cb67b88ece01a7218","src/config/snapshot/access.rs":"c08dfa7bb0c969913efb6e08692203c5bed7ef2502053a89f6181846aec5918a","src/config/snapshot/credential_helpers.rs":"cd269ffb60aab86a752839294b3514b31bd59de5b4ae941f25111dfba25aad33","src/config/snapshot/mod.rs":"21f6eaeb511e470df6f3d8948dfd65b688741b39d534fbaf78e3ee620bc6a5c5","src/config/tree/keys.rs":"604c522d4b456d162a33adfef52ec0ef35dd83b0ab86a6a9bdcedb0c5de7e46a","src/config/tree/mod.rs":"be9654a1c844b8444c2f5d0003937fbc06bae7f934073eb206e0541df3b81425","src/config/tree/sections/author.rs":"a27cf6ad5150aa5ccbd64d2786183983e1567c094a221b016875864c9e8f6980","src/config/tree/sections/branch.rs":"105211bb0eefbdc718923d5e770261889163a5d61dc8f0c22af33473cfb32100","src/config/tree/sections/checkout.rs":"329ebe10cca7c5414f9e6229d6dce3178cdb5821a1b7e72bbfac3a60b5b42dc2","src/config/tree/sections/clone.rs":"bbc86890044721ac34ae7610b14987035ab8714c856cec2787fae49c286a6d6d","src/config/tree/sections/committer.rs":"2f99b8bc6e2c4ad9bdba3a85bc6b717acb5b09d1ada2723d3ba5954f804368eb","src/config/tree/sections/core.rs":"48ffa3a7c71706287a85ad2867b97f04983069bc274c22d02c309294376ca112","src/config/tree/sections/credential.rs":"e1ce72dc24b9d2f06827b9fc6e8c963f888844ab5a4b48f6d867ad8542909b94","src/config/tree/sections/diff.rs":"9c577772d544d9c9c0d06485955aecab0c64d8e1a0117e71a33f75dd281baa83","src/config/tree/sections/extensions.rs":"f73c444f2e2c8fbc8d1b1991c0d63532c792362e42833f3ae06059c07387cf66","src/config/tree/sections/fetch.rs":"437a6a13df2e1da4a06e9a28d9da020eccab395f13150d398e94bf4cd3e690f8","src/config/tree/sections/gitoxide.rs":"a483361a58e3221bbaf64847cfe70698fc4a73d24ce80875e4970af889fbf5b7","src/config/tree/sections/http.rs":"58c9a9b8abcee4066eb4e20f9679dbbf888c04c21f4dbfff0d2ad7f0a18d4fcd","src/config/tree/sections/index.rs":"30166326b339c9d0b171ebfd1c1f0fb90e38dc8b2edcd66dfead2a87c38eb938","src/config/tree/sections/init.rs":"e87e33ac5091797bde302f78c8fb7cefce0fb1752610409c1db53c3f7b4179af","src/config/tree/sections/mod.rs":"31f480fde038af3532667fb3ff511b6b978de262fa6cef4e19e1e64655060bc8","src/config/tree/sections/pack.rs":"0a6dcdc7603b0d7a84159a70789b63b6c26d539f98808c520a8e644fc9dbd2f3","src/config/tree/sections/protocol.rs":"feae4977f6576adb446d0599f018d41421a7b1b0871a74e8fcfe5e2b7104de74","src/config/tree/sections/remote.rs":"eb06d89125dc72b5754b642cf561e6e430cad4fbbd57dcd1049d306291afc41f","src/config/tree/sections/safe.rs":"4e96f49ff56d6ebb8944406fe2ae3c4a1fa80c5383f08935015ddc6036b583c3","src/config/tree/sections/ssh.rs":"7db83236912bcb7aa1770f0eb1a388ee0fac94c1548bd9a19051b34c25622841","src/config/tree/sections/url.rs":"e342edcd20979feaf54663a919a0751aaf32b4e1f2e47cf5d028faec62e6b731","src/config/tree/sections/user.rs":"8f02172a5db830832b4edf28693fdef33cece6ba1990c4d7a338e4c9291375ab","src/config/tree/traits.rs":"524f1752e9131c27db3a9016ee6c3abc61175345c2167426ffd5a41602cb950d","src/create.rs":"7da6fbdf8c18a32ad4ab9cea8a062fb8aadb08d8478c9d1c3de09c7e6e4448fe","src/diff.rs":"52bc752a2a8decff56b7a41d1ae97b90c0f3422332f999ced67fc884d6b25d18","src/discover.rs":"41631f880b7880f62d77bfb0511f4d85a82a574ca5f53b8cb8fe35edd5b886f6","src/env.rs":"57da96b315b6fe057a326639cd3e85849793449c4c8f3477b79a032b1a029b31","src/ext/mod.rs":"cc6a4c10c2eb53eb261e0186ee51411dada06bbb245c205356fce1de9d4628f5","src/ext/object_id.rs":"a70afd79c84731df0023d738332b3688a2adbcbdda802f8ee70297fc8fe0ca38","src/ext/reference.rs":"a51fe4f63e5708afa4fbabd13638b88c34845a64263db77308cd1b974a0f325f","src/ext/rev_spec.rs":"c196f21a3981b7ad84e9385ba3924a554accf9c7a3b4f8e2bba13cb74f108ec8","src/ext/tree.rs":"60753a38cfd6cbb43b794236de0258a5af40f0a88864dde9e1f7d6cdb8cbb04f","src/filter.rs":"484a6b55008eb4a1a337dffdde477ad6013dcaacb5383ab7791ef7d8f53a2b3d","src/head/log.rs":"0de9d5f834b633756001bdd246e98266084d521d7f775537e6e6ead5ed93d7e4","src/head/mod.rs":"5be9b17e6ffb5dd4c9548b8a4d9e25d6ab6600450762293c43ca0bcbd2a6284f","src/head/peel.rs":"ee6a605878d5146e388417db7dce963b70a6ccfd2659bb0f6a14c7291b042537","src/id.rs":"1f5f97d24d8c00460d085e2815c08b89632ae1e3cde283a4362798cc4b1276ea","src/init.rs":"ac6f329feb2d33cd8a5f0ce21bb77a166e18656a9952d4cba147196242558c9a","src/interrupt.rs":"217d8611ebe2932e7cb52f77a90cec4a6dbe0bd69eb16b951a70fbd8b5e95853","src/lib.rs":"ae780106efabe63365db85d404dc289c52b9006283d4706e135e6d772a1419e8","src/mailmap.rs":"415301bdcb3d6991675c7ea86a92eea152cf65df7b2d14da4b58b3b605039e4e","src/object/blob.rs":"6afd58e1ac97490e22e46abc948f08a3843df53fd0fe7480426d9961beba199e","src/object/commit.rs":"d61d8de2c8ae76afab284e38a18b33a9c3ca1ae872a1cfc37aea59d7286702be","src/object/errors.rs":"b2b456480e10dc4cdd213650dacb619d96bd9770e19d6042a80621991acd5255","src/object/impls.rs":"16467413024515d6805b1f0d47ed568d19f70a317b3fb806023028a31357bbbd","src/object/mod.rs":"e436e50c2b4d24e24215481213951404f73d2726499b4ef650c75d147654efec","src/object/peel.rs":"c23ac9baac1216d9320c71926f56548d18f7f3964bdbcccd8ca81f6b756f7ad9","src/object/tag.rs":"ab212a0d5d82e787000fbac1aa3769b97b01a0df8b851f31c7d5c8534fe2191a","src/object/tree/diff/change.rs":"95df7e1fb3b58fa2a0086f205c39940fb590ccdac92aee53a6cff5f29181f30c","src/object/tree/diff/for_each.rs":"da534722f9dbfdf26e66dc564de0c7e694e92cf54f33e29f3364ed056cea8c78","src/object/tree/diff/mod.rs":"672ef727e70da7a6f214e59ea45b16833c68c5b57a95fe7e71c89aac054eaaf4","src/object/tree/diff/rewrites.rs":"d91983f629bf3f0256da17d0067daf8271503345423f725d3a23fb5a40eac4d2","src/object/tree/diff/tracked.rs":"4b8226a3722b08e41b00c800efc81ee611f801cf42606203c26d568f2d6d16fa","src/object/tree/iter.rs":"cf3ae9dfd5018b55228ccc0b4b707b39a3fa2c5d2b130e209da5dcf9080e10ca","src/object/tree/mod.rs":"151d4e50a054aa0dbeecb1e084aac5a1f6f35044a4edda1289e9ee4ed5fb0bba","src/object/tree/traverse.rs":"ae0342857d42b6afb82167423dfdac9611ce1b7281b6b9b542e230960c564c0f","src/open/mod.rs":"d25c11246536e7d57172b375569bd8545b8060f13bbfbc49cbf0f85636627076","src/open/options.rs":"1ffda0517724d1328b2fb296a782d89305a482be65ed24a1d9d867bead8eb5a5","src/open/permissions.rs":"5a55970e738ba7a9af7b51cdeb03955af533b3306baaef278b398cf99f8a312b","src/open/repository.rs":"ae4100ee1dd30890d961dc12a57dcf03dee1ffa9a99c54a6704dde5493416764","src/path.rs":"3cd4c92a626384f8f4db89b2f7594923b922d7b841681c167748a01abc7dc3f7","src/pathspec.rs":"bddfa7360ee13ac72a97fa0e1388c9605518da3fc96fd35e76e245f25b73b813","src/prelude.rs":"8dc6fa25bb01fbc1e012364949982e406b17ab22bde464e154f12286fba293cf","src/progress.rs":"a9ba8ec6cc21eea78121b02d1feaba8f6aab04be441bfe8be9f3dffe4c5e0ba5","src/reference/edits.rs":"5d857cd65d7415d4de5aed1ea8acc9c227000a71b2e202293546cd23be1f62b2","src/reference/errors.rs":"1ac9e6e902ee561b0c6ad08ebf110216a34405948200a9aff177ebe0395a23a4","src/reference/iter.rs":"1feb3aaed665b39780136f0d703f67f4b34f6239e90cd2a0c632aad40523e025","src/reference/log.rs":"f1eab69b8272b15bd23beeb68e88a8b53f003f74d86783196b2de4a84f0497fd","src/reference/mod.rs":"29610488dc03b6a98cbdfb06e1c29b80d2d2ade9f4e555f4acaf4b5948688e19","src/reference/remote.rs":"4467c1bf9d463d1781a3254a3874c7fc763201e33d51e1a92a6f0dcbc6776135","src/remote/access.rs":"76e75baca0155710c2eea0e439df0774ecb0cd6c7e6b950876dd9e6e75be5e9f","src/remote/build.rs":"0bfcf98ee6b96c401a410c71b749426e84a78c17eff944ea7d6229ef2dc3e5e8","src/remote/connect.rs":"a147cf33f7ac1413e07d7b5aae0c6a557ee9b29f9172e7ea2413446d670ac71b","src/remote/connection/access.rs":"075f04705680959074cf3db6856bf34180d68d1a3065011ca56b67a861e2b168","src/remote/connection/fetch/config.rs":"93b1392fdc409dba073e96272f13ad7ab996522d59df819edc800431ee36975b","src/remote/connection/fetch/error.rs":"21ccf5ff0cba287247581849c510aa3dd1acdd510cfbb858a579dd85b2c7b050","src/remote/connection/fetch/mod.rs":"c88b8b968debe3192ecc6a5e46a1587f590b1ae45b76df4c13d8a64df956860c","src/remote/connection/fetch/negotiate.rs":"7258ddb2d5adf92f5041709bda16f1d19313ec867717ed270c6a191fdc92b3b9","src/remote/connection/fetch/receive_pack.rs":"d3d4809a7e4ae52868d5975c5de8d16e1218f662ee83e35498291ee582accdc9","src/remote/connection/fetch/update_refs/mod.rs":"f28b33d42f0992b3e91b7eba3672d6fe4d41811f8ea170e9bf11fac688c6e882","src/remote/connection/fetch/update_refs/tests.rs":"69a25df4dc1f84b5a7cb603e2451114cf0a7e356c026317995f3d14bfd07a345","src/remote/connection/fetch/update_refs/update.rs":"729ae1cfef895df37ae5a34c19d9aac9b77e664f107f3adf81a79ae58412e960","src/remote/connection/mod.rs":"863f4a7f2476f5b5d8622959d5069424decea29ba7f66619f679344e6fb5a5d1","src/remote/connection/ref_map.rs":"35913d6c4d8976025ff880ac71bd8e5af0b73fd83e6ca53be1ec275b6dc009e4","src/remote/errors.rs":"6c4986618c55c2a86e4623b02837918dc61849c3d634e7d474a123eb7e01bcbc","src/remote/fetch.rs":"cf78b682074ad700ea6eb4d511401a737a905bd4af0dcfd639b7f850227f5978","src/remote/init.rs":"87576486ae399945b2134dbce70e960ff4c2b3a3046988449f6da0c25f6d646c","src/remote/mod.rs":"14a1532470cc76cf3b727657439923f3515dd781ebfc7030d9481056c6bbf162","src/remote/name.rs":"9fa7e81a157375ecb40ddfba5da850fef7513296a68014a50f5148d57f40b8b7","src/remote/save.rs":"a8b2160cde235c9a2ecddc0181d1cca57a01e046eae8d3b11fa7b29e43ca6866","src/remote/url/mod.rs":"a3279f5330fc83193e583f2b839ab08006c293b0040db6cc74969d50813fbbaa","src/remote/url/rewrite.rs":"4d43167909020458abc5e3e7310e3efaddb9fc7c783581fbc9422fa8b057d95d","src/remote/url/scheme_permission.rs":"4f6e528260c67af54171477d97707050f048c0c35e77f088f8ddc4ae135e6386","src/repository/attributes.rs":"6c28910869eafda6c4c9d6a2b06a2a881f2d5fcf6f5c084ac501850ced2af810","src/repository/cache.rs":"daa9e03d59475b99d3e5c736a66f8b2f82035566906e900502195cf93adc3e1b","src/repository/config/mod.rs":"b6d7d9b3fb86f0e76cc585efb110aec0bdee4b82c8bdbe6a3bb67d65ffd31de9","src/repository/config/transport.rs":"78683c40947e95d9835809d6b9adc89bbce4e8a06345279c56554b2a76dc4e7c","src/repository/filter.rs":"cc65692a78e3cc28166f595d3bf05c0d3f12757fc8d320512638f6edb724c209","src/repository/graph.rs":"07763932b3215ac25e3981a60ab0750449af992475da7fd47bb0412cdf0fc727","src/repository/identity.rs":"0d7c575578eef869d16d99ce465696f41b1c7e8d2bdba93945219d7453b3d717","src/repository/impls.rs":"b07dd79074b3a175df1ec43042c6cd0ad98b884885e25deae6828a59cc290e2a","src/repository/index.rs":"92902245189577362acd6e0f2ef58d9b55def7dfa4ad4409759ca020ddd889ca","src/repository/init.rs":"f72f56ff1ebb225d043a088c922adb24495d4031d4de2edf6a144156f1f6305e","src/repository/kind.rs":"a32375689f9de7c74d29079caa2f025db8a4b13a3dc31a587039548343b23ade","src/repository/location.rs":"542c6db1c9781de566a6996c4211ddcb748d5c48ce3a49004c638fa6a461bc12","src/repository/mailmap.rs":"3ca35665ac2d2c6f100826169822750e1b6647b1f284206f408126e749718030","src/repository/mod.rs":"2154ccecc6167644cd02b88906597d735632a8ed8c5f60dfac5934a7dc7198ea","src/repository/object.rs":"76dd9b13d79e3ebef592410285681d85ea0c91ad295fe724dafb5617b7045491","src/repository/pathspec.rs":"6da21d9a2f75ace735cc96aa6dd709bf323f2c5fc05daa40dfc3d393b2485187","src/repository/permissions.rs":"9f7f41fd250d043cea7ee6ff0cdc315838dbb6226bde3dca2a7666f01d648090","src/repository/reference.rs":"51a794c69e54bbf441ad27a98289167c338c37107c680e6e57042acc33647e3b","src/repository/remote.rs":"4ecc9021f3369d9530a130fe2dbe3c98dc50b593a5194c8584293808fc2bc4a4","src/repository/revision.rs":"c2d50c2bed8b465e5e2f24483d5cc54791fa68c6f558feea5871dfdcc7f6c4ec","src/repository/shallow.rs":"ce0b3358ed0ccca6ac52a985555793013f7c2d5de83291cd9810181ac22e714a","src/repository/state.rs":"040cca4a26463211aef85e4539d084969240f30d985c1bd3ae9bb3cd01009d1d","src/repository/submodule.rs":"a44ebd1132a898bbd8454628888bb8ce41611066ca8d78004242fcc522aac27c","src/repository/thread_safe.rs":"40e455ea3b5637da6e2acae4f5d13c4b8e8a25b8944a4c2870243e31f7f13632","src/repository/worktree.rs":"1a7eaf3eb18d55018fd5a3a04b9faa8db96d05aa9debf553cd15ea1ad4e9e928","src/revision/mod.rs":"d3c83f7ae1ac71a18f79cb73a95997432936b11b94f2ad6a2fe6b3fc23554f96","src/revision/spec/mod.rs":"aa1516ed667a49bfa0db55fdea0bfbcc3227411be105496f0867bd7efb5d5dda","src/revision/spec/parse/delegate/mod.rs":"8ee9c646a16c8f46551c03f1bdf450a71fda79ce691dfcd0e1b56631a3fa3d9a","src/revision/spec/parse/delegate/navigate.rs":"2d720500c83e9b80ff1e33e8ad3faf59502116a9e29ee44385510c9a6c8114c8","src/revision/spec/parse/delegate/revision.rs":"b3ee71f7ec701a202c8e1b9fcc6a9397a8dfb251f195fa218429e630b0280ab4","src/revision/spec/parse/error.rs":"48c0c2e7dcffe80aac5563094787e0502c4275619fc35467a2687499bbad0fef","src/revision/spec/parse/mod.rs":"5f16d2141f7e5959b0a83b4f4035ceaadbaef6b7f563bc05d45257fcec9d340e","src/revision/spec/parse/types.rs":"8876e1b5caf323d4c671f31fc06c07043df10592cecec6dcd62714826ba09bfe","src/revision/walk.rs":"aa84696ba6ea7a293e834121ae2e6b79428b637333d2f7673083adbd1a18c522","src/shallow.rs":"4296fb5298ef71eb1d78aae21d11bfb129a4f5a5f3cf43bf6d5256fec40f8dc3","src/state.rs":"1e3c5e1df4016e8b3e60028def84b0f706c4fcffaba11b1152d9240e144f21e8","src/submodule/errors.rs":"996617b2e707f903de4316e775b8bac03a925959c2c70278aa84f56fa68a9fb0","src/submodule/mod.rs":"00c860ed710f4eab48dfdf54b640750f24721be89fda168cfc1c529492901f9c","src/tag.rs":"f60043aaa7afb54652ab6cf64765ebd61607f19a83dd5960abf8077d2cb91d44","src/types.rs":"285a14e8447c1b646c690cdb1b8430463adb4d4a236370447c81f26cad2e7887","src/worktree/mod.rs":"2053c334a780377e12679a363df6441605f5ca1893237304490cb69b8d7068ca","src/worktree/proxy.rs":"07ff3cfc6a8f326fb7d62f6762f682498e9e5f131ece935acfd26b5223a338f1"},"package":"002667cd1ebb789313d0d0afe3d23b2821cf3b0e91605095f0e6d8751f0ceeea"} \ No newline at end of file
+{"files":{"Cargo.lock":"b3d2ade0ac566c057ea769560617e480afa998ce8b1b3eb50ce23aa0d0d84b35","Cargo.toml":"4e1c2cca14e24191c87d4c34c6254ed82d78c0a94e5728b44afed37da6b0ea8c","LICENSE-APACHE":"cb4780590812826851ba250f90bed0ed19506ec98f6865a0e2e20bbf62391ff9","LICENSE-MIT":"6f610e51b59dfbcbee281f58cc6d963bf716199dc7384dbaa94ccc3a6e343ce6","src/assets/init/HEAD":"28d25bf82af4c0e2b72f50959b2beb859e3e60b9630a5e8c603dad4ddb2b6e80","src/assets/init/description":"47aad2f8621afc777c66085c31f5ed14656df9bcfa5a2ae445680f175d0d2d0c","src/assets/init/hooks/applypatch-msg.sample":"1ae81b995a5c8c54582e1977084babed1e947a5a5c247ad29563142e432955ab","src/assets/init/hooks/commit-msg.sample":"b1451a4c89ee4406ba56f003a7e3d142e24a7452861fddddc23bfc77163c8650","src/assets/init/hooks/docs.url":"4424200fb80650f5063a3ec0a3864af4aaa3103f1319fe576b64d3bfc74f8a67","src/assets/init/hooks/fsmonitor-watchman.sample":"99ed87d785ada3687b4d86b8d9aa562f3430ce7061834e5381166b6a35a0d495","src/assets/init/hooks/post-update.sample":"e6d88132de729f20c45f66c2df51cc2e223a4b8b1512a2ce1cfdd0033ee53e53","src/assets/init/hooks/pre-applypatch.sample":"4c9754cac1c73109e4113ffd76070ae528a42667a85135e87fb826d572d13a4c","src/assets/init/hooks/pre-commit.sample":"1dd0fb2a11956784eb184e72af2fd87feca9050903400f163b90d4db7f19ce78","src/assets/init/hooks/pre-merge-commit.sample":"fca192309544e8e23638bd0987be7a5d00e271599b55382c1c6a4812070da223","src/assets/init/hooks/pre-push.sample":"0e6762e0b35b2475849d11c71d504cfae10cab2be0b947d7caa1e0d5959f2cec","src/assets/init/hooks/pre-rebase.sample":"d7c629ddbaa5f984d21c97a14889599d2019230220d3459aa103648316500968","src/assets/init/hooks/prepare-commit-msg.sample":"f804b4efd22ef832b49506a815a6a6b1103b8f77b6d6556fc3756232727396d8","src/assets/init/info/exclude":"df4c844761dc873ca9ea2f6fabcc2e2460b2f804ca65f8470e39ffbda7c3446e","src/attribute_stack.rs":"480cee5e4f8a725186c8bfbb6140132c77efcb9a451a1c2fe6421ac1544a6085","src/clone/access.rs":"285795cc8f32a66cfb7a98ad7458dad29415ef8331eff995ca0b87a63aa39410","src/clone/checkout.rs":"9ae78a803e8765b37bbe30ee3cdef4fff7061ec4a9eef941763c5b24e08c23cf","src/clone/fetch/mod.rs":"155a0ef9d742ee32325a60c613590bfe8dbb6ec393a2c84b272569d50904a921","src/clone/fetch/util.rs":"817f6ab3f459eee6b6751262c2008dd569a0a20d8179cd16075a592f109aad83","src/clone/mod.rs":"f4238d146b6cd29bbb12c77f08efc25efd33f50eb4834daecead2176154fab79","src/commit.rs":"b77874095443633a0d787fa498353e1417b2078345d7cd66a5ac3d823ddbccbc","src/config/cache/access.rs":"fdfcd7344f77bddc625d92a7c47a12b713d94bd449fbcce16932596bedcd735d","src/config/cache/incubate.rs":"75a949861c7c2d11eec84dea92c80059b68a6ebedaf399690305544836e0a7d3","src/config/cache/init.rs":"cd8b7f4bb064c6d2e66d8025fc4c8fde672b4b1403b53abde070a4b871fb5ebe","src/config/cache/mod.rs":"3cce2cf0fafbc4f828870b85fef411a826ad6d1fe3ac5b6cbd2f5e049331aebf","src/config/cache/util.rs":"a27f471932b0101459cb61d34c6c7a779e6810e846d22cbb549f418b07e0deb3","src/config/mod.rs":"28bb108c7be194212dc942a770d51baaf228ecd3543d3c5be9ce75cfa52f9f43","src/config/overrides.rs":"ca3b08e3ab4d292c904ef3a0746e937c4e90440ae19389b03321c5645177e39e","src/config/snapshot/_impls.rs":"edae9b731c69828effbdfe01d32b7caa8c536df81d33de1cb67b88ece01a7218","src/config/snapshot/access.rs":"aba4480602b4aaf0bb43fcb70a949b4f313be86a98b51a64858d66204d093c48","src/config/snapshot/credential_helpers.rs":"e3e0858235661fdb59d97c8430e86586fde731f144d34547b340324366c2a6c5","src/config/snapshot/mod.rs":"21f6eaeb511e470df6f3d8948dfd65b688741b39d534fbaf78e3ee620bc6a5c5","src/config/tree/keys.rs":"604c522d4b456d162a33adfef52ec0ef35dd83b0ab86a6a9bdcedb0c5de7e46a","src/config/tree/mod.rs":"be9654a1c844b8444c2f5d0003937fbc06bae7f934073eb206e0541df3b81425","src/config/tree/sections/author.rs":"a27cf6ad5150aa5ccbd64d2786183983e1567c094a221b016875864c9e8f6980","src/config/tree/sections/branch.rs":"105211bb0eefbdc718923d5e770261889163a5d61dc8f0c22af33473cfb32100","src/config/tree/sections/checkout.rs":"329ebe10cca7c5414f9e6229d6dce3178cdb5821a1b7e72bbfac3a60b5b42dc2","src/config/tree/sections/clone.rs":"bbc86890044721ac34ae7610b14987035ab8714c856cec2787fae49c286a6d6d","src/config/tree/sections/committer.rs":"2f99b8bc6e2c4ad9bdba3a85bc6b717acb5b09d1ada2723d3ba5954f804368eb","src/config/tree/sections/core.rs":"2faabe73a3368df866d00645a7aa8bddc1c19211c748ac98a63d2b56782e8ebb","src/config/tree/sections/credential.rs":"e1ce72dc24b9d2f06827b9fc6e8c963f888844ab5a4b48f6d867ad8542909b94","src/config/tree/sections/diff.rs":"79177547529b073b066f99debcade08328a7dda7164f9a0c3316bebdf3df9071","src/config/tree/sections/extensions.rs":"f73c444f2e2c8fbc8d1b1991c0d63532c792362e42833f3ae06059c07387cf66","src/config/tree/sections/fetch.rs":"fabdd13d64a77be965830b8603d9a89daacdca08d4d30cecda403a8383da7fbd","src/config/tree/sections/gitoxide.rs":"dd15ca4d7c1824e9b58e98910d44bb1b61fb8c475c226cadbfac51538ab737d5","src/config/tree/sections/http.rs":"f0d5fcc183892fec9fd7ad7ecb4b53f7027805edb84215a9e8cd5e8fd56da122","src/config/tree/sections/index.rs":"30166326b339c9d0b171ebfd1c1f0fb90e38dc8b2edcd66dfead2a87c38eb938","src/config/tree/sections/init.rs":"e87e33ac5091797bde302f78c8fb7cefce0fb1752610409c1db53c3f7b4179af","src/config/tree/sections/mod.rs":"31f480fde038af3532667fb3ff511b6b978de262fa6cef4e19e1e64655060bc8","src/config/tree/sections/pack.rs":"0a6dcdc7603b0d7a84159a70789b63b6c26d539f98808c520a8e644fc9dbd2f3","src/config/tree/sections/protocol.rs":"feae4977f6576adb446d0599f018d41421a7b1b0871a74e8fcfe5e2b7104de74","src/config/tree/sections/remote.rs":"eb06d89125dc72b5754b642cf561e6e430cad4fbbd57dcd1049d306291afc41f","src/config/tree/sections/safe.rs":"4e96f49ff56d6ebb8944406fe2ae3c4a1fa80c5383f08935015ddc6036b583c3","src/config/tree/sections/ssh.rs":"7db83236912bcb7aa1770f0eb1a388ee0fac94c1548bd9a19051b34c25622841","src/config/tree/sections/url.rs":"e342edcd20979feaf54663a919a0751aaf32b4e1f2e47cf5d028faec62e6b731","src/config/tree/sections/user.rs":"8f02172a5db830832b4edf28693fdef33cece6ba1990c4d7a338e4c9291375ab","src/config/tree/traits.rs":"524f1752e9131c27db3a9016ee6c3abc61175345c2167426ffd5a41602cb950d","src/create.rs":"4ac518896eb2f077eb2da97884d5ad932c753910f8568c59a367861e1bbb44d4","src/diff.rs":"1c377291ba1f8449cb76f050c940d527579e5315fa68ad44a481f9846288b781","src/discover.rs":"41631f880b7880f62d77bfb0511f4d85a82a574ca5f53b8cb8fe35edd5b886f6","src/env.rs":"57da96b315b6fe057a326639cd3e85849793449c4c8f3477b79a032b1a029b31","src/ext/mod.rs":"cc6a4c10c2eb53eb261e0186ee51411dada06bbb245c205356fce1de9d4628f5","src/ext/object_id.rs":"4aabc5d61916acfb88e7fcaec73b42c77b6ce92f8c8460766f5d5dc85a73994d","src/ext/reference.rs":"a51fe4f63e5708afa4fbabd13638b88c34845a64263db77308cd1b974a0f325f","src/ext/rev_spec.rs":"a93595cac7d6895315f5ad60cb0f5c3151f06db70d8a2083d29ba74fc9c0729d","src/ext/tree.rs":"5eab48b15365263e172a071ef5b15809d66fab846f5691b5c4240447b0d31e93","src/filter.rs":"b88ca4a0980d8606a8a43f491749ce99719ebb43a9d0681662030cb6a21f04bf","src/head/log.rs":"0de9d5f834b633756001bdd246e98266084d521d7f775537e6e6ead5ed93d7e4","src/head/mod.rs":"5be9b17e6ffb5dd4c9548b8a4d9e25d6ab6600450762293c43ca0bcbd2a6284f","src/head/peel.rs":"787e5df749cddbe8c560170c28f857ff17fa1ec6c4b866ca70c257bde2bcb6c1","src/id.rs":"1f5f97d24d8c00460d085e2815c08b89632ae1e3cde283a4362798cc4b1276ea","src/init.rs":"ac6f329feb2d33cd8a5f0ce21bb77a166e18656a9952d4cba147196242558c9a","src/interrupt.rs":"217d8611ebe2932e7cb52f77a90cec4a6dbe0bd69eb16b951a70fbd8b5e95853","src/lib.rs":"29cdfbb07e18a10aa07dc402ba4bfbb743941688cc1fee871b5fc6eb9b5373e7","src/mailmap.rs":"415301bdcb3d6991675c7ea86a92eea152cf65df7b2d14da4b58b3b605039e4e","src/object/blob.rs":"2b9d55089764487f98c5174b32cfa833ecbc1498828c272d2eaf50bfdf6027d6","src/object/commit.rs":"d61d8de2c8ae76afab284e38a18b33a9c3ca1ae872a1cfc37aea59d7286702be","src/object/errors.rs":"4040ac42feb5128868f23e613f8de62db1b24a14ff40f2cfeb09eda234e3e354","src/object/impls.rs":"16467413024515d6805b1f0d47ed568d19f70a317b3fb806023028a31357bbbd","src/object/mod.rs":"e436e50c2b4d24e24215481213951404f73d2726499b4ef650c75d147654efec","src/object/peel.rs":"c23ac9baac1216d9320c71926f56548d18f7f3964bdbcccd8ca81f6b756f7ad9","src/object/tag.rs":"ab212a0d5d82e787000fbac1aa3769b97b01a0df8b851f31c7d5c8534fe2191a","src/object/tree/diff/change.rs":"2c88649bc31b39ca08a2ea06363086e80de7bc9bec343d59ff27528a6274e0cc","src/object/tree/diff/for_each.rs":"0119e84546050594d93e3a7bbaa59c92c83654b872b8688283d50786bb15f8ed","src/object/tree/diff/mod.rs":"6839c01be0f2255ffbec2555ee7883ad0c48b8fc545e3e1f536b333750e138ee","src/object/tree/iter.rs":"5273d56a6a04ec156e295d087b3b89f4a28228160d27857df143fcf4ed29fdce","src/object/tree/mod.rs":"e37e38f99d5380c610f95542beb50f51a8e97d4acbd4fd9269f350f9f0091e77","src/object/tree/traverse.rs":"f3fc4fffc9c4b01e1783884389e6e99e1c5d8b7f47a398f0090632e1c02e0cdb","src/open/mod.rs":"d25c11246536e7d57172b375569bd8545b8060f13bbfbc49cbf0f85636627076","src/open/options.rs":"1ffda0517724d1328b2fb296a782d89305a482be65ed24a1d9d867bead8eb5a5","src/open/permissions.rs":"5a55970e738ba7a9af7b51cdeb03955af533b3306baaef278b398cf99f8a312b","src/open/repository.rs":"02b8a092a62f7008e54a0b13f2f27d7c578dca60fd9a8ff1a024ac7f8316e217","src/path.rs":"3cd4c92a626384f8f4db89b2f7594923b922d7b841681c167748a01abc7dc3f7","src/pathspec.rs":"a8f72b38e6e0580f00c4eea53ce8e1359c6abf6678b6638c953fb1fea2a65adb","src/prelude.rs":"2ba88933b632c426f3611985b59a71618f17f98661833a9984a093e34495fbd2","src/progress.rs":"a9ba8ec6cc21eea78121b02d1feaba8f6aab04be441bfe8be9f3dffe4c5e0ba5","src/reference/edits.rs":"28a26c9ec0abb6c612ccde4744970148283f8af9d4e80a2872f85162fd6886f5","src/reference/errors.rs":"0c39d74b8a2b9b744f2a09c459e6b991560af1c385dfc5fa6ea2c73e9e3edcd6","src/reference/iter.rs":"ab8b2dd913e34773e2f9ce2c670c85e1ceed4b48113a18a0362245d8ac782c15","src/reference/log.rs":"f1eab69b8272b15bd23beeb68e88a8b53f003f74d86783196b2de4a84f0497fd","src/reference/mod.rs":"480159cc5e482afd5dd984ac2d54d67ed3e659eed17640c992176c1f87badfea","src/reference/remote.rs":"4467c1bf9d463d1781a3254a3874c7fc763201e33d51e1a92a6f0dcbc6776135","src/remote/access.rs":"76e75baca0155710c2eea0e439df0774ecb0cd6c7e6b950876dd9e6e75be5e9f","src/remote/build.rs":"0bfcf98ee6b96c401a410c71b749426e84a78c17eff944ea7d6229ef2dc3e5e8","src/remote/connect.rs":"6c56de4c10606d620e0d4f7c482ad60cae204a3fc532dcb282fa93697d7c4120","src/remote/connection/access.rs":"075f04705680959074cf3db6856bf34180d68d1a3065011ca56b67a861e2b168","src/remote/connection/fetch/config.rs":"93b1392fdc409dba073e96272f13ad7ab996522d59df819edc800431ee36975b","src/remote/connection/fetch/error.rs":"21ccf5ff0cba287247581849c510aa3dd1acdd510cfbb858a579dd85b2c7b050","src/remote/connection/fetch/mod.rs":"6e765f307d523d4cd97fccde7e57a3ad6577850b1cf7d97fb5553c3b231c665b","src/remote/connection/fetch/negotiate.rs":"7dd8b8665c71fbd2b4561ab0a9de0809af39937817126be05d31b67e5dbcfd4d","src/remote/connection/fetch/receive_pack.rs":"29b47b17dcaf59070a89c4ef0876ef7ac66294a69810d7a3cb9697cd8a22ebcb","src/remote/connection/fetch/update_refs/mod.rs":"0bead57be6b0a461cdf23329519976265c33f2686184b21588e69879f9ad7877","src/remote/connection/fetch/update_refs/tests.rs":"1e7392057098a9716ac3c591cb555b1621bb92ebef16698d8872533a34e0ce08","src/remote/connection/fetch/update_refs/update.rs":"729ae1cfef895df37ae5a34c19d9aac9b77e664f107f3adf81a79ae58412e960","src/remote/connection/mod.rs":"2c3828141f50e68946560acc2dc22f02ef01ea713aea35ac6785e87a03f25fa4","src/remote/connection/ref_map.rs":"c5eb7274fd0fbd420a35fa9993318af4cb1e476f90c141a636f36d52c57767e9","src/remote/errors.rs":"6c4986618c55c2a86e4623b02837918dc61849c3d634e7d474a123eb7e01bcbc","src/remote/fetch.rs":"cf78b682074ad700ea6eb4d511401a737a905bd4af0dcfd639b7f850227f5978","src/remote/init.rs":"87576486ae399945b2134dbce70e960ff4c2b3a3046988449f6da0c25f6d646c","src/remote/mod.rs":"14a1532470cc76cf3b727657439923f3515dd781ebfc7030d9481056c6bbf162","src/remote/name.rs":"9fa7e81a157375ecb40ddfba5da850fef7513296a68014a50f5148d57f40b8b7","src/remote/save.rs":"a8b2160cde235c9a2ecddc0181d1cca57a01e046eae8d3b11fa7b29e43ca6866","src/remote/url/mod.rs":"a3279f5330fc83193e583f2b839ab08006c293b0040db6cc74969d50813fbbaa","src/remote/url/rewrite.rs":"4d43167909020458abc5e3e7310e3efaddb9fc7c783581fbc9422fa8b057d95d","src/remote/url/scheme_permission.rs":"4f6e528260c67af54171477d97707050f048c0c35e77f088f8ddc4ae135e6386","src/repository/attributes.rs":"6c28910869eafda6c4c9d6a2b06a2a881f2d5fcf6f5c084ac501850ced2af810","src/repository/cache.rs":"daa9e03d59475b99d3e5c736a66f8b2f82035566906e900502195cf93adc3e1b","src/repository/config/mod.rs":"5b226b1de29da2a00fa123d98ad1567ecb5ae3c9286b470d322fea4f672a2d11","src/repository/config/transport.rs":"d1cbb6a2b8f4f4ced29ce9fa547bfd5727faaf063976b9849869aa3d7ddc200c","src/repository/diff.rs":"5a172b051b9024f081a28074efc53b3010187367435db3846a0b46c9fa4f35e4","src/repository/filter.rs":"e26747777d995be5467538e1e0bd73c9ebe14133f482fd97dd852535e8d93878","src/repository/graph.rs":"a1f1fe74d9445a026c6d45d928c56045447d9a75078aa06c90b85eee5d4c3c1e","src/repository/identity.rs":"0d7c575578eef869d16d99ce465696f41b1c7e8d2bdba93945219d7453b3d717","src/repository/impls.rs":"b07dd79074b3a175df1ec43042c6cd0ad98b884885e25deae6828a59cc290e2a","src/repository/index.rs":"77d444f976fbd47098d6e27a172d2047b7bb4509269e1cb9fed884ad33d6d414","src/repository/init.rs":"f72f56ff1ebb225d043a088c922adb24495d4031d4de2edf6a144156f1f6305e","src/repository/kind.rs":"9078852e039de1a947ff9d1dd59397ee9c6331912443bdd2452405889d3ab7b8","src/repository/location.rs":"542c6db1c9781de566a6996c4211ddcb748d5c48ce3a49004c638fa6a461bc12","src/repository/mailmap.rs":"3ca35665ac2d2c6f100826169822750e1b6647b1f284206f408126e749718030","src/repository/mod.rs":"918fa5f98563a3896a4948c2ee353e934befdefdfd7c5430da57fd6dfa716cbc","src/repository/object.rs":"5b62a7ddd6153cbf08e2419a2f9b18e4115ab37958b02f7f9177952f284b60f6","src/repository/pathspec.rs":"6da21d9a2f75ace735cc96aa6dd709bf323f2c5fc05daa40dfc3d393b2485187","src/repository/permissions.rs":"9f7f41fd250d043cea7ee6ff0cdc315838dbb6226bde3dca2a7666f01d648090","src/repository/reference.rs":"ee6ab7e112bc589ec50f0843c6c40a7e92a14b8547a67c570dd69671a6f7de65","src/repository/remote.rs":"4ecc9021f3369d9530a130fe2dbe3c98dc50b593a5194c8584293808fc2bc4a4","src/repository/revision.rs":"1fe9aac4fac6cdfe23ec9c0512175e38492c0edeac05af4975177587240d47cb","src/repository/shallow.rs":"ce0b3358ed0ccca6ac52a985555793013f7c2d5de83291cd9810181ac22e714a","src/repository/state.rs":"040cca4a26463211aef85e4539d084969240f30d985c1bd3ae9bb3cd01009d1d","src/repository/submodule.rs":"a44ebd1132a898bbd8454628888bb8ce41611066ca8d78004242fcc522aac27c","src/repository/thread_safe.rs":"40e455ea3b5637da6e2acae4f5d13c4b8e8a25b8944a4c2870243e31f7f13632","src/repository/worktree.rs":"76043a24d919a683683fd1c40a29fa08127cb5f05e929c0d4292d8e37b47e7e5","src/revision/mod.rs":"c499aa026e320d76e8a125cdb09458e6bbba9431b9777ec0f3be4a9da2e77b53","src/revision/spec/mod.rs":"2a756131221ec9f89ac73377132d5554645045d11eb1e4b2b482b36d3001e1d3","src/revision/spec/parse/delegate/mod.rs":"7d42b7fd3e74f73cb1898f4472edfe1aeb795976e1ab9ce232676b36d633911a","src/revision/spec/parse/delegate/navigate.rs":"89cb36deeffc2f30436b3ba54e4604a7a82ac345873fdb86a1e1dc59e6890151","src/revision/spec/parse/delegate/revision.rs":"b3ee71f7ec701a202c8e1b9fcc6a9397a8dfb251f195fa218429e630b0280ab4","src/revision/spec/parse/error.rs":"48c0c2e7dcffe80aac5563094787e0502c4275619fc35467a2687499bbad0fef","src/revision/spec/parse/mod.rs":"bba5e79d8cfbd379c5ef179ed93a4a63f1674532322ea9c94a9feb2a287eeed8","src/revision/spec/parse/types.rs":"8876e1b5caf323d4c671f31fc06c07043df10592cecec6dcd62714826ba09bfe","src/revision/walk.rs":"bc0c7d78dcdf36cf3126133aa19864053e4f5c84c5f87a7499207bde2580e9ae","src/shallow.rs":"4296fb5298ef71eb1d78aae21d11bfb129a4f5a5f3cf43bf6d5256fec40f8dc3","src/state.rs":"1e3c5e1df4016e8b3e60028def84b0f706c4fcffaba11b1152d9240e144f21e8","src/submodule/errors.rs":"996617b2e707f903de4316e775b8bac03a925959c2c70278aa84f56fa68a9fb0","src/submodule/mod.rs":"6594c1ead043eee0e1d038562c41455198904ae94e60d3e125dbf3b456b2a7bc","src/tag.rs":"f60043aaa7afb54652ab6cf64765ebd61607f19a83dd5960abf8077d2cb91d44","src/types.rs":"285a14e8447c1b646c690cdb1b8430463adb4d4a236370447c81f26cad2e7887","src/worktree/mod.rs":"2053c334a780377e12679a363df6441605f5ca1893237304490cb69b8d7068ca","src/worktree/proxy.rs":"07ff3cfc6a8f326fb7d62f6762f682498e9e5f131ece935acfd26b5223a338f1"},"package":"5b0dcdc9c60d66535897fa40a7ea2a635e72f99456b1d9ae86b7e170e80618cb"} \ No newline at end of file
diff --git a/vendor/gix/CHANGELOG.md b/vendor/gix/CHANGELOG.md
deleted file mode 100644
index 5aea6d751..000000000
--- a/vendor/gix/CHANGELOG.md
+++ /dev/null
@@ -1,3038 +0,0 @@
-# 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.55.2 (2023-10-13)
-
-### Bug Fixes
-
- - <csr-id-8011c73ee401bfca03811a249c46a4dd468af1b8/> bump `gix-transport` version to prevent it from being picked up.
- `gix-transport` v0.37.1 could accidentally be picked up by older, incompatible,
- `gix` versions which now fail to build.
-
- Thus v0.37.1 is now yanked and replaced with v0.38.0 along with a new
- release of `gix` to go with it.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 2 commits contributed to the release.
- - 1 commit was understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Prepare changelogs prior to release ([`12b5caf`](https://github.com/Byron/gitoxide/commit/12b5cafc49baf07d00313de468970a2db33ac1f8))
- - Bump `gix-transport` version to prevent it from being picked up. ([`8011c73`](https://github.com/Byron/gitoxide/commit/8011c73ee401bfca03811a249c46a4dd468af1b8))
-</details>
-
-## 0.55.1 (2023-10-12)
-
-### New Features
-
- - <csr-id-5732303180d26374016b70bdd7fa0278dd84cff3/> Add `take_data()` to all primitive object types.
- That is the new, most direct way to obtain its data which otherwise
- is immovable.
- - <csr-id-88f2e6c4c540b9c8032e6eee9c5da65a9bcfeef8/> Add `detach()` and `detached()` too all object types.
- That way, the detachment API is symmetric.
- It's required to overcome the `Drop` implementation of each of these types
- which prevents moving data out of the object (easily).
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 3 commits contributed to the release.
- - 2 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix v0.55.1 ([`4642c0c`](https://github.com/Byron/gitoxide/commit/4642c0c78f45b1956837bc874f6757fc302bee4a))
- - Add `take_data()` to all primitive object types. ([`5732303`](https://github.com/Byron/gitoxide/commit/5732303180d26374016b70bdd7fa0278dd84cff3))
- - Add `detach()` and `detached()` too all object types. ([`88f2e6c`](https://github.com/Byron/gitoxide/commit/88f2e6c4c540b9c8032e6eee9c5da65a9bcfeef8))
-</details>
-
-## 0.55.0 (2023-10-12)
-
-<csr-id-f478a3722f0be35c109ea60b79cd4ac6e607480b/>
-
-This release contains a complete rewrite of the internal url parsing logic, the public interface stays mostly the same however. Gitoxide will now be
-more correct, interpreting more urls the same way Git does. 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. Additionally, the
-error types have been adjusted to print a more comprehensive message by default, making sure they stay helpful even when bubbled up through multiple abstraction
-layers.
-
-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.
-
-### Other
-
- - <csr-id-f478a3722f0be35c109ea60b79cd4ac6e607480b/> inform about the absence of strict hash verification and strict object creation.
- Those are present in `git2` and enabled by default, and `gitoxde` definitely
- wants to do the same at some point.
-
-### New Features
-
- - <csr-id-c79a7daa30fe90d14d8e3387ec48116b37faf460/> add `Repository::head_tree()` to more easily obtain the current tree.
- - <csr-id-787a9aa91c1abaa7572f5d19f8a2acbb7ecc0732/> Add `Repository::has_object()` as a high-level alternative.
- Previously, one would have to call `repo.objects.contains()`, which
- is fine, but this method is necessary for symmetry of the API
- and one shouldn't have to drop down a level to do this.
-
- This method also knows empty trees as special case.
- - <csr-id-3cec935e692eeb33ffcac98988e34a390f755bf3/> add `Object::try_into_blob()` and `into_blob()` and `Repository::empty_blob()`
- This way it's easier to assert that an object is actually a blob.
- - <csr-id-7d9ecdd1c230204468a965f703d5efd00fa7fb79/> add `Repository::index_or_empty()`.
- This is useful if a missing index should mean it's empty.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 15 commits contributed to the release over the course of 16 calendar days.
- - 17 days passed between releases.
- - 5 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Thanks Clippy
-
-<csr-read-only-do-not-edit/>
-
-[Clippy](https://github.com/rust-lang/rust-clippy) helped 1 time to make code idiomatic.
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix-transport v0.37.1, gix-protocol v0.41.0, gix-revision v0.23.0, gix-refspec v0.19.0, gix-worktree v0.27.0, gix-status v0.2.0, gix-submodule v0.5.0, gix-worktree-state v0.4.0, gix v0.55.0 ([`14ddbd4`](https://github.com/Byron/gitoxide/commit/14ddbd4c15128b1d5631a2388a00e024842b7b83))
- - Release gix-hash v0.13.1, gix-features v0.36.0, gix-actor v0.28.0, gix-object v0.38.0, gix-glob v0.14.0, gix-attributes v0.20.0, gix-command v0.2.10, gix-filter v0.6.0, gix-fs v0.8.0, gix-commitgraph v0.22.0, gix-revwalk v0.9.0, gix-traverse v0.34.0, gix-worktree-stream v0.6.0, gix-archive v0.6.0, gix-tempfile v11.0.0, gix-lock v11.0.0, gix-ref v0.38.0, gix-config v0.31.0, gix-url v0.25.0, gix-credentials v0.21.0, gix-diff v0.37.0, gix-discover v0.26.0, gix-ignore v0.9.0, gix-index v0.26.0, gix-mailmap v0.20.0, gix-negotiate v0.9.0, gix-pack v0.44.0, gix-odb v0.54.0, gix-pathspec v0.4.0, gix-packetline v0.16.7, gix-transport v0.37.0, gix-protocol v0.41.0, gix-revision v0.23.0, gix-refspec v0.19.0, gix-worktree v0.27.0, gix-status v0.2.0, gix-submodule v0.5.0, gix-worktree-state v0.4.0, gix v0.55.0, safety bump 37 crates ([`68e5432`](https://github.com/Byron/gitoxide/commit/68e54326e527a55dd5b5079921fc251615833040))
- - Prepare changelogs prior to release ([`1347a54`](https://github.com/Byron/gitoxide/commit/1347a54f84599d8f0aa935d6e64b16c2298d25cf))
- - Merge branch 'improvements' ([`429e7b2`](https://github.com/Byron/gitoxide/commit/429e7b25f93c8a7947db19bafa74babf199a1aa6))
- - Inform about the absence of strict hash verification and strict object creation. ([`f478a37`](https://github.com/Byron/gitoxide/commit/f478a3722f0be35c109ea60b79cd4ac6e607480b))
- - Add `Repository::head_tree()` to more easily obtain the current tree. ([`c79a7da`](https://github.com/Byron/gitoxide/commit/c79a7daa30fe90d14d8e3387ec48116b37faf460))
- - Add `Repository::has_object()` as a high-level alternative. ([`787a9aa`](https://github.com/Byron/gitoxide/commit/787a9aa91c1abaa7572f5d19f8a2acbb7ecc0732))
- - Add `Object::try_into_blob()` and `into_blob()` and `Repository::empty_blob()` ([`3cec935`](https://github.com/Byron/gitoxide/commit/3cec935e692eeb33ffcac98988e34a390f755bf3))
- - Thanks clippy ([`345712d`](https://github.com/Byron/gitoxide/commit/345712dcdfddcccc630bbfef2ed4f461b21550d3))
- - Merge branch 'reset' ([`b842691`](https://github.com/Byron/gitoxide/commit/b8426919a491dc3a7df01ee3f258fc0d8a3a327c))
- - Trust Ctime again ([`f929d42`](https://github.com/Byron/gitoxide/commit/f929d420cb768f2df1d7886564ca03b3c3254a82))
- - Add `Repository::index_or_empty()`. ([`7d9ecdd`](https://github.com/Byron/gitoxide/commit/7d9ecdd1c230204468a965f703d5efd00fa7fb79))
- - Adapt to changes in `gix-status` ([`54fb7c2`](https://github.com/Byron/gitoxide/commit/54fb7c24a97cb2339a67ad269344ce65166a545d))
- - Merge branch 'gix-url-parse-rewrite' ([`a12e4a8`](https://github.com/Byron/gitoxide/commit/a12e4a88d5f5636cd694c72ce45a8b75aa754d28))
- - Update changelogs ([`4349353`](https://github.com/Byron/gitoxide/commit/43493531bbf3049bee3d7b14b7a6dbe874e37ebc))
-</details>
-
-## 0.54.1 (2023-09-25)
-
-### Bug Fixes
-
- - <csr-id-300a83821358f2a43649515606ebb84741e82780/> local refs created during fetching will now always be valid.
- Previously it could create symbolic refs that were effectively unborn, i.e.
- point to a reference which doesn't exist.
-
- Now these will always point to the peeled object instead.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 2 commits contributed to the release.
- - 1 commit was understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix v0.54.1 ([`f603fd7`](https://github.com/Byron/gitoxide/commit/f603fd7a68206a6989a9f959216eba6cca0a6733))
- - Local refs created during fetching will now always be valid. ([`300a838`](https://github.com/Byron/gitoxide/commit/300a83821358f2a43649515606ebb84741e82780))
-</details>
-
-## 0.54.0 (2023-09-24)
-
-<csr-id-e022096aa495f55a05f83860243f49552be501f7/>
-<csr-id-79e47a512507c7fd7acbdff624a5249e24505e0d/>
-
-### New Features
-
- - <csr-id-f9d14d86a6578cf0f9a0c4a2256ad227b9264340/> Add `PathspecDetached` as pathspec that can more easily be used across threads.
- - <csr-id-f066f9889b57a4ffaebc0ed1442d77999498db42/> `PathSpec` implements `gix_status::PathSpec` to allow it to be used there.
- The reason we need a trait and can't do with simply a function is that multiple calls
- are needed to test for inclusion *and* allow the common-prefix optimization.
- - <csr-id-a8333f1137df51d237f6debf056ac075b0a2cd94/> add `Repository::stat_options()` to learn how an index would compare filesystem stats.
- - <csr-id-2734e84b74b761bff27fc1eb27f57d9d839c9240/> add `parallel` feature toggle
- Make certain data structure threadsafe (or `Sync`) to facilitate multithreading.
- Further, many algorithms will now use multiple threads by default.
- If unset, most of `gix` can only be used in a single thread
- as data structures won't be `Send` anymore.
-
-### Bug Fixes
-
- - <csr-id-e22893c1c95a76d9a5f3b2f2a4e2a30f815ee7e5/> do not trust ctime by default.
- On MacOS it seems to be off by two seconds right from the source, which
- seems to be an issue `stat` isn't having.
- - <csr-id-334281c8771790df7a022daa4a700c96b99acbc0/> ignore empty `core.askpass` settings
- This is the same as what `git` does, it's explicit per value, which
- means that other paths might be flagged as empty automatically.
-
-### Other
-
- - <csr-id-e022096aa495f55a05f83860243f49552be501f7/> add note about the trust-model.
- It should explain why `gix` is happy to open repositories that won't
- be handled by `git` unless overrides are set.
-
-### Test
-
- - <csr-id-79e47a512507c7fd7acbdff624a5249e24505e0d/> add assertion to assure `ThreadSafeRepository` is sync.
- If it doesn't appear to be sync, be sure to use the `max-performance-safe` feature.
-
-### Bug Fixes (BREAKING)
-
- - <csr-id-ee9276f2a7789c20d88d40624ad648e44b604a27/> `PrepareCheckout::main_worktree()` now takes `Progress` as geric argument.
- This makes it more flexible and convenient, but is technically a breaking change.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 31 commits contributed to the release over the course of 15 calendar days.
- - 15 days passed between releases.
- - 9 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix-features v0.35.0, gix-actor v0.27.0, gix-object v0.37.0, gix-glob v0.13.0, gix-attributes v0.19.0, gix-filter v0.5.0, gix-fs v0.7.0, gix-commitgraph v0.21.0, gix-revwalk v0.8.0, gix-traverse v0.33.0, gix-worktree-stream v0.5.0, gix-archive v0.5.0, gix-tempfile v10.0.0, gix-lock v10.0.0, gix-ref v0.37.0, gix-config v0.30.0, gix-url v0.24.0, gix-credentials v0.20.0, gix-diff v0.36.0, gix-discover v0.25.0, gix-ignore v0.8.0, gix-index v0.25.0, gix-mailmap v0.19.0, gix-negotiate v0.8.0, gix-pack v0.43.0, gix-odb v0.53.0, gix-pathspec v0.3.0, gix-transport v0.37.0, gix-protocol v0.40.0, gix-revision v0.22.0, gix-refspec v0.18.0, gix-status v0.1.0, gix-submodule v0.4.0, gix-worktree v0.26.0, gix-worktree-state v0.3.0, gix v0.54.0, gitoxide-core v0.32.0, gitoxide v0.30.0, safety bump 37 crates ([`7891fb1`](https://github.com/Byron/gitoxide/commit/7891fb17348ec2f4c997665f9a25be36e2713da4))
- - Prepare changelogs prior to release ([`8a60d5b`](https://github.com/Byron/gitoxide/commit/8a60d5b80877c213c3b646d3061e8a33e0e433ec))
- - Merge branch 'reset' ([`54a8495`](https://github.com/Byron/gitoxide/commit/54a849545140f7f1c0c7564c418071c0a76a34e7))
- - Add `PathspecDetached` as pathspec that can more easily be used across threads. ([`f9d14d8`](https://github.com/Byron/gitoxide/commit/f9d14d86a6578cf0f9a0c4a2256ad227b9264340))
- - Do not trust ctime by default. ([`e22893c`](https://github.com/Byron/gitoxide/commit/e22893c1c95a76d9a5f3b2f2a4e2a30f815ee7e5))
- - `PathSpec` implements `gix_status::PathSpec` to allow it to be used there. ([`f066f98`](https://github.com/Byron/gitoxide/commit/f066f9889b57a4ffaebc0ed1442d77999498db42))
- - Add `Repository::stat_options()` to learn how an index would compare filesystem stats. ([`a8333f1`](https://github.com/Byron/gitoxide/commit/a8333f1137df51d237f6debf056ac075b0a2cd94))
- - Fix compile time warning ([`4ce7f7c`](https://github.com/Byron/gitoxide/commit/4ce7f7c2c8bb66f0c093bf6e4d20f5568ca04f6a))
- - Merge branch 'parallel-feature' ([`c270f78`](https://github.com/Byron/gitoxide/commit/c270f7883e1ea8156d521b12d161a47b2144425c))
- - Add `parallel` feature toggle ([`2734e84`](https://github.com/Byron/gitoxide/commit/2734e84b74b761bff27fc1eb27f57d9d839c9240))
- - Add assertion to assure `ThreadSafeRepository` is sync. ([`79e47a5`](https://github.com/Byron/gitoxide/commit/79e47a512507c7fd7acbdff624a5249e24505e0d))
- - Merge pull request #1015 from NobodyXu/optimize/prepare-checkout ([`14312b6`](https://github.com/Byron/gitoxide/commit/14312b6c21d6382f7e536db7a1d8b519b97b8300))
- - Merge branch 'path-config' ([`9c528dc`](https://github.com/Byron/gitoxide/commit/9c528dc8282c8b2f3a023e523dccdd0f7a711e61))
- - Merge pull request #1012 from NobodyXu/optimization/try-into-de-momo ([`afb1960`](https://github.com/Byron/gitoxide/commit/afb1960e3e13bc9fc7cc5f3a3a244945f00966ad))
- - Ignore empty `core.askpass` settings ([`334281c`](https://github.com/Byron/gitoxide/commit/334281c8771790df7a022daa4a700c96b99acbc0))
- - Merge branch 'optimize/progress-use' ([`1f2ffb6`](https://github.com/Byron/gitoxide/commit/1f2ffb6d86ef073caf43a2f7a77fe712a1aa495e))
- - `PrepareCheckout::main_worktree()` now takes `Progress` as geric argument. ([`ee9276f`](https://github.com/Byron/gitoxide/commit/ee9276f2a7789c20d88d40624ad648e44b604a27))
- - Add note about the trust-model. ([`e022096`](https://github.com/Byron/gitoxide/commit/e022096aa495f55a05f83860243f49552be501f7))
- - Optimize `clone::PrepareCheckout::main_worktree`` ([`938f518`](https://github.com/Byron/gitoxide/commit/938f5187f0ff51561971ca463584ec0db93f3455))
- - Fix `maybe_async` ([`c80e809`](https://github.com/Byron/gitoxide/commit/c80e809c2655d15d7f22170782dacd64fe2e01bd))
- - Rm unused clippy lint ([`d82f84b`](https://github.com/Byron/gitoxide/commit/d82f84b23a3def8e237e2b2511874c6045032c04))
- - Fixed error by also using trait object in `remote::fetch::Prepare::receive` ([`44faa01`](https://github.com/Byron/gitoxide/commit/44faa01cf0612df5685922710d4a0adf6715ef77))
- - Revert changes to binary files ([`3eb8653`](https://github.com/Byron/gitoxide/commit/3eb8653b78f2a0ca654fbebb185f3d6416d779d5))
- - Rm binary files ([`6a33594`](https://github.com/Byron/gitoxide/commit/6a335940332b8d5069cb0c310d2d8e43fbeee01e))
- - Use trait object for `progress` in `PrepareFetch::fetch_only` ([`70989b3`](https://github.com/Byron/gitoxide/commit/70989b3965077ae00ec6cf344f31627a804a8225))
- - Fix clippy warnings ([`d5aa2ba`](https://github.com/Byron/gitoxide/commit/d5aa2ba030f57d65021d84efa99c0abc9d61f575))
- - Optimize `Repository::write_blob_stream`: Avoid dup codegen ([`ca8a373`](https://github.com/Byron/gitoxide/commit/ca8a373b1a3de44d2bef3e4908d6f5269b6cdd1f))
- - Apply `gix_macros::momo` to `Repository::write_blob` ([`bae928d`](https://github.com/Byron/gitoxide/commit/bae928d9668bbb4ba0dadb4605d77fc773362e3f))
- - Optimize `Repository::write_object`: Avoid dup momo ([`32f1c7d`](https://github.com/Byron/gitoxide/commit/32f1c7d2bc2e91cb346c8b379dce41293f88b222))
- - Rm unnecessary lifetime annotation in `Repository::commit_as_inner` ([`cf70a2e`](https://github.com/Byron/gitoxide/commit/cf70a2e0f08dd323c0713b4e23b21f54668a99a2))
- - Optimize `gix`: de-momo `impl TryInto` by hand ([`b19c140`](https://github.com/Byron/gitoxide/commit/b19c140ce3a6e5d9ddf65684361223a2f9fa7e73))
-</details>
-
-## 0.53.1 (2023-09-08)
-
-### Bug Fixes
-
- - <csr-id-902639b9b72ead72b5355e0a1a4da5afd7fed46d/> `interrupt` feature only gates signal-handling, but leaves the `interrupt` module alone.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 2 commits contributed to the release.
- - 1 commit was understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix v0.53.1 ([`1b1fc25`](https://github.com/Byron/gitoxide/commit/1b1fc257d5748c7c41e899bf2d1447ffd9f22d19))
- - `interrupt` feature only gates signal-handling, but leaves the `interrupt` module alone. ([`902639b`](https://github.com/Byron/gitoxide/commit/902639b9b72ead72b5355e0a1a4da5afd7fed46d))
-</details>
-
-## 0.53.0 (2023-09-08)
-
-<csr-id-ed327f6163f54756e58c20f86a563a97efb256ca/>
-
-This release adds feature toggles which help to reduce compile time. Please [see the library](https://docs.rs/gix/0.53.0/gix/) documentation for all the details.
-
-### New Features
-
- - <csr-id-2b8d09f785f471aa12fc6793f0ea40c1f8d9ea4a/> remove `log` dependency in favor of `gix-trace`
- - <csr-id-36d34bd7e8cd944c009cb7acbe39c1dc445b4adc/> add `interrupt` feature to reduce dependencies
- - <csr-id-721c37722ca8b12a5f9c060061040c79f9da6aa9/> Allow index access to be toggled with the `index` feature.
- - <csr-id-92dd18154b526b4c5132d770960a36ccf739dec8/> add `excludes` feature to make exclude-checks possible.
- - <csr-id-c4ffde013a62a38a6f63c4a160bc3cdb6aafd65a/> add `mailmap` feature
- - <csr-id-c42064d8ca382513c944f3df5c08e4ff66d5f804/> add `revision` component behind a feature toggle.
- - <csr-id-147528ff647dc74473ef8dd4ceac6fedebc0b15c/> `gix` without connection support includes less code
- - <csr-id-fea044e5d09282a5772c8fe9a534d9ebf7f11bbc/> allow disabling the `blob-diff` capability
- This also removes all diff capabilities.
- - <csr-id-c5ec244979b7e6baf9a8237e4f12cb87809131ae/> improve feature documentation.
- This should make optimizing compile time and performance easier, while
- assuring these options aren't pre-determined by library providers.
- - <csr-id-c79991cde8216271ab854b7574e7d97efd79d07c/> `Clone` for `ThreadSafeRepository`
- It is `Sync` and can easily be passed by reference, but sometimes it's nice
- to be cloning it as well.
- - <csr-id-d22b7fb1304cce3b2aabac42cc58fe7c5911f276/> provide `Repository::find_fetch_remote()` to obtain a remote just like git would.
-
-### Bug Fixes
-
- - <csr-id-a957478e0f623803bc6358d08b9ffaa2305e24d4/> put `gix-credentials` and `gix-prompt` behind the 'credentials' feature toggle.
- They are also available when using https transports.
- - <csr-id-4971a4837ff5ac6654aa75214bdd2243d4d864a5/> handle submodules whose entry in the index is a file.
-
-### Chore (BREAKING)
-
- - <csr-id-ed327f6163f54756e58c20f86a563a97efb256ca/> update to the latest `prodash`
- It makes proper usage of `Progress` types easier and allows them to be used
- as `dyn` traits as well.
-
-### New Features (BREAKING)
-
- - <csr-id-58b0e6f860d4d3b5548c18d3eae97141bc6dc377/> Use `stack` abstraction in `Repository::excludes()`.
- This makes it easier to use.
- - <csr-id-24dd870919ba444aa8099c63a78ea120d47ec28e/> use `prodash::Count` to indicate that nothing more than counting is performed, in place of `prodash::Progress`
- - <csr-id-54291fdfc62c7d8a31bc5564713c23eab3865dc5/> Provide a wrapper for `gix_worktree::Stack` for simpler attribute queries.
-
-### Bug Fixes (BREAKING)
-
- - <csr-id-741b41e6e6c6f283c1632a7de0da44a5e7842817/> remove `regex` feature in favor of `revparse-regex`.
- `revparse-regex` is only used when parsing revspecs that use a special syntax.
- This feature is also enabled by default.
- - <csr-id-072ee32f693a31161cd6a843da6582d13efbb20b/> use `dyn` trait where possible.
- This reduces compile time due to avoiding duplication.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 57 commits contributed to the release over the course of 17 calendar days.
- - 17 days passed between releases.
- - 19 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Thanks Clippy
-
-<csr-read-only-do-not-edit/>
-
-[Clippy](https://github.com/rust-lang/rust-clippy) helped 2 times to make code idiomatic.
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix-transport v0.36.0, gix-protocol v0.39.0, gix-revision v0.21.0, gix-refspec v0.17.0, gix-submodule v0.3.0, gix-worktree v0.25.0, gix-worktree-state v0.2.0, gix v0.53.0 ([`1ff3064`](https://github.com/Byron/gitoxide/commit/1ff30641b8724efd6699d8bef5c71d28454e98b9))
- - Release gix-date v0.8.0, gix-hash v0.13.0, gix-features v0.34.0, gix-actor v0.26.0, gix-object v0.36.0, gix-path v0.10.0, gix-glob v0.12.0, gix-attributes v0.18.0, gix-packetline-blocking v0.16.6, gix-filter v0.4.0, gix-fs v0.6.0, gix-commitgraph v0.20.0, gix-hashtable v0.4.0, gix-revwalk v0.7.0, gix-traverse v0.32.0, gix-worktree-stream v0.4.0, gix-archive v0.4.0, gix-config-value v0.14.0, gix-tempfile v9.0.0, gix-lock v9.0.0, gix-ref v0.36.0, gix-sec v0.10.0, gix-config v0.29.0, gix-prompt v0.7.0, gix-url v0.23.0, gix-credentials v0.19.0, gix-diff v0.35.0, gix-discover v0.24.0, gix-ignore v0.7.0, gix-index v0.24.0, gix-macros v0.1.0, gix-mailmap v0.18.0, gix-negotiate v0.7.0, gix-pack v0.42.0, gix-odb v0.52.0, gix-pathspec v0.2.0, gix-packetline v0.16.6, gix-transport v0.36.0, gix-protocol v0.39.0, gix-revision v0.21.0, gix-refspec v0.17.0, gix-submodule v0.3.0, gix-worktree v0.25.0, gix-worktree-state v0.2.0, gix v0.53.0, safety bump 39 crates ([`8bd0456`](https://github.com/Byron/gitoxide/commit/8bd045676bb2cdc02624ab93e73ff8518064ca38))
- - Prepare changelogs for release ([`375db06`](https://github.com/Byron/gitoxide/commit/375db06a8442378c3f7a922fae38e2a6694d9d04))
- - Merge branch 'optimizations' ([`6135a5e`](https://github.com/Byron/gitoxide/commit/6135a5ea8709646f01da62939a59dd3a9750e007))
- - Adapt to changes in `gix` ([`805b8aa`](https://github.com/Byron/gitoxide/commit/805b8aa74b064b7aa08d87094a994bb8c7aae6ed))
- - Remove `log` dependency in favor of `gix-trace` ([`2b8d09f`](https://github.com/Byron/gitoxide/commit/2b8d09f785f471aa12fc6793f0ea40c1f8d9ea4a))
- - Add `interrupt` feature to reduce dependencies ([`36d34bd`](https://github.com/Byron/gitoxide/commit/36d34bd7e8cd944c009cb7acbe39c1dc445b4adc))
- - Allow index access to be toggled with the `index` feature. ([`721c377`](https://github.com/Byron/gitoxide/commit/721c37722ca8b12a5f9c060061040c79f9da6aa9))
- - Put `gix-credentials` and `gix-prompt` behind the 'credentials' feature toggle. ([`a957478`](https://github.com/Byron/gitoxide/commit/a957478e0f623803bc6358d08b9ffaa2305e24d4))
- - Add `excludes` feature to make exclude-checks possible. ([`92dd181`](https://github.com/Byron/gitoxide/commit/92dd18154b526b4c5132d770960a36ccf739dec8))
- - Use `stack` abstraction in `Repository::excludes()`. ([`58b0e6f`](https://github.com/Byron/gitoxide/commit/58b0e6f860d4d3b5548c18d3eae97141bc6dc377))
- - Add `mailmap` feature ([`c4ffde0`](https://github.com/Byron/gitoxide/commit/c4ffde013a62a38a6f63c4a160bc3cdb6aafd65a))
- - Simplify test-suite ([`799a515`](https://github.com/Byron/gitoxide/commit/799a5152c7ca444a8240a022e049c14b0b61d22d))
- - Remove `regex` feature in favor of `revparse-regex`. ([`741b41e`](https://github.com/Byron/gitoxide/commit/741b41e6e6c6f283c1632a7de0da44a5e7842817))
- - Add `revision` component behind a feature toggle. ([`c42064d`](https://github.com/Byron/gitoxide/commit/c42064d8ca382513c944f3df5c08e4ff66d5f804))
- - `gix` without connection support includes less code ([`147528f`](https://github.com/Byron/gitoxide/commit/147528ff647dc74473ef8dd4ceac6fedebc0b15c))
- - Allow disabling the `blob-diff` capability ([`fea044e`](https://github.com/Byron/gitoxide/commit/fea044e5d09282a5772c8fe9a534d9ebf7f11bbc))
- - Improve feature documentation. ([`c5ec244`](https://github.com/Byron/gitoxide/commit/c5ec244979b7e6baf9a8237e4f12cb87809131ae))
- - Merge branch 'feat/gix-momo' ([`a1ed6a1`](https://github.com/Byron/gitoxide/commit/a1ed6a1aacae02a167b7ec44e1a47411a2194ff7))
- - Handle submodules whose entry in the index is a file. ([`4971a48`](https://github.com/Byron/gitoxide/commit/4971a4837ff5ac6654aa75214bdd2243d4d864a5))
- - Merge branch `dyn`ification ([`f658fcc`](https://github.com/Byron/gitoxide/commit/f658fcc52dc2200ae34ca53dc10be97fb9012057))
- - Use `dyn` trait where possible. ([`072ee32`](https://github.com/Byron/gitoxide/commit/072ee32f693a31161cd6a843da6582d13efbb20b))
- - Use `prodash::Count` to indicate that nothing more than counting is performed, in place of `prodash::Progress` ([`24dd870`](https://github.com/Byron/gitoxide/commit/24dd870919ba444aa8099c63a78ea120d47ec28e))
- - Update to the latest `prodash` ([`ed327f6`](https://github.com/Byron/gitoxide/commit/ed327f6163f54756e58c20f86a563a97efb256ca))
- - Merge branch 'improvements' ([`8a7c2af`](https://github.com/Byron/gitoxide/commit/8a7c2af0d302d5acc87ef2d432bd6870017af63e))
- - Provide a wrapper for `gix_worktree::Stack` for simpler attribute queries. ([`54291fd`](https://github.com/Byron/gitoxide/commit/54291fdfc62c7d8a31bc5564713c23eab3865dc5))
- - `Clone` for `ThreadSafeRepository` ([`c79991c`](https://github.com/Byron/gitoxide/commit/c79991cde8216271ab854b7574e7d97efd79d07c))
- - Merge branch 'adjustments-for-cargo' ([`b7560a2`](https://github.com/Byron/gitoxide/commit/b7560a2445b62f888bf5aa2ba4c5a47ae037cb23))
- - Adapt to changes in `gix-submodule` ([`f8471b1`](https://github.com/Byron/gitoxide/commit/f8471b11e0d65fdb2617b927a8a207659a161439))
- - Release gix-index v0.23.1 ([`11b9c71`](https://github.com/Byron/gitoxide/commit/11b9c71311df978ebb20cca0d765cf249c8eedcf))
- - Release gix-date v0.7.4, gix-index v0.23.0, safety bump 5 crates ([`3be2b1c`](https://github.com/Byron/gitoxide/commit/3be2b1ccfe30eeae45711c64b88efc522a2b51b7))
- - Apply `momo` to fn `gix::Remote::save_as_to` ([`875c287`](https://github.com/Byron/gitoxide/commit/875c28757e4a91cf314ec59dd1a0dde779698e53))
- - Apply `momo` to fn `gix::revision::Spec::from_bstr` ([`1d90301`](https://github.com/Byron/gitoxide/commit/1d9030112b54699db9bd8d1125116e46c4a6f71e))
- - Apply `momo` to mod `config::snapshot::access` ([`25912fe`](https://github.com/Byron/gitoxide/commit/25912fe1e5d60765458a2e90c0fa487657b0831c))
- - Apply `momo` to mod `gix::create::into` ([`cd3c289`](https://github.com/Byron/gitoxide/commit/cd3c2893b095d38d36f0c969549f0aaadfcef2ee))
- - Rm unnecessary `#[allow(unused_mut)]` put on `momo`ed functions ([`89ae797`](https://github.com/Byron/gitoxide/commit/89ae797c7f1f4d26c48ed54c5d8b31f39599f063))
- - Remove unnecessary change in `repository/config/transport.rs` ([`86b8e50`](https://github.com/Byron/gitoxide/commit/86b8e50fafa7e5d57989acb9e8b848fd95d271a9))
- - Remove unnecessary `#[allow(clippy::needless_lifetimes)]` ([`e1b9d51`](https://github.com/Byron/gitoxide/commit/e1b9d51acd137cdea7680584451702e52aab775f))
- - Dramatically simplify `gix_macros::momo` ([`c72eaa0`](https://github.com/Byron/gitoxide/commit/c72eaa05697a3e34adaa3ee90584dce4b5c00120))
- - Manually de-`momo` `Repository::try_find_remote_{without_url_rewrite}` ([`e760225`](https://github.com/Byron/gitoxide/commit/e7602257662cd9ddb4cfe41ef26cdf28cc007be7))
- - Merge branch 'fixes' ([`4bfd1cc`](https://github.com/Byron/gitoxide/commit/4bfd1cc8f7922a8c4de6b9d078d54b93e78f51ff))
- - Thanks clippy ([`0d6d4ec`](https://github.com/Byron/gitoxide/commit/0d6d4ec8030d2e8f4c7a9d6f421d54776c4b67fb))
- - Adapt to changes in `gix-index` and pass skip-hash through for performance.. ([`713cd59`](https://github.com/Byron/gitoxide/commit/713cd59f0b1eff6397b80f1e1fceec278532fd59))
- - Use new `gix` method to obtain the fetch remote (instead of implementing it by hand) ([`e2c0912`](https://github.com/Byron/gitoxide/commit/e2c0912cfede044431c17ae81ddae02746650ae4))
- - Provide `Repository::find_fetch_remote()` to obtain a remote just like git would. ([`d22b7fb`](https://github.com/Byron/gitoxide/commit/d22b7fb1304cce3b2aabac42cc58fe7c5911f276))
- - Fix clippy lints in `gix/src/repository/remote.rs` ([`ff210d8`](https://github.com/Byron/gitoxide/commit/ff210d82573cebfdf4edbfb39beaef08979c058f))
- - Apply `momo` to mod `gix::repository` ([`5a50537`](https://github.com/Byron/gitoxide/commit/5a505377199730354c2a6b6b7b060184558bb9c4))
- - Apply `momo` to mod `remote::connection::fetch::receive_pack` ([`ea5c2db`](https://github.com/Byron/gitoxide/commit/ea5c2dbabe9d3c1eb1ab5f15a578ec9f9c36a5d8))
- - Apply `momo` to `gix::reference` ([`3c205ab`](https://github.com/Byron/gitoxide/commit/3c205abbdc0a80090b9f0f5681ce0949497e770f))
- - Apply `momo` to `gix::pathspec` ([`767ec2d`](https://github.com/Byron/gitoxide/commit/767ec2dcfd1fadaca93390770604494d03f88ab3))
- - Apply `momo` to mod `gix::open::repository` ([`3ce0144`](https://github.com/Byron/gitoxide/commit/3ce014499a86e4e8bb57ffe7caa540792c1c0a47))
- - Apply `momo` to `gix::object::tree` ([`d835526`](https://github.com/Byron/gitoxide/commit/d8355267fd64dbcf22a01a11cb29d93e75f0fb4c))
- - Apply `momo` to mod `gix::init` ([`46a9dfe`](https://github.com/Byron/gitoxide/commit/46a9dfe12dedc1cbf997ea408d1f1d2c5d673ba5))
- - Apply `momo` to mod `gix::discover` ([`58fbb08`](https://github.com/Byron/gitoxide/commit/58fbb08461064d96dd9816e2fb6911cf76b6badc))
- - Thanks clippy ([`5044c3b`](https://github.com/Byron/gitoxide/commit/5044c3b87456cf58ebfbbd00f23c9ba671cb290c))
- - Imrpove git2 mapping by using aliases. ([`6194ebe`](https://github.com/Byron/gitoxide/commit/6194ebe1fb10dedc22f1937b91df858dffc50db3))
- - Merge branch 'gix-submodule' ([`363ee77`](https://github.com/Byron/gitoxide/commit/363ee77400805f473c9ad66eadad9214e7ab66f4))
-</details>
-
-## 0.52.0 (2023-08-22)
-
-### New Features
-
- - <csr-id-28249bda58b56af340c7d6af883496c3bb2d6804/> add `Worktree::pathspec()` to easily get worktree-scoped pathspec searches.
- - <csr-id-59bb3c4109c4e7f1977cea602293be85b7d14a8a/> add `Submodule` type to represent a declared submodule.
- - <csr-id-a7d0e441b2326520ae467e83e045302792e6bcd0/> `pathspec_search([specs])` to instantiate a search using pathspecs.
- It can be used to for filtering input paths.
- This type also makes filtering index entries easy.
- - <csr-id-77da01456118227a59b654f32c15eeb1e5e19cd9/> make `gix-pathspec` crate available
- - <csr-id-5c13459721eabb9d0746899a2498a104ddbdae59/> add `Commit::signature()` to yield the PGP sigature of a commit, if present.
-
-### Bug Fixes
-
- - <csr-id-c51c8daee1ab54130ae3ed83ce67d08f01c4881a/> fix incorrect s/git-config/gix-config/
- 3a861c8f049f6502d3bcbdac752659aa1aeda46a just blindly replaced any
- occurence of "git-config" or "git_config" with "gix-config"/"gix_config".
-
- There is no such thing as a gix-config file.
- gix-config is a git-config file parser.
-
-### New Features (BREAKING)
-
- - <csr-id-b1e55d6f9e4c0d78f0cdeb7b85e09c2eb7032ced/> `Repository::prefix()` turns `Option<Result` into `Result<Option`.
- This makes it easier for the caller as they won't have to call transpose anymore.
- - <csr-id-46225c2bc399e6db5a56b522c978e0d1fac163df/> improve `interrupt::init_handler()` to be usable from multiple threads
- Previously it was geared towards applications which would initialize handlers
- only from the main thread.
-
- Now the API supports multiple threads.
-
-### Bug Fixes (BREAKING)
-
- - <csr-id-430e58cd1efef0044fc36b23de019156a21f947c/> `Repository::prefix()` is now side-effect free and won't error if CWD is outside of working tree dir.
- This makes it more usable, especially in contexts where many repositories are held, possibly with
- changing current working dirs.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 32 commits contributed to the release over the course of 18 calendar days.
- - 19 days passed between releases.
- - 9 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix-url v0.22.0, gix-credentials v0.18.0, gix-diff v0.34.0, gix-discover v0.23.0, gix-ignore v0.6.0, gix-bitmap v0.2.7, gix-index v0.22.0, gix-mailmap v0.17.0, gix-negotiate v0.6.0, gix-pack v0.41.0, gix-odb v0.51.0, gix-pathspec v0.1.0, gix-packetline v0.16.5, gix-transport v0.35.0, gix-protocol v0.38.0, gix-revision v0.20.0, gix-refspec v0.16.0, gix-submodule v0.2.0, gix-worktree v0.24.0, gix-worktree-state v0.1.0, gix v0.52.0, gitoxide-core v0.31.0, gitoxide v0.29.0 ([`6c62e74`](https://github.com/Byron/gitoxide/commit/6c62e748240ac0980fc23fdf30f8477dea8b9bc3))
- - Release gix-date v0.7.3, gix-hash v0.12.0, gix-features v0.33.0, gix-actor v0.25.0, gix-object v0.35.0, gix-path v0.9.0, gix-glob v0.11.0, gix-quote v0.4.7, gix-attributes v0.17.0, gix-command v0.2.9, gix-packetline-blocking v0.16.5, gix-filter v0.3.0, gix-fs v0.5.0, gix-commitgraph v0.19.0, gix-hashtable v0.3.0, gix-revwalk v0.6.0, gix-traverse v0.31.0, gix-worktree-stream v0.3.0, gix-archive v0.3.0, gix-config-value v0.13.0, gix-tempfile v8.0.0, gix-lock v8.0.0, gix-ref v0.35.0, gix-sec v0.9.0, gix-config v0.28.0, gix-prompt v0.6.0, gix-url v0.22.0, gix-credentials v0.18.0, gix-diff v0.34.0, gix-discover v0.23.0, gix-ignore v0.6.0, gix-bitmap v0.2.7, gix-index v0.22.0, gix-mailmap v0.17.0, gix-negotiate v0.6.0, gix-pack v0.41.0, gix-odb v0.51.0, gix-pathspec v0.1.0, gix-packetline v0.16.5, gix-transport v0.35.0, gix-protocol v0.38.0, gix-revision v0.20.0, gix-refspec v0.16.0, gix-submodule v0.2.0, gix-worktree v0.24.0, gix-worktree-state v0.1.0, gix v0.52.0, gitoxide-core v0.31.0, gitoxide v0.29.0, safety bump 41 crates ([`30b2761`](https://github.com/Byron/gitoxide/commit/30b27615047692d3ced1b2d9c2ac15a80f79fbee))
- - Update changelogs prior to release ([`f23ea88`](https://github.com/Byron/gitoxide/commit/f23ea8828f2d9ba7559973daca388c9591bcc5fc))
- - Merge branch 'gix-submodule' ([`8f3f358`](https://github.com/Byron/gitoxide/commit/8f3f358800f1fe77d7ba7ebd396a90b692d3c0c1))
- - Make sure that submodule hashes aren't attached as the parent repo is the wrong one here. ([`c96f26b`](https://github.com/Byron/gitoxide/commit/c96f26b5c13581812753638a24d261c3f75dddcf))
- - Properly isolate environment variable based tests into their own binary ([`c35ddab`](https://github.com/Byron/gitoxide/commit/c35ddab41ff6f18ad9cd11df44cfffee91563433))
- - Just fmt ([`0d258f4`](https://github.com/Byron/gitoxide/commit/0d258f40afcd848509e2b0c7c264e9f346ed1726))
- - Merge branch 'submodule-in-gix' ([`36f7b78`](https://github.com/Byron/gitoxide/commit/36f7b783c67b8a087076a130f5ee9b90b23bc3cc))
- - Adapt to changes in `gix` ([`9fe3052`](https://github.com/Byron/gitoxide/commit/9fe305291cf8ba908eaf38235f54abfa1d0ddeed))
- - Add `Worktree::pathspec()` to easily get worktree-scoped pathspec searches. ([`28249bd`](https://github.com/Byron/gitoxide/commit/28249bda58b56af340c7d6af883496c3bb2d6804))
- - Add `Submodule` type to represent a declared submodule. ([`59bb3c4`](https://github.com/Byron/gitoxide/commit/59bb3c4109c4e7f1977cea602293be85b7d14a8a))
- - Merge branch 'worktree-organization' ([`8d0d8e0`](https://github.com/Byron/gitoxide/commit/8d0d8e005d7f11924a6717954d892aae5cec45e7))
- - Adapt to changes in `gix-worktree` ([`e5717e1`](https://github.com/Byron/gitoxide/commit/e5717e1d12c49285d31a90b03b7f8e9cbc6c1108))
- - Merge pull request #988 from not-my-profile/fix-gix-config-sub ([`7735047`](https://github.com/Byron/gitoxide/commit/7735047198bd7cc5059ca338f5c2147dd273f711))
- - Fix incorrect s/git-config/gix-config/ ([`c51c8da`](https://github.com/Byron/gitoxide/commit/c51c8daee1ab54130ae3ed83ce67d08f01c4881a))
- - Merge branch 'submodule-active' ([`a3afaa4`](https://github.com/Byron/gitoxide/commit/a3afaa42741616a0f1abeef9b54557e7c2b800cb))
- - Adapt to changes in `gix-url` ([`f8fc662`](https://github.com/Byron/gitoxide/commit/f8fc6625d8c22f43e7ab5f1cdf1e8eb9a6ea34de))
- - `pathspec_search([specs])` to instantiate a search using pathspecs. ([`a7d0e44`](https://github.com/Byron/gitoxide/commit/a7d0e441b2326520ae467e83e045302792e6bcd0))
- - `Repository::prefix()` is now side-effect free and won't error if CWD is outside of working tree dir. ([`430e58c`](https://github.com/Byron/gitoxide/commit/430e58cd1efef0044fc36b23de019156a21f947c))
- - Merge branch 'pathspec-matching' ([`9f4dfe0`](https://github.com/Byron/gitoxide/commit/9f4dfe0f0b948280692916b596923959ea2fd9da))
- - `Repository::prefix()` turns `Option<Result` into `Result<Option`. ([`b1e55d6`](https://github.com/Byron/gitoxide/commit/b1e55d6f9e4c0d78f0cdeb7b85e09c2eb7032ced))
- - Make `gix-pathspec` crate available ([`77da014`](https://github.com/Byron/gitoxide/commit/77da01456118227a59b654f32c15eeb1e5e19cd9))
- - Merge branch 'handlers-mt' ([`f584d76`](https://github.com/Byron/gitoxide/commit/f584d7698d93836daef2000fd369034de46037f0))
- - Improve `interrupt::init_handler()` to be usable from multiple threads ([`46225c2`](https://github.com/Byron/gitoxide/commit/46225c2bc399e6db5a56b522c978e0d1fac163df))
- - Merge branch 'extract-signatures' ([`b37affe`](https://github.com/Byron/gitoxide/commit/b37affefecfb30a94431cd21dae6659004ca6244))
- - Add `Commit::signature()` to yield the PGP sigature of a commit, if present. ([`5c13459`](https://github.com/Byron/gitoxide/commit/5c13459721eabb9d0746899a2498a104ddbdae59))
- - Release gix-glob v0.10.2, gix-date v0.7.2, gix-validate v0.8.0, gix-object v0.34.0, gix-ref v0.34.0, gix-config v0.27.0, gix-commitgraph v0.18.2, gix-revwalk v0.5.0, gix-revision v0.19.0, gix-refspec v0.15.0, gix-submodule v0.1.0, safety bump 18 crates ([`4604f83`](https://github.com/Byron/gitoxide/commit/4604f83ef238dc07c85aaeae097399b67f3cfd0c))
- - Merge branch 'submodules' ([`b629f8a`](https://github.com/Byron/gitoxide/commit/b629f8a774931d58c0a9b124fa75f85807c6c5d1))
- - More idiomatic use of `config.section_by_name()` ([`0a584ee`](https://github.com/Byron/gitoxide/commit/0a584eeb5c756ec4b0d54c4fd9ea3cc1497f4ba9))
- - Adjust to changes in `gix-validate` ([`a8bc0de`](https://github.com/Byron/gitoxide/commit/a8bc0de6d071be82364434b6e27afecc02f3be51))
- - Merge branch 'dev-on-linux' ([`6b4a303`](https://github.com/Byron/gitoxide/commit/6b4a30330fe49fc97daa73f55bf56580cc0597aa))
- - Fix various tests to run properly on linux ([`ef8ccd9`](https://github.com/Byron/gitoxide/commit/ef8ccd9d16143d37155d063747c69cade80f162d))
-</details>
-
-## 0.51.0 (2023-08-02)
-
-This is mostly a bug-fix release with many improvements for fetching, along with more forgiving commit parsing.
-
-### New Features
-
- - <csr-id-d9e551b44aa3e84109660328de7637d465d59578/> Add `Reference::follow()` as a way to peel symbolic refs step by step.
-
-### Bug Fixes (BREAKING)
-
- - <csr-id-74ce8639e88db5107691e9279df2bbfd38d26de3/> handle symbolic ref updates far more gracefully and with more logical consistency.
- Previously, refspecs couldn't be used to update sybolic references locally, particularly because the logic
- to do so correctly isn't trivial and `git` itself also seems to cover only the most common cases.
-
- However, the logic now changed so that remote updates will only be rejected if
-
- * fast-forward rules are violated
-* the local ref is currently checked out
-* existing refs would not become 'unborn', i.e. point to a reference that doesn't exist and won't be created due to ref-specs
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 7 commits contributed to the release over the course of 2 calendar days.
- - 9 days passed between releases.
- - 2 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix-actor v0.24.2, gix-object v0.33.2, gix-ref v0.33.3, gix-config v0.26.2, gix-prompt v0.5.5, gix-odb v0.50.2, gix-transport v0.34.2, gix-protocol v0.37.0, gix-worktree v0.23.1, gix v0.51.0, safety bump 3 crates ([`231ac1c`](https://github.com/Byron/gitoxide/commit/231ac1c6ad5ca9a84dbeb0dee14bfbf2fef1ae1e))
- - Prepare additional changelogs ([`db63815`](https://github.com/Byron/gitoxide/commit/db6381522395a0de047118e81df5cd3cbeb862b9))
- - Prepare changelogs ([`e4d2890`](https://github.com/Byron/gitoxide/commit/e4d2890a85bf60e9cdb4016dddfab3c4dccbe75e))
- - Merge branch 'fixes-and-improvements' ([`f8b1f55`](https://github.com/Byron/gitoxide/commit/f8b1f553371f25b1bea6bce7cbb2ff1f01194856))
- - Handle symbolic ref updates far more gracefully and with more logical consistency. ([`74ce863`](https://github.com/Byron/gitoxide/commit/74ce8639e88db5107691e9279df2bbfd38d26de3))
- - Adapt to changes in `gix-protocol` ([`df81076`](https://github.com/Byron/gitoxide/commit/df810766dfeaaad7474339358a3d844b2c3368cd))
- - Add `Reference::follow()` as a way to peel symbolic refs step by step. ([`d9e551b`](https://github.com/Byron/gitoxide/commit/d9e551b44aa3e84109660328de7637d465d59578))
-</details>
-
-## 0.50.1 (2023-07-24)
-
-### Bug Fixes
-
- - <csr-id-145f8658a32c46db1f54d3098cf9371fe6eeec5e/> `Tree::lookup_entry(_by_path)()` now actually works
- Previously it was lacking a test and that showed.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 3 commits contributed to the release.
- - 1 day passed between releases.
- - 1 commit was understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix-archive v0.2.1, gix-ref v0.33.2, gix-pack v0.40.2, gix v0.50.1 ([`13883e5`](https://github.com/Byron/gitoxide/commit/13883e5528385f892ee402e911298121e0c297c0))
- - Prepare changelogs ([`735c206`](https://github.com/Byron/gitoxide/commit/735c2062625aaeffbdbca3c1395dbcf075661e3a))
- - `Tree::lookup_entry(_by_path)()` now actually works ([`145f865`](https://github.com/Byron/gitoxide/commit/145f8658a32c46db1f54d3098cf9371fe6eeec5e))
-</details>
-
-## 0.50.0 (2023-07-22)
-
-### New Features
-
- - <csr-id-caa8fb9502906fa47546c26bbeb3c546664ad944/> `TreeEntryRefExt` and `TreeEntryExt` to be able to easily attach a repo to it.
- Also, add `detach()` to types that were missing it.
- - <csr-id-62cacd4b7a9fc0c0e4c5049f6d0aa7011c8ef923/> `Tree::find_entry()` to easily find an entry in a tree's entries.
- - <csr-id-c4a1fb1ba461c28ac3ea2482adf5f75721d14706/> add `Repository::archive()` as extra
- It implements a high-level interface to achieve `git archive` like functionality.
- - <csr-id-4ee285741e6e1cde3a967980fbf48bab20ddbf68/> optionally make `gix-workspace-stream` available via `Repository::worktree_stream()`
- That way it's easy to obtain a representation of the worktree
- in a fully streaming fashion, which is also the basis for
- `archive`-like functionality.
-
-### New Features (BREAKING)
-
- - <csr-id-d5e4ee0e6e26ff3feeed1f5aee5bdd0cdc03d1f8/> unify API between `object::tree::Entry` and `object::tree::EntryRef<'_>`
-
-### Bug Fixes (BREAKING)
-
- - <csr-id-8cad009eafe8e1054a715dc99bb9a884325d5ea5/> `Tree::lookup_entry(_by_path))()` are not mutating anymore; add `Tree::peel_to_entry()` and `peel_to_entry_by_path()`
- The previous implementation was a crutch that could now be circumvented.
-
- The new methods allow to reuse a buffer in case the object isn't used or needed further,
- possibly saving allocations.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 18 commits contributed to the release over the course of 1 calendar day.
- - 3 days passed between releases.
- - 6 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix-config v0.26.1, gix v0.50.0 ([`d34a4ea`](https://github.com/Byron/gitoxide/commit/d34a4ea27cd83b916c84cf15e1c05da35576db5e))
- - Release gix-diff v0.33.1, gix-discover v0.22.1, gix-ignore v0.5.1, gix-bitmap v0.2.6, gix-index v0.21.1, gix-mailmap v0.16.1, gix-negotiate v0.5.1, gix-pack v0.40.1, gix-odb v0.50.1, gix-packetline v0.16.4, gix-transport v0.34.1, gix-protocol v0.36.1, gix-revision v0.18.1, gix-refspec v0.14.1, gix-worktree v0.23.0, gix v0.50.0 ([`0062971`](https://github.com/Byron/gitoxide/commit/00629710dffeb10fda340665530353703cf5d129))
- - Release gix-tempfile v7.0.2, gix-utils v0.1.5, gix-lock v7.0.2, gix-ref v0.33.1, gix-sec v0.8.4, gix-prompt v0.5.4, gix-url v0.21.1, gix-credentials v0.17.1, gix-diff v0.33.1, gix-discover v0.22.1, gix-ignore v0.5.1, gix-bitmap v0.2.6, gix-index v0.21.1, gix-mailmap v0.16.1, gix-negotiate v0.5.1, gix-pack v0.40.1, gix-odb v0.50.1, gix-packetline v0.16.4, gix-transport v0.34.1, gix-protocol v0.36.1, gix-revision v0.18.1, gix-refspec v0.14.1, gix-worktree v0.23.0, gix v0.50.0 ([`107a64e`](https://github.com/Byron/gitoxide/commit/107a64e734580ad9e2c4142db96394529d8072df))
- - Release gix-features v0.32.1, gix-actor v0.24.1, gix-validate v0.7.7, gix-object v0.33.1, gix-path v0.8.4, gix-glob v0.10.1, gix-quote v0.4.6, gix-attributes v0.16.0, gix-command v0.2.8, gix-packetline-blocking v0.16.4, gix-filter v0.2.0, gix-fs v0.4.1, gix-chunk v0.4.4, gix-commitgraph v0.18.1, gix-hashtable v0.2.4, gix-revwalk v0.4.1, gix-traverse v0.30.1, gix-worktree-stream v0.2.0, gix-archive v0.2.0, gix-config-value v0.12.5, gix-tempfile v7.0.1, gix-utils v0.1.5, gix-lock v7.0.2, gix-ref v0.33.1, gix-sec v0.8.4, gix-prompt v0.5.4, gix-url v0.21.1, gix-credentials v0.17.1, gix-diff v0.33.1, gix-discover v0.22.1, gix-ignore v0.5.1, gix-bitmap v0.2.6, gix-index v0.21.1, gix-mailmap v0.16.1, gix-negotiate v0.5.1, gix-pack v0.40.1, gix-odb v0.50.1, gix-packetline v0.16.4, gix-transport v0.34.1, gix-protocol v0.36.1, gix-revision v0.18.1, gix-refspec v0.14.1, gix-worktree v0.23.0, gix v0.50.0, safety bump 5 crates ([`16295b5`](https://github.com/Byron/gitoxide/commit/16295b58e2581d2e8b8b762816f52baabe871c75))
- - Prepare more changelogs ([`c4cc5f2`](https://github.com/Byron/gitoxide/commit/c4cc5f261d29f712a101033a18293a97a9d4ae85))
- - Release gix-date v0.7.1, gix-hash v0.11.4, gix-trace v0.1.3, gix-features v0.32.0, gix-actor v0.24.0, gix-validate v0.7.7, gix-object v0.33.0, gix-path v0.8.4, gix-glob v0.10.0, gix-quote v0.4.6, gix-attributes v0.15.0, gix-command v0.2.7, gix-packetline-blocking v0.16.3, gix-filter v0.1.0, gix-fs v0.4.0, gix-chunk v0.4.4, gix-commitgraph v0.18.0, gix-hashtable v0.2.4, gix-revwalk v0.4.0, gix-traverse v0.30.0, gix-worktree-stream v0.2.0, gix-archive v0.2.0, gix-config-value v0.12.4, gix-tempfile v7.0.1, gix-utils v0.1.5, gix-lock v7.0.2, gix-ref v0.33.0, gix-sec v0.8.4, gix-prompt v0.5.3, gix-url v0.21.0, gix-credentials v0.17.0, gix-diff v0.33.0, gix-discover v0.22.0, gix-ignore v0.5.0, gix-bitmap v0.2.6, gix-index v0.21.0, gix-mailmap v0.16.0, gix-negotiate v0.5.0, gix-pack v0.40.0, gix-odb v0.50.0, gix-packetline v0.16.4, gix-transport v0.34.0, gix-protocol v0.36.0, gix-revision v0.18.0, gix-refspec v0.14.0, gix-worktree v0.22.0, gix v0.49.1 ([`5cb3589`](https://github.com/Byron/gitoxide/commit/5cb3589b74fc5376e02cbfe151e71344e1c417fe))
- - Update changelogs prior to release ([`2fc66b5`](https://github.com/Byron/gitoxide/commit/2fc66b55097ed494b72d1af939ba5561f71fde97))
- - Merge branch 'improvements-for-crates-index' ([`3f914e8`](https://github.com/Byron/gitoxide/commit/3f914e8840afc59441c3c463bdc89c53136d583e))
- - `TreeEntryRefExt` and `TreeEntryExt` to be able to easily attach a repo to it. ([`caa8fb9`](https://github.com/Byron/gitoxide/commit/caa8fb9502906fa47546c26bbeb3c546664ad944))
- - `Tree::find_entry()` to easily find an entry in a tree's entries. ([`62cacd4`](https://github.com/Byron/gitoxide/commit/62cacd4b7a9fc0c0e4c5049f6d0aa7011c8ef923))
- - `Tree::lookup_entry(_by_path))()` are not mutating anymore; add `Tree::peel_to_entry()` and `peel_to_entry_by_path()` ([`8cad009`](https://github.com/Byron/gitoxide/commit/8cad009eafe8e1054a715dc99bb9a884325d5ea5))
- - Unify API between `object::tree::Entry` and `object::tree::EntryRef<'_>` ([`d5e4ee0`](https://github.com/Byron/gitoxide/commit/d5e4ee0e6e26ff3feeed1f5aee5bdd0cdc03d1f8))
- - J fmt ([`57cab40`](https://github.com/Byron/gitoxide/commit/57cab40f5cb437cc5b0a2c1fc5ae0f91f98bbbcc))
- - Merge branch 'gix-archive' ([`1dda48b`](https://github.com/Byron/gitoxide/commit/1dda48ba2fccb93ebac00fe3460e923af43c86ce))
- - Change archive implementation to require the seek bound. ([`61aed0e`](https://github.com/Byron/gitoxide/commit/61aed0e955974f65f4fea042cbae68ea8a2cc2f5))
- - Add `Repository::archive()` as extra ([`c4a1fb1`](https://github.com/Byron/gitoxide/commit/c4a1fb1ba461c28ac3ea2482adf5f75721d14706))
- - Optionally make `gix-workspace-stream` available via `Repository::worktree_stream()` ([`4ee2857`](https://github.com/Byron/gitoxide/commit/4ee285741e6e1cde3a967980fbf48bab20ddbf68))
- - Update license field following SPDX 2.1 license expression standard ([`9064ea3`](https://github.com/Byron/gitoxide/commit/9064ea31fae4dc59a56bdd3a06c0ddc990ee689e))
-</details>
-
-## 0.49.1 (2023-07-19)
-
-A maintenance release without user-facing changes.
-
-### Bug Fixes (BREAKING)
-
- - <csr-id-8cad009eafe8e1054a715dc99bb9a884325d5ea5/> `Tree::lookup_entry(_by_path))()` are not mutating anymore; add `Tree::peel_to_entry()` and `peel_to_entry_by_path()`
- The previous implementation was a crutch that could now be circumvented.
-
- The new methods allow to reuse a buffer in case the object isn't used or needed further,
- possibly saving allocations.
-
-### New Features (BREAKING)
-
- - <csr-id-d5e4ee0e6e26ff3feeed1f5aee5bdd0cdc03d1f8/> unify API between `object::tree::Entry` and `object::tree::EntryRef<'_>`
-
-### New Features
-
- - <csr-id-caa8fb9502906fa47546c26bbeb3c546664ad944/> `TreeEntryRefExt` and `TreeEntryExt` to be able to easily attach a repo to it.
- Also, add `detach()` to types that were missing it.
- - <csr-id-62cacd4b7a9fc0c0e4c5049f6d0aa7011c8ef923/> `Tree::find_entry()` to easily find an entry in a tree's entries.
- - <csr-id-c4a1fb1ba461c28ac3ea2482adf5f75721d14706/> add `Repository::archive()` as extra
- It implements a high-level interface to achieve `git archive` like functionality.
- - <csr-id-4ee285741e6e1cde3a967980fbf48bab20ddbf68/> optionally make `gix-workspace-stream` available via `Repository::worktree_stream()`
- That way it's easy to obtain a representation of the worktree
- in a fully streaming fashion, which is also the basis for
- `archive`-like functionality.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 4 commits contributed to the release.
- - 0 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix-prompt v0.5.3, gix v0.49.1, cargo-smart-release v0.20.0 ([`f069852`](https://github.com/Byron/gitoxide/commit/f0698522940c9ba4d45db5a44dce9f21ca29cb4e))
- - Prepare changelogs prior to release ([`849f508`](https://github.com/Byron/gitoxide/commit/849f5081313c4a44bdaef6848758d0d9a5d1598b))
- - Merge branch 'smart-release-stability' ([`8629f56`](https://github.com/Byron/gitoxide/commit/8629f569cd5917b6c0c3fd928fde021e7976ee85))
- - Update git2 API mapping and be clear what stability means as well. ([`64cd396`](https://github.com/Byron/gitoxide/commit/64cd396ab05959e1f843f7ccd53ac5d4585584ad))
-</details>
-
-## 0.49.0 (2023-07-19)
-
-<csr-id-c548780e6ea49453ecdb45b11bf4c5781b105e6b/>
-
-### New Features
-
- - <csr-id-980c2ba591dce7fc787c418aed85078c19e2d6d4/> Make `EntryMode` available from `gix::object::tree`.
- Previously one had to go through `gix::objs::tree` which wasn't symmetric
- with `gix::object::Kind`.
- - <csr-id-d4a8f8cf6d8b059978719ea314fc8a4bfe26c60d/> Add `Id::header()` and `Id::try_header()` as syblings to `::object()` and `::try_object()`.
- With the new header related functions one can obtain information about an object more quickly.
- - <csr-id-b73435b3bf334d5be2931c2ea6a597a9dd51b783/> `Repository::header()` and `::try_header()` to learn about objects, quickly
- Accessing just the headers of an object is much faster than accessing the entire
- object. Previously, this method was only available on the `objects` field, now it's
- available through `Repository` directly.
- - <csr-id-c05eb2204620a5ff5e04b766009c873a14ae0f9e/> top-level examples that represent fully-fledged command-line applications.
- Please note that these are just examples, which aren't necessarily
- production ready in terms of quality or performance.
- - <csr-id-8cc106aa430d39ac9967dcfb3d293725fc76cb79/> checkouts when cloning now respect attributes and use filters.
- - <csr-id-8993b777cd0331e7260d7d7d1f820afc79a34b19/> add `Repository::filter_pipeline()` to obtain a primitive to handle data conversions.
- It's fully configured as git would, and can be used to convert data from git or to git.
-
-### Bug Fixes
-
- - <csr-id-47ca8465e04bdd13fe2ebfc6f012f8191e3f7896/> properly re-initialize object caches after their configuration changes.
-
-### Refactor (BREAKING)
-
- - <csr-id-c548780e6ea49453ecdb45b11bf4c5781b105e6b/> move error structs into `repository` module where appropriate.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 28 commits contributed to the release over the course of 11 calendar days.
- - 19 days passed between releases.
- - 8 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 1 unique issue was worked on: [#925](https://github.com/Byron/gitoxide/issues/925)
-
-### Thanks Clippy
-
-<csr-read-only-do-not-edit/>
-
-[Clippy](https://github.com/rust-lang/rust-clippy) helped 1 time to make code idiomatic.
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **[#925](https://github.com/Byron/gitoxide/issues/925)**
- - Remove all copies of repo-initialization files and rework them to be our own. ([`5ac2269`](https://github.com/Byron/gitoxide/commit/5ac22699936dbc5c09c5eefd28b75d48271b286b))
- * **Uncategorized**
- - Release gix-filter v0.1.0, gix-ignore v0.5.0, gix-revwalk v0.4.0, gix-traverse v0.30.0, gix-index v0.21.0, gix-mailmap v0.16.0, gix-negotiate v0.5.0, gix-pack v0.40.0, gix-odb v0.50.0, gix-transport v0.34.0, gix-protocol v0.36.0, gix-revision v0.18.0, gix-refspec v0.14.0, gix-worktree v0.22.0, gix v0.49.0 ([`4aca8c2`](https://github.com/Byron/gitoxide/commit/4aca8c2ae2ec588fb65ec4faa0c07c19d219569f))
- - Release gix-features v0.32.0, gix-actor v0.24.0, gix-glob v0.10.0, gix-attributes v0.15.0, gix-commitgraph v0.18.0, gix-config-value v0.12.4, gix-fs v0.4.0, gix-object v0.33.0, gix-ref v0.33.0, gix-config v0.26.0, gix-command v0.2.7, gix-url v0.21.0, gix-credentials v0.17.0, gix-diff v0.33.0, gix-discover v0.22.0, gix-filter v0.1.0, gix-ignore v0.5.0, gix-revwalk v0.4.0, gix-traverse v0.30.0, gix-index v0.21.0, gix-mailmap v0.16.0, gix-negotiate v0.5.0, gix-pack v0.40.0, gix-odb v0.50.0, gix-transport v0.34.0, gix-protocol v0.36.0, gix-revision v0.18.0, gix-refspec v0.14.0, gix-worktree v0.22.0, gix v0.49.0 ([`68ae3ff`](https://github.com/Byron/gitoxide/commit/68ae3ff9d642ec56f088a6a682a073dc16f4e8ca))
- - Adjust package versions (by cargo-smart-release) ([`c70e54f`](https://github.com/Byron/gitoxide/commit/c70e54f163c312c87753a506eeaad462e8579bfb))
- - Prepare changelogs prior to release ([`e4dded0`](https://github.com/Byron/gitoxide/commit/e4dded05138562f9737a7dcfb60570c55769486d))
- - Just fmt ([`a063c62`](https://github.com/Byron/gitoxide/commit/a063c62e3a30006d837b267e2ce74e70e48b4fb6))
- - Merge branch 'adjustments-for-crates-index' ([`b82868d`](https://github.com/Byron/gitoxide/commit/b82868d5688d8d4849c47ed3d209a96ee59e69b3))
- - Make `EntryMode` available from `gix::object::tree`. ([`980c2ba`](https://github.com/Byron/gitoxide/commit/980c2ba591dce7fc787c418aed85078c19e2d6d4))
- - Add `Id::header()` and `Id::try_header()` as syblings to `::object()` and `::try_object()`. ([`d4a8f8c`](https://github.com/Byron/gitoxide/commit/d4a8f8cf6d8b059978719ea314fc8a4bfe26c60d))
- - `Repository::header()` and `::try_header()` to learn about objects, quickly ([`b73435b`](https://github.com/Byron/gitoxide/commit/b73435b3bf334d5be2931c2ea6a597a9dd51b783))
- - Properly re-initialize object caches after their configuration changes. ([`47ca846`](https://github.com/Byron/gitoxide/commit/47ca8465e04bdd13fe2ebfc6f012f8191e3f7896))
- - Top-level examples that represent fully-fledged command-line applications. ([`c05eb22`](https://github.com/Byron/gitoxide/commit/c05eb2204620a5ff5e04b766009c873a14ae0f9e))
- - Cargo fmt ([`6121b8f`](https://github.com/Byron/gitoxide/commit/6121b8f6a7da7f263c6e066155f053a1d7c81477))
- - `git log` example include empty parents and paths ([`bd59bbe`](https://github.com/Byron/gitoxide/commit/bd59bbebddf804a4dd0872127dcc31b5c3b29c2f))
- - `git log` example now accepts multiple paths. ([`0df9f70`](https://github.com/Byron/gitoxide/commit/0df9f707987c8001c4ca81faf69033c679a75fd5))
- - `git log` example filter for min/max parents ([`01e9c29`](https://github.com/Byron/gitoxide/commit/01e9c29bf7106b30d8e3e8c71b37eff77bcc38b5))
- - `git log` example iterator now properly lazy ([`8a6f1e8`](https://github.com/Byron/gitoxide/commit/8a6f1e89fa4d736a2c902be55413887e14885957))
- - `git log` example now shows merge parents ([`5cbb6a7`](https://github.com/Byron/gitoxide/commit/5cbb6a72c34d926a2782569d8370e54d4c63ab34))
- - A `git log` example ([`03b3423`](https://github.com/Byron/gitoxide/commit/03b342306c5effac5e8aa92a349385e59785c0b7))
- - A `git ls-tree` example ([`6f4b431`](https://github.com/Byron/gitoxide/commit/6f4b43101f7b46e38c2f61c2f859347085d8214f))
- - Thanks clippy ([`3ef32af`](https://github.com/Byron/gitoxide/commit/3ef32af9bf477cbc60d24da8bb3f15d20976e9e0))
- - Merge branch 'unique-templates' ([`cbb0db8`](https://github.com/Byron/gitoxide/commit/cbb0db80ccc5c29c92f7abd8af2a03c67d86fc2b))
- - Adapt journey tests to changes in init templates ([`6297d22`](https://github.com/Byron/gitoxide/commit/6297d2201abb97ec999986a7a19b9ddb02114e24))
- - Merge branch 'integrate-filtering' ([`b19a56d`](https://github.com/Byron/gitoxide/commit/b19a56dcfa9bea86332a84aa4e8fad445e7d1724))
- - Checkouts when cloning now respect attributes and use filters. ([`8cc106a`](https://github.com/Byron/gitoxide/commit/8cc106aa430d39ac9967dcfb3d293725fc76cb79))
- - Add `Repository::filter_pipeline()` to obtain a primitive to handle data conversions. ([`8993b77`](https://github.com/Byron/gitoxide/commit/8993b777cd0331e7260d7d7d1f820afc79a34b19))
- - Move error structs into `repository` module where appropriate. ([`c548780`](https://github.com/Byron/gitoxide/commit/c548780e6ea49453ecdb45b11bf4c5781b105e6b))
- - Add keys required to deal with worktree conversions and filters. ([`3fbd7b0`](https://github.com/Byron/gitoxide/commit/3fbd7b0c864cf2f1a38ae24e85d47b0b26b271a7))
-</details>
-
-## 0.48.0 (2023-06-29)
-
-<csr-id-fb63f3f07f0f9545be5942bcb66b06040fbc7fe9/>
-<csr-id-3c8e3c1e88d36657d4e6eeaf0819be7fd9341ae1/>
-
-The main feature of this release is support dates prior to the UNIX epoch. Note that this is a feature that isn't supported by `git`, but only by `libgit2`.
-
-### Bug Fixes
-
- - <csr-id-9cfc4aa318bc44c9e4310db7d3764b015472e1af/> use type for time consistently.
- This will allow it to be changed more easily later.
-
-### Other
-
- - <csr-id-fb63f3f07f0f9545be5942bcb66b06040fbc7fe9/> Add incomplete mapping of typical `git2` functions and their counterpart in `gix`.
- That way the ground-work is laid for making the usage of `gix` easier for those who used
- `git2` before.
- - <csr-id-3c8e3c1e88d36657d4e6eeaf0819be7fd9341ae1/> make clear what can happen if rewrite-tracking isn't disabled if it is not desired.
- Triggered by this `onefetch` PR: https://github.com/o2sh/onefetch/pull/1093
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 15 commits contributed to the release over the course of 6 calendar days.
- - 6 days passed between releases.
- - 3 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix-transport v0.33.1, gix v0.48.0 ([`f27ca12`](https://github.com/Byron/gitoxide/commit/f27ca128c5f109ad02e4e1a12dc14e93b07bbfcf))
- - Release gix-lock v7.0.1, gix v0.48.0 ([`5ce81ef`](https://github.com/Byron/gitoxide/commit/5ce81ef16210f0b0b72dfd5710a064ccda96ac1c))
- - Release gix-glob v0.9.1, gix-attributes v0.14.1, gix-config-value v0.12.3, gix-ref v0.32.1, gix-sec v0.8.3, gix-config v0.25.1, gix-url v0.20.1, gix-credentials v0.16.1, gix-discover v0.21.1, gix-ignore v0.4.1, gix-pack v0.39.1, gix-odb v0.49.1, gix-worktree v0.21.1, gix v0.48.0 ([`69c6a36`](https://github.com/Byron/gitoxide/commit/69c6a36ba14cbef129deebda9fd8870005fefa17))
- - Release gix-features v0.31.1, gix-path v0.8.3, gix v0.48.0 ([`9ca3464`](https://github.com/Byron/gitoxide/commit/9ca346462806671fbc49643a87cea25ab0da3be8))
- - Release gix-date v0.7.0, gix-trace v0.1.2, gix-actor v0.23.0, gix-commitgraph v0.17.1, gix-utils v0.1.4, gix-object v0.32.0, gix-ref v0.32.0, gix-config v0.25.0, gix-diff v0.32.0, gix-discover v0.21.0, gix-hashtable v0.2.3, gix-revwalk v0.3.0, gix-traverse v0.29.0, gix-index v0.20.0, gix-mailmap v0.15.0, gix-negotiate v0.4.0, gix-pack v0.39.0, gix-odb v0.49.0, gix-protocol v0.35.0, gix-revision v0.17.0, gix-refspec v0.13.0, gix-worktree v0.21.0, gix v0.48.0, safety bump 20 crates ([`27e8c18`](https://github.com/Byron/gitoxide/commit/27e8c18db5a9a21843381c116a8ed6d9f681b3f8))
- - Prepare changelogs prior to release ([`00f96fb`](https://github.com/Byron/gitoxide/commit/00f96fb3110a8f81a1bd0d74c757c15b8773c6f6))
- - Merge branch 'i64-times' ([`b407461`](https://github.com/Byron/gitoxide/commit/b407461d8991db67a5bdb2ab13f518f78a85ed40))
- - Add incomplete mapping of typical `git2` functions and their counterpart in `gix`. ([`fb63f3f`](https://github.com/Byron/gitoxide/commit/fb63f3f07f0f9545be5942bcb66b06040fbc7fe9))
- - Adapt to changes in `gix-date` ([`fba45c6`](https://github.com/Byron/gitoxide/commit/fba45c68d57d5f73070a6949556a04187d42e427))
- - Use type for time consistently. ([`9cfc4aa`](https://github.com/Byron/gitoxide/commit/9cfc4aa318bc44c9e4310db7d3764b015472e1af))
- - Add a test to see what happens if negative dates are used in commits ([`57a5cd1`](https://github.com/Byron/gitoxide/commit/57a5cd1ca2f8153568c366cd1709be7d4ebec972))
- - Make clear what can happen if rewrite-tracking isn't disabled if it is not desired. ([`3c8e3c1`](https://github.com/Byron/gitoxide/commit/3c8e3c1e88d36657d4e6eeaf0819be7fd9341ae1))
- - More tracing information when updating refs ([`6906e0d`](https://github.com/Byron/gitoxide/commit/6906e0d717bb04efb0744eb20afb4c53ebe360c9))
- - Add more details for negotation phases ([`8341d08`](https://github.com/Byron/gitoxide/commit/8341d0882697b02275ec2bb0f05229ba3b60df3b))
- - Add a span for each negotiation round ([`ec73479`](https://github.com/Byron/gitoxide/commit/ec7347971163e838e0fdedb0bc6bc88d32d30d8e))
-</details>
-
-## 0.47.0 (2023-06-22)
-
-<csr-id-bcad5c22049d56a25ef69d6c7a3344e78f9a1d4d/>
-
-### Chore
-
- - <csr-id-bcad5c22049d56a25ef69d6c7a3344e78f9a1d4d/> Add `clippy::redundant-closure-for-method-calls` lint
-
-### New Features
-
- - <csr-id-3cffa268460eb2d41bd6a30d45778b88db4ec602/> provide basic `tracing` spans for common operations.
- This is just the beginning and more crates will integrate with it over time.
- - <csr-id-47c7b0dff9ca82e7c0c60b1dcf1d120f7bec7955/> expose `hashtable` in root for access to optimized-for-object-ids sets and maps.
-
-### Bug Fixes
-
- - <csr-id-67c06d99dc8387ce566c2fe436c28cdaa041bf07/> make sure empty packs in shallow clones are working as well.
- - <csr-id-db69e31d8bb73aba886a9a323bfa154a23deacf8/> no-want detection for negotiation phase is now consistent.
- It being inconsistent was a reason for 'failing to parse server response' which
- was empty as we didn't provide any wants to the server, but didn't detect that case
- in the initial negotiation-preparation phase.
-
- Turns out we didn't detect it as our special handling of implicit tags was not done
- in the negotiation-preparation phase.
-
- The fix consists of unifying the filtering phase to all places that needed, so
- the preparation phase outcome is now consistent with what would have come later.
-
-### New Features (BREAKING)
-
- - <csr-id-682def03ce6ec93d7bcd2f79eedea52021b77f03/> provide `fetch::outcome::Negotiate` for details on what happened during negotiation.
- We also remove the `negotiation_rounds` field in favor of a far more detailed `fetch::outcome::Negotiate` struct.
- - <csr-id-574e0f4786719bd56da2fa218772f879fda282bf/> respect the `core.commitGraph` option.
- Previously, we would always use the commitgraph when available, but now we only do so
- if the `core.commitGraph` option is set.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 22 commits contributed to the release over the course of 11 calendar days.
- - 12 days passed between releases.
- - 7 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix-date v0.6.0, gix-hash v0.11.3, gix-trace v0.1.1, gix-features v0.31.0, gix-actor v0.22.0, gix-path v0.8.2, gix-glob v0.9.0, gix-quote v0.4.5, gix-attributes v0.14.0, gix-chunk v0.4.3, gix-commitgraph v0.17.0, gix-config-value v0.12.2, gix-fs v0.3.0, gix-tempfile v7.0.0, gix-utils v0.1.3, gix-lock v7.0.0, gix-validate v0.7.6, gix-object v0.31.0, gix-ref v0.31.0, gix-sec v0.8.2, gix-config v0.24.0, gix-command v0.2.6, gix-prompt v0.5.2, gix-url v0.20.0, gix-credentials v0.16.0, gix-diff v0.31.0, gix-discover v0.20.0, gix-hashtable v0.2.2, gix-ignore v0.4.0, gix-bitmap v0.2.5, gix-revwalk v0.2.0, gix-traverse v0.28.0, gix-index v0.19.0, gix-mailmap v0.14.0, gix-negotiate v0.3.0, gix-pack v0.38.0, gix-odb v0.48.0, gix-packetline v0.16.3, gix-transport v0.33.0, gix-protocol v0.34.0, gix-revision v0.16.0, gix-refspec v0.12.0, gix-worktree v0.20.0, gix v0.47.0, gitoxide-core v0.29.0, gitoxide v0.27.0, safety bump 30 crates ([`ea9f942`](https://github.com/Byron/gitoxide/commit/ea9f9424e777f10da0e33bb9ffbbefd01c4c5a74))
- - Prepare changelogs prior to release ([`18b0a37`](https://github.com/Byron/gitoxide/commit/18b0a371941aa2d4d62512437d5daa351ba99ffd))
- - Add a span for another potentially expensive portion of the negotiation ([`f2e7ec4`](https://github.com/Byron/gitoxide/commit/f2e7ec4d80299933327ebdc932a758d5d9c7f218))
- - `just fmt` ([`871dd0b`](https://github.com/Byron/gitoxide/commit/871dd0b977caf17159092a4739ba5408403cdb2c))
- - Merge branch 'corpus' ([`aa16c8c`](https://github.com/Byron/gitoxide/commit/aa16c8ce91452a3e3063cf1cf0240b6014c4743f))
- - Change MSRV to 1.65 ([`4f635fc`](https://github.com/Byron/gitoxide/commit/4f635fc4429350bae2582d25de86429969d28f30))
- - Provide basic `tracing` spans for common operations. ([`3cffa26`](https://github.com/Byron/gitoxide/commit/3cffa268460eb2d41bd6a30d45778b88db4ec602))
- - Merge branch 'gix-revision-graph' ([`036e60a`](https://github.com/Byron/gitoxide/commit/036e60a3ad39ba9b018c0b56454f12fad455c7bb))
- - Expose `hashtable` in root for access to optimized-for-object-ids sets and maps. ([`47c7b0d`](https://github.com/Byron/gitoxide/commit/47c7b0dff9ca82e7c0c60b1dcf1d120f7bec7955))
- - Provide `fetch::outcome::Negotiate` for details on what happened during negotiation. ([`682def0`](https://github.com/Byron/gitoxide/commit/682def03ce6ec93d7bcd2f79eedea52021b77f03))
- - Merge branch 'fix-no-want-detection' ([`71efcbb`](https://github.com/Byron/gitoxide/commit/71efcbba112376b4acaf37d662cdb38d369462be))
- - Make sure empty packs in shallow clones are working as well. ([`67c06d9`](https://github.com/Byron/gitoxide/commit/67c06d99dc8387ce566c2fe436c28cdaa041bf07))
- - No-want detection for negotiation phase is now consistent. ([`db69e31`](https://github.com/Byron/gitoxide/commit/db69e31d8bb73aba886a9a323bfa154a23deacf8))
- - Merge branch 'help-874-redundant-closures' ([`fe59956`](https://github.com/Byron/gitoxide/commit/fe59956ad667303a923d7cfd9ffd72283df41d78))
- - Add `clippy::redundant-closure-for-method-calls` lint ([`bcad5c2`](https://github.com/Byron/gitoxide/commit/bcad5c22049d56a25ef69d6c7a3344e78f9a1d4d))
- - Merge branch 'future-dates' ([`8d2e6a9`](https://github.com/Byron/gitoxide/commit/8d2e6a91ac92a033e9e3daad5cffa90263075536))
- - Respect the `core.commitGraph` option. ([`574e0f4`](https://github.com/Byron/gitoxide/commit/574e0f4786719bd56da2fa218772f879fda282bf))
- - Adapt to changes in `gix-revision`/`gix-revwalk` ([`1fdaf71`](https://github.com/Byron/gitoxide/commit/1fdaf71d32eb60ad056376d27837ff37d4d314cd))
- - Adapt to changes in `gix-protocol` ([`b785e81`](https://github.com/Byron/gitoxide/commit/b785e811232d645ad72bfb87459efbd80cb0a399))
- - Adapt to changes in `gix-traverse` ([`b447f47`](https://github.com/Byron/gitoxide/commit/b447f478b8a5a28c659cef178b2a06b666f89ec3))
- - Adapt to changes in `gix-actor` ([`4a80e86`](https://github.com/Byron/gitoxide/commit/4a80e868f9530896616e649838e9be64b6d10036))
- - Adapt to changes in `gix-date` ([`d575336`](https://github.com/Byron/gitoxide/commit/d575336c26e6026e463cd06d88266bb2bdd3e162))
-</details>
-
-## 0.46.0 (2023-06-10)
-
-<csr-id-f0ddc3b9c5a34b7930b965dfb1438f95279a8bde/>
-
-### New Features (BREAKING)
-
- - <csr-id-7e9f202746d4376332f9779c6e4bd67933d618c7/> `revision::Walk` yields `revision::Info` structs instead of `Id`s.
- This enables re-use of information that was already obtained, like the parents of
- a commit and possibly its commit-time.
-
-### Changed (BREAKING)
-
- - <csr-id-068603a4b7a52eaa397d61212e7aec5a0195ac29/> rename `Repository::commit_graph()` to `::revision_graph()`.
- THat's a better fix given its locaion in `gix-revision`, while differentiating
- it further from the lower-level `commit-graph`.
-
- Also rename `Repository::commit_cache()` to `::commit_graph()` now that the name is free.
-
-### Other
-
- - <csr-id-f0ddc3b9c5a34b7930b965dfb1438f95279a8bde/> `gix::revision::walk::Platform` now informas about the commitgraph.
- In short, one should use the `Graph` to obtain the tools necessary for potentially
- accelerated, custom commit walks.
-
-### New Features
-
- - <csr-id-cc72e497868636b0e7c943f675bda82860c2b53e/> make it possible to use `config::tree::Key` to more conveniently set values via `config::SnapshotMut::set()`
- - <csr-id-b2b88dc11d1b745e787596e9b94122238ccaf34c/> use the `commitgraph` if possible and allow its usage to be controlled via `revision::walk::Platform::use_commit_graph(toggle)`.
- The commitgraph is a data structure to greatly accelerate commit walks. It is now supported and
- used by default, but can be deactivated if desired.
-
- Further, add `Repository::commit_cache()` for direct access to just the commit-graph datastructure,
- without the extras provided by `gix_revision::Graph`.
- - <csr-id-5d320121533d60fc594792da7838a4f9c661dea0/> add `Repository::index_or_load_from_head()`.
- That way it's possible to either open the existing worktree index, or create one
- in-memory by turning our HEAD tree into an index on the fly.
- - <csr-id-2a698fab7323fd5befd14926bcb9cebf09afc312/> make it possible to use `config::tree::Key` to more conveniently set values via `config::SnapshotMut::set()`
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 15 commits contributed to the release over the course of 2 calendar days.
- - 3 days passed between releases.
- - 6 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix-attributes v0.13.1, gix-diff v0.30.1, gix-revwalk v0.1.0, gix-traverse v0.27.0, gix-index v0.18.0, gix-revision v0.15.2, gix-negotiate v0.2.1, gix-pack v0.37.0, gix-odb v0.47.0, gix-protocol v0.33.2, gix-worktree v0.19.0, gix v0.46.0, safety bump 7 crates ([`2560a2c`](https://github.com/Byron/gitoxide/commit/2560a2cc3e1d8c60cd812e15696fa4761d036e19))
- - Prepare changelogs prior to release ([`298f3d7`](https://github.com/Byron/gitoxide/commit/298f3d7359c5b183314d8c584e45dcdd559d88b3))
- - Improve tests related to the handling of shallow repos ([`d50bfa9`](https://github.com/Byron/gitoxide/commit/d50bfa97f528141e0183558f21a364d969911ef4))
- - Merge branch 'walk-with-commitgraph' ([`fdee9a2`](https://github.com/Byron/gitoxide/commit/fdee9a22873a13ae644d3dc92f8fe93f8f0266c0))
- - Adapt to changes in `gix` ([`20f73c8`](https://github.com/Byron/gitoxide/commit/20f73c8224ead1b423a1b6331c9cab65f769d46a))
- - `revision::Walk` yields `revision::Info` structs instead of `Id`s. ([`7e9f202`](https://github.com/Byron/gitoxide/commit/7e9f202746d4376332f9779c6e4bd67933d618c7))
- - Rename `Repository::commit_graph()` to `::revision_graph()`. ([`068603a`](https://github.com/Byron/gitoxide/commit/068603a4b7a52eaa397d61212e7aec5a0195ac29))
- - Use the `commitgraph` if possible and allow its usage to be controlled via `revision::walk::Platform::use_commit_graph(toggle)`. ([`b2b88dc`](https://github.com/Byron/gitoxide/commit/b2b88dc11d1b745e787596e9b94122238ccaf34c))
- - Adapt to changes in `gix-traverse` ([`1f682fd`](https://github.com/Byron/gitoxide/commit/1f682fd991b9b76a8d37e6852567ff239c0ac0db))
- - Adapt to changes in `gix-revwalk` ([`f7d95d1`](https://github.com/Byron/gitoxide/commit/f7d95d189af1422a7ba48db1857452e32e1d9db9))
- - Add `Repository::index_or_load_from_head()`. ([`5d32012`](https://github.com/Byron/gitoxide/commit/5d320121533d60fc594792da7838a4f9c661dea0))
- - `gix::revision::walk::Platform` now informas about the commitgraph. ([`f0ddc3b`](https://github.com/Byron/gitoxide/commit/f0ddc3b9c5a34b7930b965dfb1438f95279a8bde))
- - Update changelog with information for the `gix` CLI. ([`4e081f2`](https://github.com/Byron/gitoxide/commit/4e081f2141dcb9919597c53dfd5706cc9439d541))
- - Make it possible to use `config::tree::Key` to more conveniently set values via `config::SnapshotMut::set()` ([`2a698fa`](https://github.com/Byron/gitoxide/commit/2a698fab7323fd5befd14926bcb9cebf09afc312))
- - Release gix-protocol v0.33.1 ([`9c99ed3`](https://github.com/Byron/gitoxide/commit/9c99ed30162081a7f26d72e0ed26966ff62d2b1c))
-</details>
-
-## 0.45.1 (2023-06-06)
-
-### Bug Fixes
-
- - <csr-id-9010f586ac46fcea5b8abba8f30a5639ed6b9225/> `gix::env::fetch::collate::Error` now considers negotiation errors a sign of corrupt git repos.
- Indeed, all of these negotiation errors are due to failures reading references or objects that ought
- to be there.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 3 commits contributed to the release.
- - 1 commit was understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix-revision v0.15.1, gix v0.45.1 ([`11766a0`](https://github.com/Byron/gitoxide/commit/11766a0a82754fee9918ccdb8eaf92af6d2561ba))
- - Merge branch 'adjustments-for-cargo' ([`04f011c`](https://github.com/Byron/gitoxide/commit/04f011c3c3e49e87a3b868d4bf6e77a361b96da8))
- - `gix::env::fetch::collate::Error` now considers negotiation errors a sign of corrupt git repos. ([`9010f58`](https://github.com/Byron/gitoxide/commit/9010f586ac46fcea5b8abba8f30a5639ed6b9225))
-</details>
-
-## 0.45.0 (2023-06-06)
-
-<csr-id-dbc6cbb4363c2532f81b0bd6e351c4577bb9e9a3/>
-<csr-id-9689a08d00e9d54f6bb581660ee99077bd214cb4/>
-
-The reason for this release is the ability to properly negotiate packs, also across multiple rounds, and with `protocol.version` 1 or 2, across
-stateless or stateful transports.
-
-### Chore
-
- - <csr-id-dbc6cbb4363c2532f81b0bd6e351c4577bb9e9a3/> inline format args
-
-### New Features
-
- - <csr-id-af0ef2f36736e3805f769d8cd59c9fa7eb6a22a0/> use `gix-negotiate` in fetch machinery.
- Thanks to it we are finally able to do pack negotiations just like git can,
- as many rounds as it takes and with all available algorithms.
-
- Works for V1 and V2 and for stateless and stateful transports.
- - <csr-id-020ff4e383fc76a255eabf099bb9cf5116a95afa/> Add `gitoxide.core.defaultPackCacheMemoryLimit` to control memory limits.
- Previously the 64 slot LRU cache didn't have any limit, now one is implemented that
- defaults to about 96MB.
-
-### New Features (BREAKING)
-
- - <csr-id-e011e360fb2db0288f718cb3bb2b28b4652bc8ae/> respect `core.useReplaceRefs` and remove `gitoxide.objects.noReplace`.
- The gitoxide specific variable wasn't needed in the first place.
-
-### Refactor (BREAKING)
-
- - <csr-id-9689a08d00e9d54f6bb581660ee99077bd214cb4/> Move `Kind` into `repository::Kind`.
- This type was from old times where `gix` was called `gix-repository`.
- Also remote `ThreadSafeRepository::kind()` in favor of leaving only
- `Repository::kind()`.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 33 commits contributed to the release over the course of 40 calendar days.
- - 40 days passed between releases.
- - 5 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 1 unique issue was worked on: [#851](https://github.com/Byron/gitoxide/issues/851)
-
-### Thanks Clippy
-
-<csr-read-only-do-not-edit/>
-
-[Clippy](https://github.com/rust-lang/rust-clippy) helped 1 time to make code idiomatic.
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **[#851](https://github.com/Byron/gitoxide/issues/851)**
- - Add `gitoxide.core.defaultPackCacheMemoryLimit` to control memory limits. ([`020ff4e`](https://github.com/Byron/gitoxide/commit/020ff4e383fc76a255eabf099bb9cf5116a95afa))
- * **Uncategorized**
- - Release gix-date v0.5.1, gix-hash v0.11.2, gix-features v0.30.0, gix-actor v0.21.0, gix-path v0.8.1, gix-glob v0.8.0, gix-quote v0.4.4, gix-attributes v0.13.0, gix-chunk v0.4.2, gix-commitgraph v0.16.0, gix-config-value v0.12.1, gix-fs v0.2.0, gix-tempfile v6.0.0, gix-utils v0.1.2, gix-lock v6.0.0, gix-validate v0.7.5, gix-object v0.30.0, gix-ref v0.30.0, gix-sec v0.8.1, gix-config v0.23.0, gix-command v0.2.5, gix-prompt v0.5.1, gix-url v0.19.0, gix-credentials v0.15.0, gix-diff v0.30.0, gix-discover v0.19.0, gix-hashtable v0.2.1, gix-ignore v0.3.0, gix-bitmap v0.2.4, gix-traverse v0.26.0, gix-index v0.17.0, gix-mailmap v0.13.0, gix-revision v0.15.0, gix-negotiate v0.2.0, gix-pack v0.36.0, gix-odb v0.46.0, gix-packetline v0.16.2, gix-transport v0.32.0, gix-protocol v0.33.0, gix-refspec v0.11.0, gix-worktree v0.18.0, gix v0.45.0, safety bump 29 crates ([`9a9fa96`](https://github.com/Byron/gitoxide/commit/9a9fa96fa8a722bddc5c3b2270b0edf8f6615141))
- - `just fmt` ([`ffc1276`](https://github.com/Byron/gitoxide/commit/ffc1276e0c991ac33ce842f5dca0b45ac69680c0))
- - Prepare changelogs prior to release ([`8f15cec`](https://github.com/Byron/gitoxide/commit/8f15cec1ec7d5a9d56bb158f155011ef2bb3539b))
- - Merge branch 'integrate-gix-negotiate' ([`ae845de`](https://github.com/Byron/gitoxide/commit/ae845dea6cee6523c88a23d7a14293589cf8092f))
- - Add test to validate alternates in the context of fetching ([`ae1bc41`](https://github.com/Byron/gitoxide/commit/ae1bc41817bec3b83fe65104e7e3efe4bd798a78))
- - Use `gix-negotiate` in fetch machinery. ([`af0ef2f`](https://github.com/Byron/gitoxide/commit/af0ef2f36736e3805f769d8cd59c9fa7eb6a22a0))
- - Respect `core.useReplaceRefs` and remove `gitoxide.objects.noReplace`. ([`e011e36`](https://github.com/Byron/gitoxide/commit/e011e360fb2db0288f718cb3bb2b28b4652bc8ae))
- - Thanks clippy ([`9525ac8`](https://github.com/Byron/gitoxide/commit/9525ac822aa902f5325f17e7b08ffb60b683e0e7))
- - Merge branch 'fix-docs' ([`420553a`](https://github.com/Byron/gitoxide/commit/420553a10d780e0b2dc466cac120989298a5f187))
- - Minor fixes ([`89a8cfe`](https://github.com/Byron/gitoxide/commit/89a8cfe40e5c3a9d4a4181fa055e3f4a529a8081))
- - Cleaning up documentation ([`2578e57`](https://github.com/Byron/gitoxide/commit/2578e576bfa365d194a23a1fb0bf09be230873de))
- - Move `Kind` into `repository::Kind`. ([`9689a08`](https://github.com/Byron/gitoxide/commit/9689a08d00e9d54f6bb581660ee99077bd214cb4))
- - Merge branch 'auto-clippy' ([`dbf8aa1`](https://github.com/Byron/gitoxide/commit/dbf8aa19d19109195d0274928eae4b94f248cd88))
- - Autofix map-or-unwrap clippy lint (and manual fix what was left) ([`2087032`](https://github.com/Byron/gitoxide/commit/2087032b5956dcd82bce6ac57e530e8724b57f17))
- - Merge branch 'main' into auto-clippy ([`3ef5c90`](https://github.com/Byron/gitoxide/commit/3ef5c90aebce23385815f1df674c1d28d58b4b0d))
- - Merge pull request #864 from nyurik/lint-fmt ([`279dc09`](https://github.com/Byron/gitoxide/commit/279dc09446f41d7f1d76350fbfafb444e53cd7da))
- - Merge branch 'blinxen/main' ([`9375cd7`](https://github.com/Byron/gitoxide/commit/9375cd75b01aa22a0e2eed6305fe45fabfd6c1ac))
- - Inline format args ([`dbc6cbb`](https://github.com/Byron/gitoxide/commit/dbc6cbb4363c2532f81b0bd6e351c4577bb9e9a3))
- - Include license files in all crates ([`facaaf6`](https://github.com/Byron/gitoxide/commit/facaaf633f01c857dcf2572c6dbe0a92b7105c1c))
- - Merge branch 'consecutive-negotiation' ([`97b3f7e`](https://github.com/Byron/gitoxide/commit/97b3f7e2eaddea20c98f2f7ab6a0d2e2117b0793))
- - Release gix-commitgraph v0.15.0, gix-revision v0.14.0, gix-negotiate v0.1.0, safety bump 7 crates ([`92832ca`](https://github.com/Byron/gitoxide/commit/92832ca2899cd2f222f4c7b1cc9e766178f55806))
- - Merge branch 'consecutive-negotiation' ([`4507f94`](https://github.com/Byron/gitoxide/commit/4507f94984c811ea098e43472e5f54ec4dbb90c1))
- - Adapt to changes in `gix-revision` ([`56f4d30`](https://github.com/Byron/gitoxide/commit/56f4d30960de4afc8c53136af45149cf880547c5))
- - Refactor ([`f4245f4`](https://github.com/Byron/gitoxide/commit/f4245f4bb0921610456dde2c56068e7c5e4f1d27))
- - Merge branch 'fix-851' ([`2f275d5`](https://github.com/Byron/gitoxide/commit/2f275d5d3cb49b3b8ba53b30e4b4386fac32662b))
- - Adjust to changes in `gix-pack` ([`215889c`](https://github.com/Byron/gitoxide/commit/215889ceb976a59368c132aabfffb71a6a2ac9f8))
- - Support reading the fetch algorithm from configuration ([`33b7770`](https://github.com/Byron/gitoxide/commit/33b777074db21db8cd060ecf8cfdac0409a7e10c))
- - Release gix-object v0.29.2 ([`4f879bf`](https://github.com/Byron/gitoxide/commit/4f879bf35653bdc8f9729d524c6e8e1fb3c6886b))
- - Release gix-discover v0.18.1, gix-worktree v0.17.1, gix-testtools v0.12.0 ([`f7b6c6f`](https://github.com/Byron/gitoxide/commit/f7b6c6f27c090cbc584fbd3f5403da5ac1a9ff02))
- - Release gix-index v0.16.1 ([`08c6f9d`](https://github.com/Byron/gitoxide/commit/08c6f9de95c65ff05db4ce6a5593127c4280b2ef))
- - Release gix-ref v0.29.1 ([`13e01f5`](https://github.com/Byron/gitoxide/commit/13e01f5742ed2121f00f4b16c1df0cce5e7708ef))
- - Improve docs for `Shallow` ([`3d95bb7`](https://github.com/Byron/gitoxide/commit/3d95bb76746a56b6e9060245f6c190c3836a0102))
-</details>
-
-## 0.44.1 (2023-04-27)
-
-A maintenance release without user-facing changes. It's meant to fix breakage that occurred when publishing a breaking change in `gix-path` by accident.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 3 commits contributed to the release.
- - 0 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix-path v0.8.0, gix-glob v0.7.0, gix-attributes v0.12.0, gix-config-value v0.12.0, gix-ref v0.29.0, gix-sec v0.8.0, gix-config v0.22.0, gix-prompt v0.5.0, gix-url v0.18.0, gix-credentials v0.14.0, gix-discover v0.18.0, gix-ignore v0.2.0, gix-pack v0.35.0, gix-odb v0.45.0, gix-transport v0.31.0, gix-protocol v0.32.0, gix-refspec v0.10.1, gix-worktree v0.17.0, gix v0.44.1 ([`7ebc9f7`](https://github.com/Byron/gitoxide/commit/7ebc9f734ec4371dd27daa568c0244185bb49eb5))
- - Prepare changelogs prior to release ([`0135158`](https://github.com/Byron/gitoxide/commit/013515897215400539bfd53c25548bd054186ba6))
- - Bump gix-path v0.8.0, safety bump 20 crates (gix set to 0.44.1 manually) ([`43ebaf2`](https://github.com/Byron/gitoxide/commit/43ebaf267557218865862538ffc7bdf00558492f))
-</details>
-
-## 0.44.0 (2023-04-26)
-
-### New Features
-
- - <csr-id-08e8fc2152794652ba1c986df493c2ac915af9e7/> `gix index entries` also prints attributes.
- - <csr-id-bc28443e452c4de81368739a11a2482ae0a93485/> add `Repository::attributes()` and `Worktree::attributes()`.
- - <csr-id-40a1b7444ba9d9b61a1c22a7f25662eec3c25a1b/> add `index.threads` configuration to `gix::config::tree`
- - <csr-id-afe7faa14afb2ec4934f204e01ed12bcd0b3e786/> Before writing new objects, check if they exist.
- That way we safe expensive IO at the cost of some CPU.
- - <csr-id-037f52d4099e239c28210476ad7ab57d22aa3626/> add `Object::into_tag()` and `Tag::decode()` methods.
- This makes the API more symmetric as similar methods exist for commits
- and trees.
- - <csr-id-35cb6b42bd8071e5e5c16ed6d37884deea524330/> Allow `USE_NSEC` and `USE_STDEV` compile time flags to configured at runtime.
- Right now git may be compiled without these capabilities, even though on some platforms
- it might make perfect sense to enable them by default or enable them on a per repository
- basis. This is now possible thanks to added gitoxide specific functions.
- - <csr-id-358500f0efaec7c67b307a6a1aa27ecad7502eb7/> `open::Options` now allow controlling where gitattributes files are loaded from.
- That way it's possible to, for example, isolate all operations that rely on the `gitattribute`
- system, like checkouts or additions to the index.
- - <csr-id-ec93f75cfdf6cbd617c4a92eefae97f2c7736d65/> `revision::walk::Platform::selected(filter)` to selectively prune parts of the commit graph.
-
-### Bug Fixes
-
- - <csr-id-2cd5054b0a1994571a25a49193449904cfd30b50/> When removing all shallow commits from shallow file, delete it.
- Previously it would leave an empty file, which will be ignored by the implementation
- but might be confusing to users.
- - <csr-id-43f695a9607f1f85f859f2ef944b785b5b6dd238/> `gix::open()` can handle bare repositories with index.
- These are mis-classified as non-bare repository, which previosuly
- caused it to get off-track.
-
-### New Features (BREAKING)
-
- - <csr-id-26e6a661ed5827151708b9fcc3d7468aa60cf4e3/> add `Repository::excludes()` and simplify signature of `Worktree::excludes()`.
- Further, this change removes the `permission` module without replacement,
- and moves `permissions` into `open`.
-
- This corrects an artifact of this crate previously being name `gix-repository` and brings
- these types semantically closer to where they are actually used.
- - <csr-id-cb3437632fe7ff0ce4efd11c08a8d684d7e7e430/> support configuring the connection (i.e. for auth) during clone.
- This change also removes the generic type for Progress from `Connection`
- which forces it to be passed to every potentially long-running method.
- - <csr-id-b83ee366a3c65c717beb587ad809268f1c54b8ad/> Rename `serde1` cargo feature to `serde` and use the weak-deps cargo capability.
- With it it's possible to not automatically declare all optional dependencies externally visible
- features, and thus re-use feature names that oterwise are also a crate name.
-
- Previously I thought that `serde1` is for future-proofing and supporting multiple serde versions
- at the same time. However, it's most definitely a burden I wouldn't want anyway, so using
- `serde` seems to be the way to go into the future.
- - <csr-id-b645d28f9641c6b4022e1e37ad9fe528922ec747/> remove types that are now available in `gix-os`
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 48 commits contributed to the release over the course of 26 calendar days.
- - 27 days passed between releases.
- - 14 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 2 unique issues were worked on: [#801](https://github.com/Byron/gitoxide/issues/801), [#814](https://github.com/Byron/gitoxide/issues/814)
-
-### Thanks Clippy
-
-<csr-read-only-do-not-edit/>
-
-[Clippy](https://github.com/rust-lang/rust-clippy) helped 1 time to make code idiomatic.
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **[#801](https://github.com/Byron/gitoxide/issues/801)**
- - `revision::walk::Platform::selected(filter)` to selectively prune parts of the commit graph. ([`ec93f75`](https://github.com/Byron/gitoxide/commit/ec93f75cfdf6cbd617c4a92eefae97f2c7736d65))
- * **[#814](https://github.com/Byron/gitoxide/issues/814)**
- - Rename `serde1` cargo feature to `serde` and use the weak-deps cargo capability. ([`b83ee36`](https://github.com/Byron/gitoxide/commit/b83ee366a3c65c717beb587ad809268f1c54b8ad))
- * **Uncategorized**
- - Release gix-worktree v0.16.0, gix v0.44.0 ([`4527fb8`](https://github.com/Byron/gitoxide/commit/4527fb8e0fe0786a70ccfd8c3f5c5e79e8867944))
- - Release gix-index v0.16.0, gix-mailmap v0.12.0, gix-pack v0.34.0, gix-odb v0.44.0, gix-packetline v0.16.0, gix-transport v0.30.0, gix-protocol v0.31.0, gix-revision v0.13.0, gix-refspec v0.10.0, gix-worktree v0.16.0, gix v0.44.0 ([`d7173b2`](https://github.com/Byron/gitoxide/commit/d7173b2d2cb79685fdf7f618c31c576db24fa648))
- - Release gix-index v0.16.0, gix-mailmap v0.12.0, gix-pack v0.34.0, gix-odb v0.44.0, gix-packetline v0.16.0, gix-transport v0.30.0, gix-protocol v0.31.0, gix-revision v0.13.0, gix-refspec v0.10.0, gix-worktree v0.16.0, gix v0.44.0 ([`e4df557`](https://github.com/Byron/gitoxide/commit/e4df5574c0813a0236319fa6e8b3b41bab179fc8))
- - Release gix-hash v0.11.1, gix-path v0.7.4, gix-glob v0.6.0, gix-attributes v0.11.0, gix-config-value v0.11.0, gix-fs v0.1.1, gix-tempfile v5.0.3, gix-utils v0.1.1, gix-lock v5.0.1, gix-object v0.29.1, gix-ref v0.28.0, gix-sec v0.7.0, gix-config v0.21.0, gix-prompt v0.4.0, gix-url v0.17.0, gix-credentials v0.13.0, gix-diff v0.29.0, gix-discover v0.17.0, gix-hashtable v0.2.0, gix-ignore v0.1.0, gix-bitmap v0.2.3, gix-traverse v0.25.0, gix-index v0.16.0, gix-mailmap v0.12.0, gix-pack v0.34.0, gix-odb v0.44.0, gix-packetline v0.16.0, gix-transport v0.30.0, gix-protocol v0.31.0, gix-revision v0.13.0, gix-refspec v0.10.0, gix-worktree v0.16.0, gix v0.44.0, safety bump 7 crates ([`91134a1`](https://github.com/Byron/gitoxide/commit/91134a11c8ba0e942f692488ec9bce9fa1086324))
- - Prepare changelogs prior to release ([`30a1a71`](https://github.com/Byron/gitoxide/commit/30a1a71f36f24faac0e0b362ffdfedea7f9cdbf1))
- - When removing all shallow commits from shallow file, delete it. ([`2cd5054`](https://github.com/Byron/gitoxide/commit/2cd5054b0a1994571a25a49193449904cfd30b50))
- - Merge branch 'index-entries-attrs' ([`f37a930`](https://github.com/Byron/gitoxide/commit/f37a930aefa27e67f0b693ba9669cc26d49044fa))
- - `gix index entries` also prints attributes. ([`08e8fc2`](https://github.com/Byron/gitoxide/commit/08e8fc2152794652ba1c986df493c2ac915af9e7))
- - Adjust to changes in `gix-worktree` ([`27a39ca`](https://github.com/Byron/gitoxide/commit/27a39cad498ca8b2c9cba05790284e2b68ba7636))
- - Add `Repository::attributes()` and `Worktree::attributes()`. ([`bc28443`](https://github.com/Byron/gitoxide/commit/bc28443e452c4de81368739a11a2482ae0a93485))
- - Add `Repository::excludes()` and simplify signature of `Worktree::excludes()`. ([`26e6a66`](https://github.com/Byron/gitoxide/commit/26e6a661ed5827151708b9fcc3d7468aa60cf4e3))
- - Add `index.threads` configuration to `gix::config::tree` ([`40a1b74`](https://github.com/Byron/gitoxide/commit/40a1b7444ba9d9b61a1c22a7f25662eec3c25a1b))
- - Adjust to changes in `gix-worktree` ([`f722d6b`](https://github.com/Byron/gitoxide/commit/f722d6bebcd215b6e270261a3ed032a5f7e7b72f))
- - Merge branch 'attributes-cache' ([`3456c84`](https://github.com/Byron/gitoxide/commit/3456c845dfeedd2fa96b4313b1a84c8cbe9433c5))
- - Adjust to changes in `gix-worktree` ([`13a070f`](https://github.com/Byron/gitoxide/commit/13a070f405230d52e4377e18f6bdc5c673b718a0))
- - Merge branch 'fix-823' ([`6ebd61e`](https://github.com/Byron/gitoxide/commit/6ebd61e548a36a04e413ac725a03e607a3588334))
- - `gix::open()` can handle bare repositories with index. ([`43f695a`](https://github.com/Byron/gitoxide/commit/43f695a9607f1f85f859f2ef944b785b5b6dd238))
- - Thanks clippy ([`14e64e7`](https://github.com/Byron/gitoxide/commit/14e64e74649cfb1f2f99da87015939af98fae5c8))
- - Merge branch 'clone-auth' ([`1a65308`](https://github.com/Byron/gitoxide/commit/1a653083bf0a3a01ee116535e65202392a2c676c))
- - Support configuring the connection (i.e. for auth) during clone. ([`cb34376`](https://github.com/Byron/gitoxide/commit/cb3437632fe7ff0ce4efd11c08a8d684d7e7e430))
- - Merge branch 'fix-819' ([`69faad0`](https://github.com/Byron/gitoxide/commit/69faad0d7cc100de54d757d42acc152a22edc022))
- - Before writing new objects, check if they exist. ([`afe7faa`](https://github.com/Byron/gitoxide/commit/afe7faa14afb2ec4934f204e01ed12bcd0b3e786))
- - Add `Object::into_tag()` and `Tag::decode()` methods. ([`037f52d`](https://github.com/Byron/gitoxide/commit/037f52d4099e239c28210476ad7ab57d22aa3626))
- - Release gix-utils v0.1.0, gix-hash v0.11.0, gix-date v0.5.0, gix-features v0.29.0, gix-actor v0.20.0, gix-object v0.29.0, gix-archive v0.1.0, gix-fs v0.1.0, safety bump 25 crates ([`8dbd0a6`](https://github.com/Byron/gitoxide/commit/8dbd0a60557a85acfa231800a058cbac0271a8cf))
- - Support native zlib-ng via flate2's zlib-ng feature ([`9a6e0d7`](https://github.com/Byron/gitoxide/commit/9a6e0d7b418ea721da6a7e4bc48c47b47d4dfa79))
- - Make fmt ([`5d2b5d0`](https://github.com/Byron/gitoxide/commit/5d2b5d02c3869e07dc2507a8f2519ee1df633df7))
- - Merge branch 'main' into dev ([`cdef398`](https://github.com/Byron/gitoxide/commit/cdef398c4a3bd01baf0be2c27a3f77a400172b0d))
- - Minor adjustments to the worktree structure. ([`8920229`](https://github.com/Byron/gitoxide/commit/89202296f63dacedfd396aefe25e686b4d426b2a))
- - Rename the serde1 feature to serde ([`19338d9`](https://github.com/Byron/gitoxide/commit/19338d934b6712b7d6bd3fa3b2e4189bf7e6c8a1))
- - Create new `gix-fs` crate to consolidate all filesystem utilities ([`f8cc33c`](https://github.com/Byron/gitoxide/commit/f8cc33cb372dd2b4bbe4a09cf4f64916681ab1dd))
- - Allow `USE_NSEC` and `USE_STDEV` compile time flags to configured at runtime. ([`35cb6b4`](https://github.com/Byron/gitoxide/commit/35cb6b42bd8071e5e5c16ed6d37884deea524330))
- - Merge branch 'main' into dev ([`23ee47f`](https://github.com/Byron/gitoxide/commit/23ee47fb24c197f8437bd426544b2aa74e005bdc))
- - Merge branch 'worktree-stack' ([`3d47919`](https://github.com/Byron/gitoxide/commit/3d47919c1a2f83fc7c1fd7ae590d098057a22626))
- - `open::Options` now allow controlling where gitattributes files are loaded from. ([`358500f`](https://github.com/Byron/gitoxide/commit/358500f0efaec7c67b307a6a1aa27ecad7502eb7))
- - Adjust to changes in `gix-attributes` ([`1755c81`](https://github.com/Byron/gitoxide/commit/1755c81f64ce8a68807c2026eeae13dc46021db1))
- - Remove types that are now available in `gix-os` ([`b645d28`](https://github.com/Byron/gitoxide/commit/b645d28f9641c6b4022e1e37ad9fe528922ec747))
- - Refactor ([`0677406`](https://github.com/Byron/gitoxide/commit/067740636b3ca24ce90db91923dfd4ee592fa7f6))
- - Centralize index entry Stat creation/comparison ([`870bdb2`](https://github.com/Byron/gitoxide/commit/870bdb2f3957e0f5690679e2aeb6752cd0b8d93e))
- - Release gix-hash v0.10.4, gix-hashtable v0.1.3 ([`b574a39`](https://github.com/Byron/gitoxide/commit/b574a3904203762a6b9e475e16a7c358d7616599))
- - Merge branch 'patch-1' ([`b02bf24`](https://github.com/Byron/gitoxide/commit/b02bf247890c873184e58f734e0912eac6c6bbae))
- - Add test to run tests on 32 bit systems ([`fb31ee8`](https://github.com/Byron/gitoxide/commit/fb31ee8bbcfc72fa0e7e38bc84d02f6f7d2f0fff))
- - Merge branch 'patch-1' ([`d0052c1`](https://github.com/Byron/gitoxide/commit/d0052c13cabcde8058177d2439053b50ea5adbfc))
- - Upgrade serial-test to v2 ([`6932017`](https://github.com/Byron/gitoxide/commit/69320174685e72940cd0fe600c94abb948a62bdd))
- - Release gix-revision v0.12.2 ([`ec64a88`](https://github.com/Byron/gitoxide/commit/ec64a88690243a210efee6d5ae5164723e13f734))
- - Merge branch 'fix-801' ([`a884121`](https://github.com/Byron/gitoxide/commit/a88412194ff8960cd69a3794042d9c6c29428ea6))
- - Prevent env-altering tests to affect shallow tests ([`61eec5a`](https://github.com/Byron/gitoxide/commit/61eec5ae48006b4f0a6ac5c7b9549811dfa9431d))
-</details>
-
-## 0.43.1 (2023-03-30)
-
-### Documentation
-
- - <csr-id-02c4659984fa6423bc76cc4980a143edaba8ace0/> fix minor typos
- - <csr-id-cc48c35d0ecf35824910c5b6ecc62fe9b2aff1b5/> fix minor typos
-
-### New Features
-
- - <csr-id-7c2e5c8d08e4dd1ec115ae06f20f9c8f93d6d616/> add `Tree::decode()` and `TryFrom<Tree> for gix::objs::Tree`.
- This makes it possible to obtain mutable trees for creating trees by hand
- for the purpose of making commits.
-
-### Bug Fixes
-
- - <csr-id-d1bd513f27e17787eb223f7b0521f954c518153e/> $HOME detection on windows
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 9 commits contributed to the release over the course of 3 calendar days.
- - 4 days passed between releases.
- - 4 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix-path v0.7.3, gix-config-value v0.10.2, gix-config v0.20.1, gix-discover v0.16.2, gix-index v0.15.1, gix-odb v0.43.1, gix-packetline v0.15.1, gix-protocol v0.30.2, gix-worktree v0.15.2, gix v0.43.1 ([`38eed1d`](https://github.com/Byron/gitoxide/commit/38eed1d06e7cbb8fbcd54b2cad3163ca45e0baf1))
- - Merge branch 'pascalkuthe/main' ([`d47cebe`](https://github.com/Byron/gitoxide/commit/d47cebe3b23080c45829cb307b867220e3af20db))
- - Refactor ([`d1e5e12`](https://github.com/Byron/gitoxide/commit/d1e5e12d54f79c030325860838c1cfadac1a7ac5))
- - $HOME detection on windows ([`d1bd513`](https://github.com/Byron/gitoxide/commit/d1bd513f27e17787eb223f7b0521f954c518153e))
- - Fix minor typos ([`02c4659`](https://github.com/Byron/gitoxide/commit/02c4659984fa6423bc76cc4980a143edaba8ace0))
- - Fix minor typos ([`cc48c35`](https://github.com/Byron/gitoxide/commit/cc48c35d0ecf35824910c5b6ecc62fe9b2aff1b5))
- - Add `Tree::decode()` and `TryFrom<Tree> for gix::objs::Tree`. ([`7c2e5c8`](https://github.com/Byron/gitoxide/commit/7c2e5c8d08e4dd1ec115ae06f20f9c8f93d6d616))
- - Release gix-ref v0.27.2 ([`e965b18`](https://github.com/Byron/gitoxide/commit/e965b18aedcf13ec4538bc7bc700269a56ca615e))
- - Be sure to clear the buffer after an intermediate read error happened and we ignore it. ([`877951a`](https://github.com/Byron/gitoxide/commit/877951aa0009ab5e2a814c95f4c5d3662305cb27))
-</details>
-
-## 0.43.0 (2023-03-26)
-
-<csr-id-87f5621d941b5af40abd59a26164a09d0dde2649/>
-
-### Bug Fixes
-
- - <csr-id-7bd8823ab4241d6d0401f03aec8c0d34f68c347c/> opening repositories without 'strict' mode also ignores IO errors.
- These will instead be logged, but won't make it impossible to open an
- otherwise fine repository.
-
-### Other
-
- - <csr-id-87f5621d941b5af40abd59a26164a09d0dde2649/> make clear that `gix::discover()` isn't suited for authentication remote operations.
- We also provide information on how to accomplish this.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 6 commits contributed to the release over the course of 5 calendar days.
- - 11 days passed between releases.
- - 2 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 2 unique issues were worked on: [#787](https://github.com/Byron/gitoxide/issues/787), [#790](https://github.com/Byron/gitoxide/issues/790)
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **[#787](https://github.com/Byron/gitoxide/issues/787)**
- - Make clear that `gix::discover()` isn't suited for authentication remote operations. ([`87f5621`](https://github.com/Byron/gitoxide/commit/87f5621d941b5af40abd59a26164a09d0dde2649))
- * **[#790](https://github.com/Byron/gitoxide/issues/790)**
- - Opening repositories without 'strict' mode also ignores IO errors. ([`7bd8823`](https://github.com/Byron/gitoxide/commit/7bd8823ab4241d6d0401f03aec8c0d34f68c347c))
- * **Uncategorized**
- - Release gix-tempfile v5.0.2, gix-validate v0.7.4, gix-config v0.20.0, gix-prompt v0.3.3, gix-diff v0.28.1, gix-discover v0.16.1, gix-pack v0.33.2, gix-transport v0.29.1, gix-protocol v0.30.1, gix-revision v0.12.1, gix-worktree v0.15.1, gix v0.43.0, safety bump gix v0.43.0 ([`5dc1f9f`](https://github.com/Byron/gitoxide/commit/5dc1f9f2bcb8b3e147115fcb6f76558e8f48ffef))
- - Prepare changelogs prior to release ([`3016a28`](https://github.com/Byron/gitoxide/commit/3016a285f566bdfe7de2774fa6f2254c1b1a2c51))
- - Merge branch 'fix-790' ([`ee36e5b`](https://github.com/Byron/gitoxide/commit/ee36e5bb985e9ad90bc382cdd051a8b5295ca18c))
- - Less dependencies for tests (via `serial_test` no default features) ([`8f2accd`](https://github.com/Byron/gitoxide/commit/8f2accdf738def9aa4abdf08fc299d0e9807bc3e))
-</details>
-
-## 0.42.0 (2023-03-14)
-
-### New Features
-
- - <csr-id-93d412c54833d822e5369644226c6fd3b888c89c/> shallow support for `fetch` operations.
- - <csr-id-4e89c19d7656a96bd512dafbc9669011487671f5/> shallow support for `clone` operations.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 11 commits contributed to the release over the course of 3 calendar days.
- - 3 days passed between releases.
- - 2 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix-features v0.28.1, gix-tempfile v5.0.1, gix-ref v0.27.1, gix-pack v0.33.1, gix-packetline v0.15.0, gix-transport v0.29.0, gix-protocol v0.30.0, gix v0.42.0, safety bump 3 crates ([`c1f1bfb`](https://github.com/Byron/gitoxide/commit/c1f1bfb8dc0e73993678353e4492d0614b642ed1))
- - Prepare changelogs prior to release ([`c66e298`](https://github.com/Byron/gitoxide/commit/c66e2982577e4cd9faef63798986b8cf8ece93a2))
- - Make fmt ([`3836cc0`](https://github.com/Byron/gitoxide/commit/3836cc0c9c3e1158b56142b924483c8a77217d53))
- - Merge branch 'various-fixes' ([`cc0f506`](https://github.com/Byron/gitoxide/commit/cc0f5061fba27d57022dc616c941034b98fd4875))
- - Improve fetchspec handling to be closer to what git does. ([`a22621d`](https://github.com/Byron/gitoxide/commit/a22621d1b92a6155b83a09e68ed1de3a4860e766))
- - Assure that --deepen 0 (despite allowed) doesn't actually confuse the server. ([`b43ea6b`](https://github.com/Byron/gitoxide/commit/b43ea6bdc873da2facdb0fe8369ab1644a6702ef))
- - Adjust to changes in `gix-packetline` ([`4f45814`](https://github.com/Byron/gitoxide/commit/4f45814eea9c20b449effd9b29d31623943ff853))
- - Merge branch 'shallow-protocol' ([`531dd19`](https://github.com/Byron/gitoxide/commit/531dd19502b8b635fb1a60f747eb381fd12e00ca))
- - Shallow support for `fetch` operations. ([`93d412c`](https://github.com/Byron/gitoxide/commit/93d412c54833d822e5369644226c6fd3b888c89c))
- - Shallow support for `clone` operations. ([`4e89c19`](https://github.com/Byron/gitoxide/commit/4e89c19d7656a96bd512dafbc9669011487671f5))
- - Merge branch 'fix-cred-helper' ([`01277a6`](https://github.com/Byron/gitoxide/commit/01277a681e4997896e04567490c572b5af606f35))
-</details>
-
-## 0.41.0 (2023-03-10)
-
-A maintenance release without user-facing changes, but with some fixes in the dependency chain, namely:
-
-- `gix-credentials` allows credential helpers to ignore `stdin`, making it robust when facing helpers that don't read from `stdin`.
-- `gix-tempfile` refers to the most recent version of `tempfile` without pinning it, which removes a security vulnerability.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 4 commits contributed to the release.
- - 1 day passed between releases.
- - 0 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix-tempfile v5.0.0, gix-lock v5.0.0, gix-ref v0.27.0, gix-config v0.19.0, gix-url v0.16.0, gix-credentials v0.12.0, gix-discover v0.16.0, gix-index v0.15.0, gix-pack v0.33.0, gix-odb v0.43.0, gix-transport v0.28.0, gix-protocol v0.29.0, gix-worktree v0.15.0, gix v0.41.0, safety bump 12 crates ([`29a0870`](https://github.com/Byron/gitoxide/commit/29a087043d1feb2f127b065341c8028d0bd0301e))
- - Prepare changelogs prior to release ([`e06f5f5`](https://github.com/Byron/gitoxide/commit/e06f5f523e83f4da390eddbebcb9a2d58674587b))
- - Merge branch 'password-in-urls' ([`85f8b28`](https://github.com/Byron/gitoxide/commit/85f8b283a1671e2631cda437ca8da93f9a2a4ebd))
- - Adjust to changes in `gix-url` ([`66602bb`](https://github.com/Byron/gitoxide/commit/66602bbb7fe62f7425c8289902a1d2fce121e87c))
-</details>
-
-## 0.40.0 (2023-03-09)
-
-### New Features
-
- - <csr-id-5bfbb9a32f8edb8bfb71ae00167277b9109de35a/> `Repository::shallow_commits()` returns an uptodate list of shallow boundary commits.
- - <csr-id-3e69535630714205904fe64f511da28a3f2d7fb6/> `Repository::is_shallow()` to test if a repository is shallow.
-
-### Bug Fixes (BREAKING)
-
- - <csr-id-1046ea2b3312838169aa08f30b598bf4ce2338d9/> allow to traverse the entire commit graph of shallow repos
- Previously, when traversing commits, we would assume to be in a
- shallow repository if a commit's parent could not be found in the
- repository.
-
- Now we validate that assumption by reading the 'shallow' file to
- check if the last seen commit is on the commit boundary.
-
- This removes `is_shallow` and `error_on_missing_commit()` on the
- `revision::walk::Platform` as shallow commits are now known and handled
- without any guesswork.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 5 commits contributed to the release over the course of 3 calendar days.
- - 4 days passed between releases.
- - 3 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix v0.40.0 ([`18e72c9`](https://github.com/Byron/gitoxide/commit/18e72c988a58415080d4555bc869ae04df8d04fa))
- - Merge branch 'shallow-support' ([`6d88fd2`](https://github.com/Byron/gitoxide/commit/6d88fd208bcdec0603d57785bdbfe2f286a65384))
- - Allow to traverse the entire commit graph of shallow repos ([`1046ea2`](https://github.com/Byron/gitoxide/commit/1046ea2b3312838169aa08f30b598bf4ce2338d9))
- - `Repository::shallow_commits()` returns an uptodate list of shallow boundary commits. ([`5bfbb9a`](https://github.com/Byron/gitoxide/commit/5bfbb9a32f8edb8bfb71ae00167277b9109de35a))
- - `Repository::is_shallow()` to test if a repository is shallow. ([`3e69535`](https://github.com/Byron/gitoxide/commit/3e69535630714205904fe64f511da28a3f2d7fb6))
-</details>
-
-## 0.39.0 (2023-03-04)
-
-A maintenance release without user-facing changes, primarily for getting the progress-bar updates into `cargo`.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 3 commits contributed to the release.
- - 3 days passed between releases.
- - 0 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix-attributes v0.10.0, gix-ref v0.26.0, gix-config v0.18.0, gix-url v0.15.0, gix-credentials v0.11.0, gix-discover v0.15.0, gix-index v0.14.0, gix-mailmap v0.11.0, gix-odb v0.42.0, gix-transport v0.27.0, gix-protocol v0.28.0, gix-revision v0.12.0, gix-refspec v0.9.0, gix-worktree v0.14.0, gix v0.39.0 ([`93e75fe`](https://github.com/Byron/gitoxide/commit/93e75fed454ed8b342231bde4638db90e407ce52))
- - Prepare changelogs prior to release ([`895e482`](https://github.com/Byron/gitoxide/commit/895e482badf01e953bb9144001eebd5e1b1c4d84))
- - Release gix-features v0.28.0, gix-actor v0.19.0, gix-object v0.28.0, gix-diff v0.28.0, gix-traverse v0.24.0, gix-pack v0.32.0, safety bump 20 crates ([`0f411e9`](https://github.com/Byron/gitoxide/commit/0f411e93ec812592bb9d3a52b751399dd86f76f7))
-</details>
-
-## 0.38.0 (2023-03-01)
-
-### New Features
-
- - <csr-id-256f7d46ed88067aa96f47be2a97a6f9f5b98075/> the `hp-tempfile-registry` feature toggle to control the `dashmap` dependency.
- And also, probably provide a better performance in certain cases.
- - <csr-id-fd7eebcd922f98c1aed9e3177b9a48ff1415ffd8/> make `gix-pack` feature toggles related to pack caches available.
- Previously they would have to be configured by pulling in `gix-pack`, which
- isn't desirable as the only crate we want to expose like that is `gix-features`.
- - <csr-id-5b0ebd272c3d98e26c9249ed27b4ea9a8ad80746/> Add `comfort` feature toggle (default enabled) to make better progress units available.
- This could be a breaking change for those who turned default-features off, as you may now
- have to re-add the `comfort` feature to get nicer progress messages.
-
-### Bug Fixes
-
- - <csr-id-b2375e3dbe1f87ee3ac6e814fc8f4898143c438d/> `gix-tempfile` is now configured to not use the high-performance hashmap anymore.
- It was hard to justify as tests actually seemed to be faster without it.
-
-### New Features (BREAKING)
-
- - <csr-id-fea8c56089e5b354669396853c5bd0f31bdf0d33/> Put `progress::tree` behind the `progress-tree` feature toggle.
- It's a convenience export that implies pulling in more dependencies, so it
- should be gated.
- - <csr-id-441f5ac4dd2f0636ec07065f8095e8bae5ce6985/> gate all signal handling behind the `signals` feature toggle.
- This change also consolidates all signal handling into its own module called
- `signal` to provide reusable handlers and as well as well as signal initialization.
-
- Note that the functions to cleanup tempfiles don't interact with the signal registry,
- hence they still can be called without the `signals` feature enabled.
-
- Note that this change sneakily fixes a bug that could have caused a `write_all()`
- on a tempfile that was removed by a signal to enter an infinite loop.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 17 commits contributed to the release over the course of 4 calendar days.
- - 4 days passed between releases.
- - 6 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 1 unique issue was worked on: [#339](https://github.com/Byron/gitoxide/issues/339)
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **[#339](https://github.com/Byron/gitoxide/issues/339)**
- - Gate all signal handling behind the `signals` feature toggle. ([`441f5ac`](https://github.com/Byron/gitoxide/commit/441f5ac4dd2f0636ec07065f8095e8bae5ce6985))
- * **Uncategorized**
- - Release gix-tempfile v4.1.0, gix-lock v4.0.0, gix-ref v0.25.0, gix-config v0.17.0, gix-url v0.14.0, gix-credentials v0.10.0, gix-diff v0.27.0, gix-discover v0.14.0, gix-hashtable v0.1.2, gix-bitmap v0.2.2, gix-traverse v0.23.0, gix-index v0.13.0, gix-mailmap v0.10.0, gix-pack v0.31.0, gix-odb v0.41.0, gix-transport v0.26.0, gix-protocol v0.27.0, gix-revision v0.11.0, gix-refspec v0.8.0, gix-worktree v0.13.0, gix v0.38.0, safety bump 6 crates ([`ea9fd1d`](https://github.com/Byron/gitoxide/commit/ea9fd1d9b60e1e9e17042e9e37c06525823c40a5))
- - Release gix-features v0.27.0, gix-actor v0.18.0, gix-quote v0.4.3, gix-attributes v0.9.0, gix-object v0.27.0, gix-ref v0.25.0, gix-config v0.17.0, gix-url v0.14.0, gix-credentials v0.10.0, gix-diff v0.27.0, gix-discover v0.14.0, gix-hashtable v0.1.2, gix-bitmap v0.2.2, gix-traverse v0.23.0, gix-index v0.13.0, gix-mailmap v0.10.0, gix-pack v0.31.0, gix-odb v0.41.0, gix-transport v0.26.0, gix-protocol v0.27.0, gix-revision v0.11.0, gix-refspec v0.8.0, gix-worktree v0.13.0, gix v0.38.0 ([`e6cc618`](https://github.com/Byron/gitoxide/commit/e6cc6184a7a49dbc2503c1c1bdd3688ca5cec5fe))
- - Adjust manifests prior to release ([`addd789`](https://github.com/Byron/gitoxide/commit/addd78958fdd1e54eb702854e96079539d01965a))
- - Prepare changelogs prior to release ([`94c99c7`](https://github.com/Byron/gitoxide/commit/94c99c71520f33269cc8dbc26f82a74747cc7e16))
- - Merge branch 'adjustments-for-cargo' ([`d686d94`](https://github.com/Byron/gitoxide/commit/d686d94e1030a8591ba074757d56927a346c8351))
- - `gix-tempfile` is now configured to not use the high-performance hashmap anymore. ([`b2375e3`](https://github.com/Byron/gitoxide/commit/b2375e3dbe1f87ee3ac6e814fc8f4898143c438d))
- - Depend on latest version of `prodash` for performance improvements. ([`5d00324`](https://github.com/Byron/gitoxide/commit/5d003242abe82b1604e2188d49dec9690ebb2a6a))
- - The `hp-tempfile-registry` feature toggle to control the `dashmap` dependency. ([`256f7d4`](https://github.com/Byron/gitoxide/commit/256f7d46ed88067aa96f47be2a97a6f9f5b98075))
- - Make `gix-pack` feature toggles related to pack caches available. ([`fd7eebc`](https://github.com/Byron/gitoxide/commit/fd7eebcd922f98c1aed9e3177b9a48ff1415ffd8))
- - Put `progress::tree` behind the `progress-tree` feature toggle. ([`fea8c56`](https://github.com/Byron/gitoxide/commit/fea8c56089e5b354669396853c5bd0f31bdf0d33))
- - Add `comfort` feature toggle (default enabled) to make better progress units available. ([`5b0ebd2`](https://github.com/Byron/gitoxide/commit/5b0ebd272c3d98e26c9249ed27b4ea9a8ad80746))
- - Prepare for git-tempfile release ([`56c005b`](https://github.com/Byron/gitoxide/commit/56c005b13c44376f71e61781e73c0bf93416d0e4))
- - Merge branch 'tempfile-upgrades' ([`3522cba`](https://github.com/Byron/gitoxide/commit/3522cbaac721c8079605be51b9053014bc5e863a))
- - Adjust to changes in `gix-tempfile` ([`c6785fc`](https://github.com/Byron/gitoxide/commit/c6785fc7082b90c8a27cef6a0f5cc5acd8cb8951))
- - Make fmt ([`8ef1cb2`](https://github.com/Byron/gitoxide/commit/8ef1cb293434c7b9e1fda4a6963368e0435920a9))
- - Fix diff-tests on windows ([`441a64b`](https://github.com/Byron/gitoxide/commit/441a64b6b703f7f97cfcefe4d3db31bc7427b48c))
-</details>
-
-## 0.37.2 (2023-02-24)
-
-### Bug Fixes
-
- - <csr-id-1d3d22d45e70222c12fcf5a82063ceb9321a0129/> reproduce a diff issue and fix it
- Diffs could be quite wrong and this is a small repro along with the fix.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 5 commits contributed to the release.
- - 3 days passed between releases.
- - 1 commit was understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix-object v0.26.4, gix-diff v0.26.3, gix v0.37.2, gix-commitgraph v0.13.1, gitoxide-core v0.25.0, gitoxide v0.23.0 ([`9982949`](https://github.com/Byron/gitoxide/commit/9982949cab401501d5ce3cba4e2ba900bc249c53))
- - Fix new diff tests on windows ([`b1ec1b7`](https://github.com/Byron/gitoxide/commit/b1ec1b776696b4b1d73e3dd26cbaf33260367855))
- - Prepare changelog for release ([`13a1ec1`](https://github.com/Byron/gitoxide/commit/13a1ec1803d677c2e94f3ea0461118c2426f8071))
- - Merge branch 'rename-tracking' ([`550144a`](https://github.com/Byron/gitoxide/commit/550144a5fd37d501d86f4b1c4db2948d951d1c93))
- - Reproduce a diff issue and fix it ([`1d3d22d`](https://github.com/Byron/gitoxide/commit/1d3d22d45e70222c12fcf5a82063ceb9321a0129))
-</details>
-
-## 0.37.1 (2023-02-21)
-
-A maintenance release to restore MSRV (1.64) support.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 3 commits contributed to the release.
- - 0 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix-config v0.16.3, gix v0.37.1 ([`a3c283f`](https://github.com/Byron/gitoxide/commit/a3c283ff0e3f21cedb3ba7cd464fdfa0f5133af0))
- - Prepare changelogs prior to release ([`362d659`](https://github.com/Byron/gitoxide/commit/362d659f946ca1ff2cbf915766113a34a9df97b3))
- - Restore msrv compatibility by removing sole `if let ... else` ([`9160659`](https://github.com/Byron/gitoxide/commit/91606597b714a6e9b3a2c071bdb08baeacd6056b))
-</details>
-
-## 0.37.0 (2023-02-20)
-
-### Bug Fixes
-
- - <csr-id-d3b974000133caa0ea107cb4724b950eda91d69b/> `Repository::object_cache_size()` now unsets the cache if `Some(0)` is passed.
- Previously it would fail.
-
-### New Features (BREAKING)
-
- - <csr-id-ed87f4c7c2799625bc6c7109368687908f0fb6f0/> `object::tree::diff::Platform::track_rewrites(...)`
- The invocation of `object::tree::diff::Platform::track_rewrites(Rewrites { percentage: None, ..Default::default() })`
- is now able to explicitly configure perfect rename tracking without percentage of equivalence.
-
- By setting `percentage = Some(<fraction>)` one can set how similar both files should be to be considered related.
-
- The same can be configured for copy-tracking, which also includes something like `--find-copies-harder`.
-
- Note that by default, renames are considered if a file looks 50% similar, and copies tracking is
- using the same convention.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 4 commits contributed to the release.
- - 2 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix-object v0.26.3, gix-diff v0.26.2, gix-traverse v0.22.2, gix v0.37.0, safety bump 3 crates ([`8b3e42f`](https://github.com/Byron/gitoxide/commit/8b3e42f69fe97fe5083eb845c323f10d7ac087b2))
- - `Repository::object_cache_size()` now unsets the cache if `Some(0)` is passed. ([`d3b9740`](https://github.com/Byron/gitoxide/commit/d3b974000133caa0ea107cb4724b950eda91d69b))
- - Merge branch 'rename-tracking' ([`35415c5`](https://github.com/Byron/gitoxide/commit/35415c5061bf5ea90a04db80d06ac3622d0b0f1a))
- - `object::tree::diff::Platform::track_rewrites(...)` ([`ed87f4c`](https://github.com/Byron/gitoxide/commit/ed87f4c7c2799625bc6c7109368687908f0fb6f0))
-</details>
-
-## 0.36.1 (2023-02-20)
-
-### Bug Fixes
-
- - <csr-id-135d317065aae87af302beb6c26bb6ca8e30b6aa/> 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
- there is only one implementation, that's no problem, but when that changes compilation
- fails due to ambiguity.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 5 commits contributed to the release over the course of 2 calendar days.
- - 3 days passed between releases.
- - 1 commit was understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix v0.36.1 ([`fac6bce`](https://github.com/Byron/gitoxide/commit/fac6bce2f9942d7f333f66a92374d5400a00b0a5))
- - Release gix-date v0.4.3, gix-hash v0.10.3, gix-features v0.26.5, gix-actor v0.17.2, gix-glob v0.5.5, gix-path v0.7.2, gix-quote v0.4.2, gix-attributes v0.8.3, gix-validate v0.7.3, gix-object v0.26.2, gix-ref v0.24.1, gix-config v0.16.2, gix-command v0.2.4, gix-url v0.13.3, gix-credentials v0.9.2, gix-discover v0.13.1, gix-index v0.12.4, gix-mailmap v0.9.3, gix-pack v0.30.3, gix-packetline v0.14.3, gix-transport v0.25.6, gix-protocol v0.26.4, gix-revision v0.10.4, gix-refspec v0.7.3, gix-worktree v0.12.3, gix v0.36.1 ([`9604783`](https://github.com/Byron/gitoxide/commit/96047839a20a657a559376b0b14c65aeab96acbd))
- - Compatibility with `bstr` v1.3, use `*.as_bytes()` instead of `.as_ref()`. ([`135d317`](https://github.com/Byron/gitoxide/commit/135d317065aae87af302beb6c26bb6ca8e30b6aa))
- - Release gix-glob v0.5.4 ([`c56d336`](https://github.com/Byron/gitoxide/commit/c56d3365fde21120cf6101cf34f8b5669804977c))
- - Release gix-transport v0.25.5 ([`f872ba8`](https://github.com/Byron/gitoxide/commit/f872ba8271a5d632acc071e7a857ef19f7cf5610))
-</details>
-
-## 0.36.0 (2023-02-17)
-
-### New Features
-
- - <csr-id-4f49992fae2bc60b22644e86808d61afe557f192/> cloning repositories doesn't require a committer anymore.
- This is similar to what git does and probably a decent convenience to have.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 45 commits contributed to the release over the course of 3 calendar days.
- - 4 days passed between releases.
- - 1 commit was understood as [conventional](https://www.conventionalcommits.org).
- - 1 unique issue was worked on: [#737](https://github.com/Byron/gitoxide/issues/737)
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **[#737](https://github.com/Byron/gitoxide/issues/737)**
- - Cloning repositories doesn't require a committer anymore. ([`4f49992`](https://github.com/Byron/gitoxide/commit/4f49992fae2bc60b22644e86808d61afe557f192))
- * **Uncategorized**
- - Release 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 ([`7fc00f8`](https://github.com/Byron/gitoxide/commit/7fc00f87d74aedf631ce4032be1cdfe1804c7e7d))
- - Release 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 ([`59e9fac`](https://github.com/Byron/gitoxide/commit/59e9fac67d1b353e124300435b55f6b5468d7deb))
- - Release 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 ([`48f5bd2`](https://github.com/Byron/gitoxide/commit/48f5bd2014fa3dda6fbd60d091065c5537f69453))
- - 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))
- - Release git-date v0.4.3, git-hash v0.10.3, git-features v0.26.5, git-actor v0.17.2, git-glob v0.5.4, git-path v0.7.2, git-quote v0.4.2, git-attributes v0.8.3, git-bitmap v0.2.2, git-chunk v0.4.2, git-command v0.2.4, git-commitgraph v0.13.1, git-config-value v0.10.2, git-tempfile v3.0.3, git-lock v3.0.3, git-validate v0.7.3, git-object v0.26.2, git-ref v0.24.1, git-sec v0.6.3, git-config v0.16.2, git-prompt v0.3.3, git-url v0.13.3, git-credentials v0.9.2, git-diff v0.26.2, git-discover v0.13.1, git-fetchhead v0.1.0, git-filter v0.1.0, git-hashtable v0.1.2, git-traverse v0.22.2, git-index v0.12.4, git-lfs v0.1.0, git-mailmap v0.9.3, git-note v0.1.0, git-pack v0.31.0, git-odb v0.41.0, git-packetline v0.14.3, git-pathspec v0.1.0, git-transport v0.25.5, git-protocol v0.26.4, git-rebase v0.1.0, git-revision v0.10.4, git-refspec v0.7.3, git-sequencer v0.1.0, git-submodule v0.1.0, git-tix v0.1.0, git-tui v0.1.0, git-worktree v0.12.3, safety bump 2 crates ([`90035a3`](https://github.com/Byron/gitoxide/commit/90035a332d0ba67584558db3605500fbcb424ddd))
- - 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-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 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-worktree` to `gix-worktree` ([`73a1282`](https://github.com/Byron/gitoxide/commit/73a12821b3d9b66ec1714d07dd27eb7a73e3a544))
- - Adjust to renamining of `git-hashtable` to `gix-hashtable` ([`26a0c98`](https://github.com/Byron/gitoxide/commit/26a0c98d0a389b03e3dc7bfc758b37155e285244))
- - 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 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))
- - Fix `gix` changelog (find-replace issue) to indicate renaming from `git-repository` ([`f86b780`](https://github.com/Byron/gitoxide/commit/f86b7803e85839450ed2eeef57fe738da1e3ec87))
- - Release git-features v0.26.4 ([`109f434`](https://github.com/Byron/gitoxide/commit/109f434e66559a791d541f86876ded8df10766f1))
- - Release git-features v0.26.3 ([`1ecfb7f`](https://github.com/Byron/gitoxide/commit/1ecfb7f8bfb24432690d8f31367488f2e59a642a))
-</details>
-
-## 0.35.0 (2023-02-13)
-
-This is the last release under this name and merely a notice to inform that `git-repository` from now on is `gix`.
-
-Furthermore, all `git-*` crates belonging to the `gitoxide` project will be renamed to `gix-*`.
-
-### Changed (BREAKING)
-
- - <csr-id-1408482fd21be7487b46753bb54a018c7a164f34/> a note of the pending rename of `git-repository` to `gix`
-
-### New Features
-
- - <csr-id-069eb6c3f0844b43873ae1bd536e2bca53ff5c8a/> tree diffs with simple rename and copy tracking in cases where there is no additional modification.
- As the fastest way of rename tracking, we now offer support for tracking renames and copies,
- that is a file was renamed or copied without modification.
- - <csr-id-f6ed34aa254d34e596ad027c33f78404a630ff76/> Add `diff.renames` and `diff.renameLimit` keys to config tree.
- In preparation for the implementation.
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 5 commits contributed to the release over the course of 1 calendar day.
- - 2 days passed between releases.
- - 0 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release git-config v0.16.1, git-revision v0.10.3, gix v0.35.0 ([`74390ba`](https://github.com/Byron/gitoxide/commit/74390baf9d177a1abe3c7c35f1d9bc67faba1e97))
- - Show more debugging information if unreachable code is reached. ([`66f5341`](https://github.com/Byron/gitoxide/commit/66f53414efef6cfd6d03f830520964c9bdd23634))
- - Prepare changelogs prior to release ([`446f866`](https://github.com/Byron/gitoxide/commit/446f866d146e255ab8302b89f87bf28f2c5f3733))
- - Merge branch 'rename-crates' ([`6461c3d`](https://github.com/Byron/gitoxide/commit/6461c3da4d6daee857606d94294c3f87fc36965a))
- - Rename `git-repository` to `gix` ([`7bed2a9`](https://github.com/Byron/gitoxide/commit/7bed2a96604397fa990f427b1a970ddeb6f09f1c))
-</details>
-
-## 0.34.0 (2023-02-09)
-
-<csr-id-a01f5d72346c36fdcb77af095273da6f4ab86e21/>
-
-### Documentation
-
- - <csr-id-39ed9eda62b7718d5109135e5ad406fb1fe2978c/> fix typos
-
-### New Features
-
- - <csr-id-297d59e8396fbe2e5a2224a8524fa0778e786773/> add `env::collate::fetch::Error` - a combined error type with its own API.
- This error API allows to look at all the steps it takes to perform an operation and
- gather insights from it which require understanding a lot about the semantics of
- the contained errors.
- - <csr-id-d792ea543246632bf1ca8d0e1d239bbe7f07e219/> use enumerations to advertise progress ids publicly.
- Previously these were an implementation detail which also means they
- couldn't be relied upon.
-
- Thanks to an intermediate enumeration, they become part of the public API
- and their actual value is not exposed.
- - <csr-id-5dc408f726d6f0f480438348eb5d713776329710/> 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 maintained. When written back, the 'link' extension will be removed
- automatically.
-
-### Bug Fixes
-
- - <csr-id-5d3a3a245968d5ad8c29ea11a99b4896d1b41191/> don't panic, but error when parsing the rev-specs `^`, `..`, `...`.
-
-### Chore (BREAKING)
-
- - <csr-id-a01f5d72346c36fdcb77af095273da6f4ab86e21/> adjust to changes in `gitoxide` for clap upgrade to 4.1
-
-### New Features (BREAKING)
-
- - <csr-id-2faad43d11283ff06381c51d2466307cfb8736ff/> transfer knowledge about configuration and its usage into the type system.
- That way it's possible to use configuration overrides, even though ultimately being strings,
- in a type-safe manner and leverage code-completion while at it.
-
- In that process, we also change `Repository::(committer|Author)()` to return
- `Option<Result<...>>` to be able to account for date parse errors.
-
-## 0.33.0 (2023-01-10)
-
-<csr-id-dd7f3bf19cce0d214924fa86aeb4c5823f5bcc02/>
-
-### Chore (BREAKING)
-
- - <csr-id-dd7f3bf19cce0d214924fa86aeb4c5823f5bcc02/> upgrade MSRV to v1.64 (possible due to `windows` upgrade)
-
-## 0.32.0 (2023-01-09)
-
-<csr-id-80dcb406c5f588122531da115398094de3c3af79/>
-
-### Bug Fixes
-
- - <csr-id-a05b1c4d82bc6c7758989a3bbe326ea610903820/> default author and committer time
- When needing to fallback to a default author or committer signature, the
- time from GIT_AUTHOR_DATE should only be used for the author and
- GIT_COMMITTER_DATE should only be used for the committer and not
- intermixed. This change enforces that constraint.
- - <csr-id-ec7bf71b60f8c1e7529d610557c0305d624c1253/> signature name and email resolution
- The name and email for the author and/or committer may come from different
- config files. For example, user.name may be set in the global config and
- user.email may come from the repository local config.
-
- This case was broken due to Personas.from_config_and_env() only looking in
- the last config section containing, for example, a "user" section. Thus if
- the user.name and user.email are split across multiple sections (i.e.
- originating from separate config files), the fallback name and email
- ("gitoxide" and "gitoxide@localhost") would be used.
-
- The solution is to use gix_config::File::string() to lookup the name and
- email separately. The string() method correctly resolves the value by
- looking through all sections from all files in the correct order.
-
-### Other
-
- - <csr-id-80dcb406c5f588122531da115398094de3c3af79/> name and email from different config sections
- The user.name, user.email, author.name, author.email, committer.name, and
- committer.email configuration may come from different sections from
- different config files. This new test exercises a couple of scenarios that
- are currently broken.
-
-### Reverted (BREAKING)
-
- - <csr-id-87abb51596bd0a5a6b552a5de98a920d6c797e3c/> `committer_or_default()`, `author_or_default()` and `user_default()`.
- This means that all methods that previously succeeded by adding a default
- will now fail.
-
- This is preferable over 'doing something' and also admits that gits
- guesswork that tries to find user information by querying the system
- is nothing we want to repeat.
-
-## 0.31.0 (2022-12-30)
-
-<csr-id-9fabfc50007603f9c1f7e70b5bb79a39726b12af/>
-<csr-id-91720798889ee7eb26da03a9e732caedda83b3e3/>
-
-### New Features
-
- - <csr-id-d48b9a7ae2d51676c7549377bcb0b9d3baa83681/> fetching `ssh` urls can ask for a different username.
- If authentication fails, the user will be queried for a different username
- to try authentication via ssh mechanisms again.
- - <csr-id-61d89f586a0ad913fc2f502520282520a5e1fd15/> collect ssh-specific options to control how the ssh program is invoked.
- These are passed through when creating the ssh transport.
-
-### Other
-
- - <csr-id-9fabfc50007603f9c1f7e70b5bb79a39726b12af/> explain how it's possible to deal with the first commit when comparing trees
- The reason the other tree isn't an option is that it's a special case that can more easily be handled
- with an `.unwrap_or_else(|| repo.empty_tree())` (or similar) for those who need it.
-
- Making the empty tree explicit also helps to deal with diffs from the empty tree (which can't be `Option<Tree>`)
- to the first tree of the first commit.
-
-### Chore (BREAKING)
-
- - <csr-id-91720798889ee7eb26da03a9e732caedda83b3e3/> upgrade to prodash v23
-
-## 0.30.2 (2022-12-26)
-
-<csr-id-114f184855b6177aa1f0dbf6e6589f23deb5ffe6/>
-
-### New Features
-
- - <csr-id-38ae61a805bd8cca5df8d1c1dcf3a8a0f9c85f5a/> make more HTTP options available
- - `http.schannelCheckRevoke`
-
-### Other
-
- - <csr-id-114f184855b6177aa1f0dbf6e6589f23deb5ffe6/> provide a repository clone example
-
-## 0.30.1 (2022-12-22)
-
-### New Features
-
- - <csr-id-ca84c87734804cbfc65e311b89ff6ccfc236149c/> `open::Options::open_path_as_is()` allows to avoid 'smart opening' to try the path verbatim.
- The path to git repositories is well-known as they either end in `.git` or `.../.git`.
- If this is not the case, by default we append `/.git` to the path.
-
- With this new option enabled, no path transformations apply to open the given path as is,
- which is preferable if you know it's a non-standard git repository folder name.
-
-## 0.30.0 (2022-12-19)
-
-<csr-id-fceee748c114b2d0760074e911e533cd020f6996/>
-
-### Changed
-
- - <csr-id-a4ac9cf3e667a3059e33aac8188150529578622d/> represent `GIT_(COMMITTER|AUTHOR)_(NAME|EMAIL|DATE)` with git configuration.
- That way it becomes more obvious where values are coming from.
-
-### New Features
-
- - <csr-id-1683a848459cae2b9182b365e3e22b0e8ba73534/> expose `gix-features` crate at root under `features`.
- That way application developers can use more of the utilities
- that power most of the `gitoxide` plumbing crates.
- - <csr-id-90ef6fc36b440cc4baf3fde4a30060f1b4a0c8cf/> `Remote` knows about its `tagOpt` configuration.
- That way it's clear if it should or shouldn't fetch included/reachable
- tags automatically.
-
- The default setting for this is to include tags, similar to `git`.
-
- The `fetch_tags()` accessor allows to query this information, and the
- `with_fetch_tags()` builder method allows to set the value comfortably
- right after creating the `Remote` instance.
-
- The `tagOpt` key will also be written as part of the remote's git
- configuration.
-
- Clone operations can set the `Tags` setting when configuring the
- remote in a callback.
-
- This also comes with a fix to assure that ref-updates aren't skipped
- just because there was no pack to receive. That way, locally missing
- refs or tags will automatically be put back.
- - <csr-id-28e48083052216ddf1fd1f187cc22d506d3d9f86/> network related Error type support `is_spurious()` method.
- That way the caller can determine more easily if it makes sense
- to try again.
- - <csr-id-457c2e081b1aa5dfaab3f663b9aba66c16369939/> Make `prodash::tree` available as `progress::tree`.
- - <csr-id-d1b7ec605f8016c52c088477b6b0c5adf7ea0ab2/> read worktree specific configuration to override the one from the shared repository.
- This is intensively used when space checkouts are created, along with
- Cone mode. Thus it's the basis for properly interpreting sparse checkout
- options which are set on a per-worktree basis.
- - <csr-id-fc64693d5af0fda402c560d10d15652c24d14219/> add `permissions::Environment::http_transport`.
- That way it's possible to deny using environment variables that affect
- the HTTP transport, like setting the proxy.
- - <csr-id-0ce29a965cf16273cf74bd22e40f464e322e2f62/> `open::Options::modify()` as general pattern to allow builder methods usage in `&mut self`.
- That way it's easier to configure both the `full` and the `partial` trust instances
- of discovery options.
- - <csr-id-8482f90d0a2b61259cd51ca4f40ce322e388cb34/> Add `Repository::commit_as(committer, author, …)` convenience method.
- That way it's, very much beyond convenience, possible to set the time
- of a commit.
-
- Many thanks to @epage for the suggestion.
- - <csr-id-c8835c6edae784c9ffcb69a674c0a6545dbb2af3/> upgrade to `prodash 21.1` and add `Ids` to all progress instances.
- That way callers can identify progress they are interested in, say, for
- selective visualizations.
-
-### Bug Fixes
-
- - <csr-id-d659bda2e1b0fcab529df7af6467f063ae5d0dd7/> provide a clearer error message when trying to open a git repository that isn't one.
- - <csr-id-ff0332e815c228cc5cdfe58c3598ad261bb2879e/> http transports can now reuse a connection.
- This makes connections more efficient generally and `cargo` relies
- on that behaviour in their tests as well.
- - <csr-id-9079b9d2e5f7cc133c6f2b2c2e64245b150c7d74/> allow to open a `Repository` from if 'config' file is missing.
- In this case, treat it similar to having an empty repository configuration
- file and assume defaults everywhere.
- - <csr-id-40f7379b7a89f7fe6f916801384e9e65e5b85c57/> improve error verbosity when fetching and cloning
- - <csr-id-b77fc86ab580dd81b08022996f07cc7925104e77/> `tree::diff::Platform::for_each_to_obtain_tree()` now properly surfaces user provided errors.
- Previously it would squelch them unintentionally.
-
- First discovered via https://github.com/Byron/crates-index-diff-rs/issues/35.
- - <csr-id-5386eed6a13a32a850c59706b15d8988c67733ce/> when fetching from file://, don't upset windows by trying `d:/foo`, use `d:\\foo` instead.
- - <csr-id-363ac7a74ec841505b5fc7cc1b8fae11c0a63ea9/> `config::CommitAutoRollback` now implements `DerefMut`.
-
-### Changed (BREAKING)
-
- - <csr-id-3c84cebc5997356ff5f531c6cc9567bdd9b83eb5/> default features are set to `max-performance-safe` to assure compatibility.
- Previously the `max-performance` setting might have caused issues during compilation
- or issues at runtime if libraries like `git2` are used in the same binary, and the
- new default feature settings maximizes compatibility so this won't happen.
-
- For best performance, however, one will have to activate the `max-performance`
- feature on top of that.
- - <csr-id-5fe6aa3f3f2f81d84f0d96e874e68a8bf4de1db1/> environment variable permissions are per topic.
- Now `Permissions` for environment variables are so that they
- are by topic instead of by prefix, by default. That way
- it's easier to allow or deny particular sets of related
- environment variables.
-
- The catch-all permissions by prefix are still present for all
- other variables that aren't contained in one particular topic.
- - <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.
-
-### New Features (BREAKING)
-
- - <csr-id-f8a2bfb93dadbc64393135e0a447f3d76628509c/> `interrupts::init_handler()` can now be undone.
- This can be done by calling `deregister()` or `auto_deregister()` on the return value
- of `interrupts::init_handler(…)`.
-
- That way it's possible to temporarily do interrupt handling only while some methods
- that require it are running.
- - <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-id-f16e36168cc93768ba5d53c9848ff2e8432d06b1/> remove `SnapshotMut::apply_cli_overrides()` in favor of `open::Options::cli_overrides()`.
- - <csr-id-84d594caf3f04f1ce337e455343278a6f4674957/> more type-safety for remote names by making clear they can be named after URLs.
-
-### Other (BREAKING)
-
- - <csr-id-fceee748c114b2d0760074e911e533cd020f6996/> `Remote::with_refspec()` to `Remote::with_refspecs()` to allow adding more than one refspec as part of the builder.
-
-## 0.29.0 (2022-11-21)
-
-<csr-id-f302fc1bcd06fadccd126f4f5f9c0165afabedda/>
-
-### New Features
-
-<csr-id-ff9e1571b558475e727dc6ba11dab24ef15fb6f4/>
-
- - <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…
-
- * blocking-http-transport-reqwest-rust-tls
-* blocking-http-transport-reqwest-native-tls
-
-### Bug Fixes
-
- - <csr-id-c6a690219915b2b401d2d11f61db35b2931e5b3a/> `gix::Commit::describe()` chooses tag names (more) correctly.
- Previously, if there were multiple choices for tags on the same commit,
- `git describe` would disagree with `gitoxide` due to different
- prioritization of names.
-
- This has now been fixed.
- - <csr-id-84ed89c3bf6692f18c4bb97173527de1bcba7ac6/> also sort entries lexicographically
-
-### Other
-
- - <csr-id-f302fc1bcd06fadccd126f4f5f9c0165afabedda/> Set GIT_EDITOR in make_rebase_i_repo.sh
- If the user has core.editor set in their global git config, then that value
- takes precedence over the EDITOR environment variable. The GIT_EDITOR
- environment variable, however, has higher precedence than core.editor. For
- this test, using GIT_EDITOR ensures that the desired sed command line is
- used.
-
-### New Features (BREAKING)
-
- - <csr-id-bc2a399f2fbb69d23b0b05e8dfb95f3c64ff93b9/> rename `blocking-http-transport` feature to `blocking-http-transport-curl`; add `blocking-http-transport-reqwest`.
- With the new and relatively immature second tier http backend we pave
- the way to support builds without the use of open-ssl and probably many
- other C libraries.
-
- Note that it's early and not `http` configuration option is implemented
- yet.
- - <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.28.0 (2022-11-17)
-
-<csr-id-6beb6f263fd40884b440092f39034dd43d3a95de/>
-
-### New Features
-
- - <csr-id-58e14884b1d025651f874d899cb2d627c4a2afbf/> `Id` implements `std::fmt::Display`
- - <csr-id-25f7aabe38267b6b6c0547806028b2becb806416/> `Remote::repo()` to obtain the underlying repository.
- For convenience.
- - <csr-id-709a73229b7cde56ddffa099158661632c606468/> Support for user-customizable user agent strings.
- Doable by setting the `gitoxide.userAgent` variable.
- - <csr-id-e60d07997989993216c2bd93efeb6f1b48da0a87/> add `env::agent()` for obtaining the default client agent string.
-
-### Other
-
- - <csr-id-6beb6f263fd40884b440092f39034dd43d3a95de/> try to apply maybe-async in a place where it's probably not possible.
- The goal is to re-use the existing tests, but right now they only
- compile in async mode as the `maybe-async` crates needs
- a feature to be set. Doing so is hard(er) if it's not already used
- in the main crate, which we do not and will do our best to avoid.
-
-### New Features (BREAKING)
-
- - <csr-id-db9040f0bb3a16879c8da0252a77df80bd417387/> add `remote::Connection::with_transport_config()`, change the way `*::transport_mut()` is used.
- Previously `transport_mut()` was supposed to be used for calling
- `configure()`, but that doesn't work anymore as `configure()` can
- only effectively be called once the initialization of the Connection
- is complete, as it may depend on the Remote name AND the credential
- provider for proxy auth credential acquisition.
-
- Thus we allow callers to set the transport options they need in advance
- for it to be used when needed.
-
-## 0.27.0 (2022-11-08)
-
-### Changed (BREAKING)
-
- - <csr-id-c50868c7ed7309515b4f0a188213d332d57dd146/> Move `object::tree::diff::change::DiffPlatform` to `object::blob::diff::Platform`.
- - <csr-id-4ee32713093c2e41a12d148c6030add1df6aa966/> new `DiffPlatform::counts()`, open `DiffPlatform` for use of `gix-diff::blob::*`.
-
-## 0.26.0 (2022-11-06)
-
-<csr-id-c6f92c15529ddff7539667b74bafa2348f3040e3/>
-
-### New Features
-
- - <csr-id-b1edb9e3537df86669714f03666f4a88e0ac3709/> diff algorithm is controlled by git configuration `diff.algorithm`
- - <csr-id-072f5bc9c91c4c09bd6a73f9d7ac672805cae533/> Query of `core.logAllRefUpdates` is now fallible.
- This is the same behaviour as shown by `git`, which requires valid
- values or aborts.
- - <csr-id-2eaf69e5f8f8da10e5af85cb9f0c39577ad1707f/> automatically handle `.keep` files after writing a pack bundle to disk.
- The logic implemented here tries to do the right thing, that is when
- we have reason to believe that the objects in the pack are linked up
- with a ref, we delete the keep file automatically.
-
- However, if there was no local ref edit as the ref specs didn't contain
- local destinations, or if the pack was empty, then keep the .keep file
- and leave it to the caller to handle.
- - <csr-id-8b9fbd4e9ed7be37976c7203cd9a89c6116a6d3d/> Use `core.askpass` when building the credential helper.
- Previously it would only consider the environment variable, which can
- still override the provided git-configuration at core.askpass .
- - <csr-id-a9d14492322785a14f4ecb5b0d3dbdc87e56f8c5/> `remote::fetch::Prepare::handshake_outcome()` to obtain server information right after listing refs.
- - <csr-id-0b5c53ec43bdb58b2b7cf46e453ddf858770a95a/> `open::Options::config_overrides()` for early configuration; support for `init.defaultBranch`.
-
-### Bug Fixes
-
- - <csr-id-f869b224170b0c49a0e4d89e88bfbf5caedaa725/> don't allow non-bare repositories to be initialized into non-empty directories.
- - <csr-id-91baefad02a0d52c745106359da3693d06aace46/> `init_bare()` now creates the destination directory if it doesn't exist.
- - <csr-id-5c11b84f4e74e3eefdd0f5804976ebfc505e0f2f/> build correct path for `$HOME/.config/…` files.
- The special per-user `ignore` and `attributes` files can also be
- defaulted if some environment variables are set and may be accessed.
-
- Previously the default for `$HOME` was incorrect, as it was missing the
- intermediate `.config/` directory. This is now present to build paths
- exactly like git.
- - <csr-id-275e80f3d602b63ef91efe31a92b4aafb2eeca44/> ref-map filtering now uses correct prefixes.
- Previously specs could get filtered out server-side as a matching prefix
- was entirely missing.
-
-### Changed (BREAKING)
-
- - <csr-id-449ff066d2b5dd423c639618193dd9e54d03c1f8/> `Repository::branch_remote_name()` returns `reference::remote::Name`.
- That way it's made clear the remote can also be a URL, while rejecting
- illformed UTF8. The latter isn't valid for remote names anyway as these
- only support a very limited character set.
-
- Note that this error currently is degenerated, making it appear if the
- remote name doesn't exists if illformed UTF-8 is found in what appears
- to be a symbolic ref.
- - <csr-id-71f15fc46fbaea455cf84a2b4cfe3e680047d790/> be specific about the kind of `diff::Error`, moving it to `diff::for_each::Error`.
-
-### New Features (BREAKING)
-
- - <csr-id-7413a284eb7754e63ba45d0f526347b9f79b557d/> `Tree::lookup_entry*()` returns attached `Entry` type.
- That way chaining gets even easier.
-
-### Bug Fixes (BREAKING)
-
- - <csr-id-2bece79285e244a7029f9393dafc990e39420e2d/> `create::into(…)` takes `create::Kind` to determine if it's bare or not.
- First of all, `bare` is not an option anymore, but a parameter as
- it can't be defaulted.
- Other public signatures change as well to accommodate for it.
-
-### Other (BREAKING)
-
- - <csr-id-c6f92c15529ddff7539667b74bafa2348f3040e3/> `DiffPlatform::text()` to `*::lines()`.
- This is more specific as one could also do character changes in a single
- line, and it adapts the signature to the new `imra-diff` powered
- mechanism, for a 2x speed boost.
-
-## 0.25.0 (2022-10-10)
-
-<csr-id-5bef0a00e8d01110c054a517f6d9696f981a7efc/>
-
-### New Features
-
- - <csr-id-22d3b37ea6239170a478b859361a7d1d7ba01a9a/> `Url::try_from(path: &std::path::Path)` for more convenient instantiation.
- - <csr-id-31a7089f2583832727e2175ada6fb5c30c3beebe/> make some private methods public to give callers more flexibility.
- This allows to implement the fetch-negotiation part oneself and break
- free from constraints of the delegate.
- - <csr-id-4367994a8a7476eb44e1309e833e345fdb78f246/> add `config::SnapshotMut::commit()` to make clear it's transactional.
- - <csr-id-d2bea003230078ffb4e6cd80d1b01c3995435a34/> add `config::SnapshotMut::forget()` to forget all changes before applying them.
- The documentation was update to make clear when the changes are applied.
- - <csr-id-4b1e3b3d91c51da3dbea9191e60f959a1266cf47/> add `Repository::find_default_remote()` which works on detached heads as well.
- - <csr-id-25f06400c49ddd1688fd76f9285542b121b223b4/> `Remote::rem_map()` now specifies ref-prefixes to the remote.
- This can greatly reduce the amount of refs sent.
-
-### Other
-
- - <csr-id-5bef0a00e8d01110c054a517f6d9696f981a7efc/> try to make the transport configurable after being boxed, but…
- …that would force it to be 'static, which is something we explicitly
- cannot have. We need references to be contained within, if I remember
- correctly.
-
-### Changed (BREAKING)
-
- - <csr-id-e88de0f948325773db1925b07aa878e1dbb76bad/> All methods editing references don't take the author as parameter anymore.
- Instead, these are taken from the git configuration and can be
- configured on the fly with temporarily altered configuration.
- - <csr-id-3a0fb1b45c757add49677450836c0aaf6179a2b5/> remote `lock_mode` from all methods dealing with reference edits.
- It is now read from `core.filesRefLockTimeout` accordingly.
-
-### New Features (BREAKING)
-
- - <csr-id-3b29fc18672c0176684c797a0f16f85d09369bf8/> make jwalk fully optional
- - <csr-id-78ad3df64f2c016ba17b158bd9ab1d2341aab399/> add `fetch::Transport::configure` to generically configure any transport.
-
-## 0.24.0 (2022-09-20)
-
-<csr-id-f5959edc1477573278afcfe23e9e52ddaacb37db/>
-<csr-id-79c22557ce0aea1ee8f3a58192c2c76087ccd3d8/>
-
-### New Features
-
- - <csr-id-0871a96b9cc84d7a496d39393e081999c0a3fe17/> `Object::peel_to_tree()` as convenience method.
- It's very common to try to work with trees, so let's make that easier.
- - <csr-id-1027be960852618915014f9ba6e6632bd4999b0e/> `interrupt::Iter` now allows accessing the inner iterator without consumption.
- This is useful if these provide additional out-of-band information.
- - <csr-id-8c2e5c60f9f5f8d0859ecd84c17af20e88812512/> Once a change is obtained, it's easy to obtain changes line by line.
- - <csr-id-7e96d1841989b37133cddf334724a2d6df557e69/> obtain a refmap after listing refs via `remote::Connection::list_refs_to_map()`.
- With it it's possible to establish a relationship between what's about
- to be fetched to local tracking branches as established by refspecs for
- fetching.
- - <csr-id-d51e7c901fe5ed60d5dd56006c5faedb71cad537/> Add `permissions::Config::git_binary` field
- When true, default false, inject the git installation configuration file
- if present at the cost of one `git config` invocation.
-
- Note that we rely on the underlying `gix-config` crate to not load
- duplicate files.
-
- We also currently lie about the scope which is actually unclear - have
- seen 'unknown' or normal scopes like `system`.
- - <csr-id-1c13f1125664fbcc276a1ca440d168d07d0bf493/> add `prompt` to top level forwarding #450)
-
-### Bug Fixes
-
- - <csr-id-ae3866065c9c3c6d01709f8dde1cea1ae1345779/> rev-spec parsing can now handle the empty tree as full hex hash.
- Even though the empty-tree object can be found when searched via
- `Repository::find_object()`, previously it was not locatable when
- used during rev-spec parsing.
- - <csr-id-74ede2031d1beedf11f1cdf006fff71e597a2cb5/> `Reference::remote()` can produce remotes for URLs
-
-### Refactor
-
- - <csr-id-f5959edc1477573278afcfe23e9e52ddaacb37db/> use specific error type for `rev_parse_single()`
-
-### Changed (BREAKING)
-
- - <csr-id-99905bacace8aed42b16d43f0f04cae996cb971c/> upgrade `bstr` to `1.0.1`
-
-### New Features (BREAKING)
-
- - <csr-id-2992b1ba4e7bbeab26f41175cd31fd664abf2a11/> Add reference remote name type to make usage of `remote_name()` result clear
-
-### Other (BREAKING)
-
- - <csr-id-79c22557ce0aea1ee8f3a58192c2c76087ccd3d8/> `Tree::lookup_path()` -> `Tree::lookup_entry()`.
-
-## 0.23.1 (2022-09-01)
-
-### Changed (BREAKING)
-
- - <csr-id-36d8c57824a2b921012439105e49261fac66c955/> Remove 'unstable' feature.
- It's not worth maintaining it especially since everything is in
- pre-release mode right now.
-
- It might be something to re-introduce after go-live.
-
-### Bug Fixes
-
- - <csr-id-d18e76cfb512ef7fe5bfee6e87726372c6a4a8b6/> `max-performance-safe` mode does not include zlib-ng adjustments anymore.
- git2 cannot handle this and fails to fetch packs after a couple of
- seconds.
-
- It's unclear what is causing this except that git2 doesn't like libz
- with zlibng support enabled, which happens if git2 in the
- same tree is with us.
- - Transitively through a kindly contributed fix in the `gix-discover` crate, `Repository` can now be opened on `exFat` volumes.
-
-## 0.23.0 (2022-08-28)
-
-### New Features
-
- - <csr-id-70aa850591de268488ae9bf2d3839a5c9c543c35/> The empty tree can always be returned by `Repository::(try_)find_object()`
- This matches the behaviour of git and libgit2.
- We consciously chose to only do this on the highest level, allowing lower
- levels to determine if the object exists or not.
- - <csr-id-8d0786646e17a82d20ca6b2799b54f6349d389f4/> Make `find::object::*::Error` publicly available.
- - <csr-id-2d0b63997b276a53b3cf8f09fac51f8e3f044bcd/> Add `Reference::delete()` for simple reference deletion
- - <csr-id-9170562059c3eaa529850025ef35ac5ffffc0fdf/> `Reference::set_target_id()` to easily set the target id of a reference
- - <csr-id-950da602925e6376b08640ed3ebfdf407394db34/> `Reference::head_ref()` to quickly access the reference the head points to.
-
-### Bug Fixes
-
- - <csr-id-2834311b4f262c57e76627addaa4932196fd26b3/> `Commit::tree_id()` now returns a connected id
-
-### New Features (BREAKING)
-
- - <csr-id-e090f843f5cffc8e8e47a8cac2e6fb98e4c47771/> `gix-diff` is now included by default as part of core functionality
-
-## 0.22.1 (2022-08-24)
-
-A maintenance release without user facing changes.
-
-## 0.22.0 (2022-08-24)
-
-<csr-id-f7f136dbe4f86e7dee1d54835c420ec07c96cd78/>
-
-### Chore
-
- - <csr-id-f7f136dbe4f86e7dee1d54835c420ec07c96cd78/> uniformize deny attributes
-
-### New Features
-
- - <csr-id-c28bcec19b5526acf888f928e6ddc4671873368e/> support avoiding usage of `fast-sha1` in gix-features separately.
- That way one has an angle on compile failures in client libraries,
- see https://github.com/o2sh/onefetch/pull/752 for motivation.
- - <csr-id-4f87a0672f7288486a9b6403c0bb07a6279d2cfe/> `Repository::write_blob[_stream]()` to more easily write blobs.
- That way, one won't have to use the underlying `objects` database but
- can remain in the land of `Repository` enabled types for longer.
- - <csr-id-d35cd2a12c6db3d655ce10cad5c027bde99e19b4/> `SnapshotMut::apply_cli_overrides()` to make it easy to support things like `-c`
- - <csr-id-2a839f3209f3bd35e0c0f7edff664cc953059f65/> `Repository::config_snapshot_mut()` to mutate configuration values in memory.
- It's a first step towards writing changes back to disk, which can work
- already, but probably wouldn't as we currently don't localize changes
- to only one section type, i.e. Api, but instead may change values
- from other sections.
- - <csr-id-b1c40b0364ef092cd52d03b34f491b254816b18d/> use docsrs feature in code to show what is feature-gated automatically on docs.rs
- - <csr-id-517677147f1c17304c62cf97a1dd09f232ebf5db/> pass --cfg docsrs when compiling for https://docs.rs
-
-### Bug Fixes
-
- - <csr-id-ff71730b4e3635533d9969d9dd44c0f3c75c6648/> Don't fail worktree tests if the system's git version is not supporting required features
-
-## 0.21.1 (2022-08-19)
-
-A maintenance release that speeds up `commit.describe()` performance if `max_candidates()` is 0.
-
-## 0.21.0 (2022-08-17)
-
-<csr-id-b38a212459e2646ab97ad7b5c24e54d962aae960/>
-
-### Changed
-
- - <csr-id-0235111a4fcc40c7b57d973bfce27a66eddea901/> Invert behaviour to `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.
-
-### New Features
-
- - <csr-id-a01525d159a33d6ad60a5324f2e9abbbe17fcfad/> `Kind` can now represent submodules.
- This should complete the list of git repository types and flavors.
- - <csr-id-5dac021bbbc5621167e7f49d62b11f68f76e42b6/> `open()` and `discover()` support opening submodules.
- This includes submodule checkouts as well as their original module git
- directories.
- - <csr-id-067c3342f3564dd7f152a720e93e3aa590ae6524/> `open::Options::lenient_config(…)` to default otherwise invalid configuration values where possible
- Originally required by https://github.com/starship/starship/issues/4266 .
- - <csr-id-0bf8371706d319681c3f794af5cd13f2f50a27d0/> support core.worktree option
- - <csr-id-b47bbb787ef2e31dd2612a56f9e7759ef8a188b8/> display for `object::tree::EntryRef`
- - <csr-id-727768a49c41165b03ddcdbc71ca88b66c330f32/> `Head::prior_checked_out_branches()`
- - <csr-id-ffe72918baf5c4c9f0f3709f75f068a663778588/> `Repository::index()` and `Worktree::index()`.
- These methods provide a possibly updated shared index.
- - <csr-id-47619f7c06a49dcf60a30e1a43a5352914183092/> add `Repository::object_cache_size_if_unset()`
- - <csr-id-d2611cee61841bc7bd978bef5af7dc66154248a2/> `Commit::message_raw_sloppy()` to provide yet another way to obtain a commit message.
- - <csr-id-906c95845fa4aa2d4390c522bb566a188b8c0e78/> add `rev_spec::parse::ObjectKindHint` to support `core.disambiguate`.
- The latter is seemingly undocumented in the typical place, gix-config.
- - <csr-id-ef187f0180d89544d9015cbc2bc03d8cb51f4615/> `Remote::with_refspec()` to add new unique refspecs
- - <csr-id-d51ba42c643d8ee03a3c6b648f8524ff04827170/> `Remote::push_url()` to set it after the fact
- - <csr-id-9b07b91ad065836e7473df6635025659af2865ee/> `Repository::remote_at(…)` to create an unnamed remote
- - <csr-id-a67fc26b80e5d1183ddc5c6598396214f3e19945/> more conversions for `TryFrom`: `String` and `&str`
- - <csr-id-7a512ecdf236afc0b3d562d60fa81ab62c00cd9d/> `Head::into_remote()` to try really hard to find the correct remote
- - <csr-id-f392f26bec6069ac43ecd461b4f50e0def8b8972/> `Repository::remote_default_name()` to obtain the repo-wide remote for a a direction.
- - <csr-id-f47464f64f7c21500a24f563b25a8fc070c41778/> `Repository::branch_names()` to obtain branch names for which configuration exists.
-
-### Bug Fixes
-
- - <csr-id-be6114e7c4ac48467db6acb2180b443dc9f59f32/> assure permissions per trust level are properly inherited into `open::Options`.
- - <csr-id-270242c707bd086b7746ee45b55791587f1484b1/> provide additional explanation about when to use `open::Options::with()`
-
-### Refactor
-
- - <csr-id-b38a212459e2646ab97ad7b5c24e54d962aae960/> embrace `revision` module and move `rev_walk` there.
- Let's embrace the idea of structured modules and platforms in the right
- spot in the module hierarchy instead of forcing known names on it that
- over-simplify.
-
-### Changed (BREAKING)
-
- - <csr-id-0deda0df55c11647f51374ed5a8bf11c932e2bae/> remove `permissions::Config::strict()` as they were unused internally.
- Furthermore, they were allowing everything as before so better not to
- have it.
- - <csr-id-1c12d49eefa6d79ef50b2960f41b29de680ac8eb/> rename `Repository::load_mailmap*` to `Repository::open_mailmap*`.
- For consistency with other similar methods.
- - <csr-id-ea35183b53f2ff71bdf2270ac4f7470a85d7756f/> remove `Repository::load_index()` in favor of `repo.worktree().open_index()`.
- - <csr-id-4fd096840ba27da6ce86678a85ede33e3be974ff/> `gix_revision` is now available in `revision::plumbing`.
- That way it won't clash with the higher-level constructs on top of it
- which use the same names.
- - <csr-id-2424957cff75daacf6f6f14f74b9639f6875c4fb/> Turn `id::Ancestors` into general-purpose `RevWalk`.
- - <csr-id-1df379ab0046887a330c0a670ad0414e79cfae7b/> remove `Permissions::git_dir` field entirely.
- It was meant to help dealing with bailing out if the git dir isn't
- fully trusted, but the way this was done was over-engineered especially
- since the read-only permission level wasn't implemented at all.
-
- That function is now performed by a new flag, the `bail_on_untrusted`
- which is off by default.
- - <csr-id-5ab81ece15ec802ad4328ce31304233bd25b2929/> rename `Repository::remote_ref()` to `::branch_remote_ref()`
-
-### New Features (BREAKING)
-
- - <csr-id-e2aff28e818951785d933f4b55b2f1b882729cb6/> `Repository::rev_parse()` returns a `RevSpec`.
- This lays the foundation for actually handling rev-specs faithfully.
- Previous users should use `rev_parse().single()` to obtain a single
- object id which was the only supported usecase previously.
-
-### Bug Fixes (BREAKING)
-
- - <csr-id-c68b125a46f666700cdbda6f8cd39a044f4feb1b/> Don't panic for `@{1}` in new repos; rename `Head::into_referent()` to `::try_into_referent()`
- The signature change will prevent such issues in the future as one
- cannot simply ignore new repositories.
-
-## 0.20.0 (2022-07-22)
-
-### New Features
-
- - <csr-id-1b765ec6ae70d1f4cc5a885b3c68d6f3335ba827/> respect `safe.directory`.
- In practice, this code will rarely be hit as it would require very
- strict settings that forbid any operation within a non-owned git
- directory.
- - <csr-id-840d9a3018d11146bb8e80fc92693c65eb534d91/> permissions for configuration.
- It provides fine-grained control over what sources to load.
- - <csr-id-657080829867d9dcb0c9b9cb6c1c8126c4df3783/> `gix-config` is now accessible in `git-repository::config`.
- - <csr-id-d99453ebeb970ed493be236def299d1e82b01f83/> `gix config` lists all entries of all configuration files git considers.
- Filters allow to narrow down the output.
- - <csr-id-ebedd03e119aa5d46da07e577bfccad621eaecb5/> repository now initializes global configuration files and resolves includes
- - <csr-id-de8572ff2ced9422832e1ba433955c33f0994675/> resolve includes in local repository configuration
- - <csr-id-d5a48b82230b047434610550aacd2dc741b4b5f0/> `config::Snapshot::trusted_path()` to obtain trustworthy paths.
- We also apply trust-based config query during initialization to assure
- we don't use paths which aren't owned by the current user.
- - <csr-id-5f9bfa89ceb61f484be80575b0379bbf9d7a36b3/> `Repository::config_snapshot()` to access configuration values.
- - <csr-id-7f67b23b9462b805591b1fe5a8406f8d7404f372/> Use `gix-config` to write config file on initialization, including `logallrefupdates` and `precomposeunicode`.
- - <csr-id-e263e13d312e41aa1481d104fa79ede509fbe1c5/> respect `core.logallrefupdates` configuration setting.
-
-### Changed (BREAKING)
-
- - <csr-id-68f4bc2570d455c762da7e3d675b9b507cec69bb/> Make `SignatureRef<'_>` mandatory for editing reference changelogs.
- If defaults are desired, these can be set by the caller.
- - <csr-id-f932cea68ece997f711add3368db53aeb8cdf064/> `Repository::committer()` now returns an `Option`, see `::committer_or_default()` for a method that doesn't.
- - <csr-id-89a41bf2b37db29b9983b4e5492cfd67ed490b23/> remove local-time-support feature toggle.
- We treat local time as default feature without a lot of fuzz, and
- will eventually document that definitive support needs a compile
- time switch in the compiler (`--cfg unsound_local_offset` or something).
-
- One day it will perish. Failure is possible anyway and we will write
- code to deal with it while minimizing the amount of system time
- fetches when asking for the current local time.
- - <csr-id-6f4eea936d64fb9827277c160f989168e7b1dba2/> Associate `file::Metadata` with each `File`.
- This is the first step towards knowing more about the source of each
- value to filter them based on some properties.
-
- This breaks various methods handling the instantiation of configuration
- files as `file::Metadata` typically has to be provided by the caller
- now or be associated with each path to read configuration from.
-
-### New Features (BREAKING)
-
- - <csr-id-d003c0f139d61e3bd998a0283a9c7af25a60db02/> Support for `lossy` load mode.
- There is a lot of breaking changes as `file::from_paths::Options` now
- became `file::init::Options`, and the same goes for the error type.
- - <csr-id-311d4b447daf8d4364670382a20901468748d34d/> change mostly internal uses of [u8] to BString/BStr
-
-## 0.19.0 (2022-06-13)
-
-### New Features (BREAKING)
-
- - <csr-id-266d4379e9132fd7dd21e6c8fccb36e125069d6e/> Make `realpath()` easier to use by introducing `realpath_opt()`.
- That way there is consistency about how many symlinks to follow.
-
-## 0.18.1 (2022-05-23)
-
-### New Features
-
- - <csr-id-c78baecbb37fd92a0a86231810c9e35e9a4c21cd/> `Debug` for `Reference`.
-
-## 0.18.0 (2022-05-21)
-
-<csr-id-e63e722791a7795cd99048bed834459595c60abc/>
-
-### Other
-
- - <csr-id-e63e722791a7795cd99048bed834459595c60abc/> add ceiling_dirs option to upwards discovery
-
-## 0.17.0 (2022-05-18)
-
-<csr-id-53c06c7e6a3003b34edaab10db1f158e2fb57403/>
-<csr-id-e4f4c4b2c75a63a40a174e3a006ea64ef8d78809/>
-<csr-id-da8059ce26343c8cd275f43c879d98c92f77fa51/>
-
-### New Features
-
- - <csr-id-45920da7c8c5618c6e7258de08dbd633a637d017/> Add `Repository::head_name()`.
- A convenient way to obtain the name of a head, if not detached.
-
-### Bug Fixes
-
- - <csr-id-a1680b44ef568317465d2971da6e0930f9885530/> `Commit::describe()` now returns annotated tags before lightweight ones and prefers more recent ones as well
- - <csr-id-99365f221065ebc315ac80940ad72cae253743bc/> Support for in truncated history in git-describe
- This allows `describe()` to work on shallow clones.
-
-### Other
-
- - <csr-id-53c06c7e6a3003b34edaab10db1f158e2fb57403/> allow reading information about remote branch
- - <csr-id-e4f4c4b2c75a63a40a174e3a006ea64ef8d78809/> `path::discover()` now returns the shortest path.
- If and only if it canonicalized the source path. That way, users will
- still get a familiar path. This is due to `parent()` not operating
- in the file system, which otherwise would be equivalent to `..`,
- but that's not how we work.
-
- Maybe we should overhaul the way this works to use `../` instead
- and just 'absolutize' the path later (std::path::absolute()) is
- on the way for that.
- - <csr-id-da8059ce26343c8cd275f43c879d98c92f77fa51/> remove unused variant
-
-### Changed (BREAKING)
-
- - <csr-id-80e8fd4a5944890f43f3d888b7a73bb26351b195/> integrate trust model into repository discovery
- That way it's possible to ignore repositories which effectively
- aren't owned by the current user, or to not ignore them (default)
- but assign tighter permissions to the repository.
- - <csr-id-2e39b0ede98826e6f85c56fef77ac65a5b7e7ac2/> `path::discover::existing()` -> `path::discover()`
- - <csr-id-38dfdcf80f9b7368ccaa10f4b78b2129849848d0/> remove `values::*Error` in favor of `value::parse::Error`.
- This makes it easier to work with errors in practice, we are either
- interested in the value that failed to parse to try something else
- or want a nice user message.
-
- Having one decode error type facilitates that.
-
-### New Features (BREAKING)
-
- - <csr-id-32dc1829a5661f66396d109c8d0a8eaae6b1f532/> use `gix-credentials` in `gix-protocol`
-
-## 0.16.0 (2022-04-05)
-
-### New Features
-
- - <csr-id-47556f6815148ed960a727fd122f7162345544c3/> auto-calculation of a good hex-len, like what git does
- If the `core.abbrev` value isn't set or is set to `auto`.
- - <csr-id-654f4afb794a370b7cd9d9502ff6d0c3378ec417/> `Commit::describe()`
- A way to fluidly configure a `git describe` operation and run it.
-
- Along that, a new `Tag` top-level object was added as well to provide
- convenient access to otherwise lower-level objects. It's not strictly
- required for our implementation here but it's needed for a symmetric
- API.
-
-## 0.15.0 (2022-04-03)
-
-<csr-id-5f7595305efc85d6ca3c541e9f9adac3915cbd84/>
-<csr-id-c10f07c50f6dde4b39bf1e3ff26c239c5f202912/>
-<csr-id-bbc6efeceb26050973e1425e68a52e51b9df4572/>
-
-### New Features
-
- - <csr-id-1322dbf6827ea5cc1d71175afb669e01fb1242ef/> support for object replacement
- The Repository now respects replacement refs created by `git replace`
- and picks up environment variables for its configuration as well.
-
- Which environment variables are used is fully configurable.
- - <csr-id-a39bf71531ee0a6c8db082758d3212c805ce2bf0/> support for trimming of whitespace around name and email
- It's separated from parsing to assure we can round-trip, but it's
- made easy to obtain trimmed results using new methods.
-
- This high-level git-repository will also trim by default now.
- - <csr-id-00578040a699e1939b3d3813616d3cc4e1d8669e/> `Repository::head_commit()`
- A shortcut to get to the commit much faster.
- - <csr-id-def80df2e165b74f4b053e4030f563902b7d34a4/> `ein tool estimate-hours` now supports mailmaps
- - <csr-id-f0d8a49587c08713350252e1701a45bb308b6f9d/> `Repository::head_id()`
- A long-needed shortcut.
- - <csr-id-d2388d8d80f379eccc9ee84ebe07acd67d154630/> `gix repository mailmap entries`
- - <csr-id-e3bc1b410409a9e27894a5cac48b06d8c3295e36/> unstable mailmap module
- - <csr-id-1be00cf9e00ce9428ffddb2c79b2373926069b13/> `Commit::short_id()`
- - <csr-id-c7dff9e8b695d298a3fb21f19f51752a885a5ce3/> in-manifest and in-lib documentation of feature toggles
- - <csr-id-9f5663ed83d83c7335b346313837d4cada9cd846/> `easy::Commit::time()` to access the committers time conveniently.
- - <csr-id-7c88b62e439af7a60ddb68fb6737cb3b1cebf00d/> easy::Head::name() to learn about the name of the HEAD ref
- It's mainly for completeness to provide people with with a `FullNameRef`
- of HEAD.
- - <csr-id-3b0913a2e6695e4e9e94341ef48d2ba3b4a518e6/> `easy::Head::peel_to_commit_in_place()`
- It allows to quickly get a commit from the head, something most people
- want when getting started with any kind of tool.
- - <csr-id-1c22d76c26464db4a185e19bb6c1f9a17fa19bc9/> `Repository::load_index()`
- This method makes the index of the default workspace available.
-
-### Bug Fixes
-
- - <csr-id-c329dd75420f82d506fd415cd377f7df6c6ccbad/> Properly classify worktrees as non-bare, helps with `ein t find`
- They use git-files which point to the actual repository data.
-
-### Changed (BREAKING)
-
- - <csr-id-a8b6589a7c645f323f95da6cb94321fc967e9b06/> Easier access to local and remote branches
-
-### New Features (BREAKING)
-
- - <csr-id-8945d95f7fa88562d37ff67ac6e38bead73dd2df/> `interrupt::Iter`, rename `interrupt::Iter` -> `interrupt::IterWithError`
- - <csr-id-813a3bea88cdbe1fd9b0a8070efeee2a44f7823e/> Let 'easy::Object::try_into_…()` return `try_into::Error`.
- That way, the typical usage of `try_into_commit()?` will not result
- in a strange error about `Object` not being convertible into some
- error. We think having a real error there is the least surprising.
-
-### Bug Fixes (BREAKING)
-
- - <csr-id-c863ea5b34fa9ee3dac21c1f85587da16045f8d8/> do not install signal handlers by default
- The previous behaviour is meant to be convenient for the casual
- user even though it
- ends up being surprising when used in applications that install
- their own signal handlers and need more control over how the program
- shuts down.
-
- This is now fixed by **requiring an explicit `setup()`** call before
- the first tempfile is created, which makes it a breaking change.
-
-### Other (BREAKING)
-
- - <csr-id-5f7595305efc85d6ca3c541e9f9adac3915cbd84/> `Id::prefix` -> `Id::shorten()`
- It's definitely more intuitive that way.
-
-### Refactor (BREAKING)
-
- - <csr-id-c10f07c50f6dde4b39bf1e3ff26c239c5f202912/> dissolve 'easy' module by moving everything one level up
- - <csr-id-bbc6efeceb26050973e1425e68a52e51b9df4572/> clarify different repository types much better
-
-## 0.14.0 (2022-01-23)
-
-<csr-id-7a91212631219e94b9454d2874b53f3ecc1db77e/>
-<csr-id-b2cc0c63570d45de032d63e62d94c3344783440e/>
-<csr-id-ebc7f47708a63c3df4415ba0e702660d976dfb3e/>
-<csr-id-2290d006705ff47ad780b009fe58ee422b3285af/>
-
-### New Features
-
- - <csr-id-667485e133ca29fcc6914a7142cf953564b5fce3/> Add `easy::Tree::traverse()` platform
- - <csr-id-8f650c089c88698483f778aa5c0070f606b94f09/> Add `easy::Commit` object
- It allows to more conveniently access commit information.
- - <csr-id-0ae2a8da010d848d98bef47ac923ae1d770091ff/> `easy::Oid::ancestors()` now supports `sorting()` and iteration by first commit only
- Especially the sorting is useful to avoid having to sort commits by
- hand after collecting them.
- - <csr-id-bc77534f9c385046f6c9adb994b1443307afda46/> Use GITOXIDE_OBJECT_CACHE_MEMORY to control how much object cache is used
- Note that this is mostly for debugging or quickly seeing if object
- caches help with certain operations.
-
- Ideally the implementation knows themselves and sets up caches
- accordingly, probably after trying it with these environment variables.
-
-### Changed (BREAKING)
-
- - <csr-id-6e3a745dfada66a2fcac256dae0ac63959e74d08/> rename `easy::Object` methods returning `Ref` objects to have `ref` in their name
- That way, it's more clear that the `Ref` versions are low-level ones
- whereas the `into_` ones are higher-level ones that are part of the
- `easy` suite.
- - <csr-id-b6730979808ce28b98c65888a349f1e3d0ea1b9a/> Rename `OwnedObject` to `DetachedObject`
- The latter more clearly indicates what the difference is to
- `Object` (which is attached and carries a lifetime)
- - <csr-id-c4184f3c31ffc4597bd089e8140653906a6594d8/> Remove easy::borrow::Error entirely; support for multiple objects per handle
- This massive simplification finally allows any amounts of objects to be
- created while adding support for reusing their data buffers thanks
- to a simple free-list stored with the handle.
- - <csr-id-880b56426859306aa30038ff35e2ad14607e9e90/> rename `easy::Object` to `OwnedObject`; remove `Ref` suffix from `ObjectRef` and `TreeRef`
- - <csr-id-f9c0493460ab7c664aaa231ffcf7dfd56076c920/> use `gix_odb::Find*` traits in prelude, instead of `gix_pack::Find*`
- These are higher-level and generally more desirable.
- The Find traits in `gix-pack` are more useful internally when packs
- have to be handled directly, for example when generating packs.
- - <csr-id-83d7b31e7dd6d09eea79fc3c68620d099459132f/> rename easy::State to easy::Handle
- As the first step to remove the 'Easy' abstraction.
- - <csr-id-5e7aa1689f5d7ea5b510611a3ca0868828226291/> fully rely on OdbHandle in repository State
- - <csr-id-57de915886b76f80b3641def0ccf4fd79e334fc8/> Rename `Repository::odb` to` Repository::objects`
- This way it's more inline with `Repository::refs`.
- - <csr-id-93db4a5e70456d2c33ea010e3c86e5f26eb1bcc0/> remove Repository::refresh_object_database()
- With the linked DB this is simply not possible anymore and we expect
- these updates to happen automatically in future for greater convenience.
-
- For now, in order to refresh a repository, one has to reopen it.
- - <csr-id-580e96c1b2d9782a2e8cf9d1123f6d53a5376a3d/> Rename `Handle` to `Cache`
- Because this is exactly what it is effectively.
- Also add some basic instantiation for the new object store.
- - remove borrowing Repo as possible failure cause
- The `easy::Handle` is now a full (but shared) clone of the original
- Repository with additional thread-local state, hence there is no more
- need for a way to access the original repository.
- - remove Easy… abstraction in favor of Handle
- This great reduction of complexity allows for being multi-threading
- capable by default with the option to turn that off at compile time.
-
- All `to|into_easy…()` methods are removed in favor of `to_easy()`
- along with the removal of all `Easy` types in favor of the single
- - remove pack-cache from `Find::try_find(…)`
- With the new architecture this can be an implementation detail without
- forcing it to be Sync.
- - move gix_pack::data::Object to gix_object::Data, massively alter gix_odb::Find trait
- This will break a lot, but has to happen to prepare these traits for the
- next generation of object databases.
-
-## 0.13.0 (2021-11-29)
-
-<csr-id-951c050ecbb70c9de216603e55c7cfbc89a067e3/>
-<csr-id-0e1875363fea09452789d7a90fc6860a7996d6d3/>
-
-With changes to `gix-ref`, what follows is all the adjustments made to simplify the `gix` implementation.
-
-### Changed (BREAKING)
-
- - <csr-id-5d498a33236391d8e456f267b1bf6af24de66f11/> file::Store::iter() is now a platform, with `.all()` and `.prefixed(…)` respectively
- This way, it's possible to keep shared ownership of the packed buffer
- while allowing the exact same iterator machinery to work as before.
- - <csr-id-15d429bb50602363292453606902bdce5042d9a5/> file::Store::(try_)find(…, packed) was removed
- The packed buffer is now handled internally while loading it on demand.
- When compiled with `gix-features/parallel` the `file::Store` remains
- send and sync.
-
- The packed refs buffer is shared across clones and it's recommended
- to clone one `file::Store` instance per thread, each of which can
- use its own namespace.
- - <csr-id-95247322a8191edfa7fac9c5aa72b40239f3aa88/> move `gix_ref::file::WriteRefLog` to `gix_ref::store::WriteRefLog`
-
-### Bug Fixes (BREAKING)
-
- - <csr-id-fc8e85cd71d4f16bc8daad0b790d875045faefff/> ref namespaces are now thread-local
- Previously these were shared in the shared Repo instance, which makes
- threaded applications impossible to remain deterministic across multiple
- connections.
-
- Now they are local to the thread, which allowed some methods to remove
- their Result<> as they cannot fail anymore, the reason for this being
- a breaking change.
-
-### Other (BREAKING)
-
- - <csr-id-951c050ecbb70c9de216603e55c7cfbc89a067e3/> Reference::logs() -> Reference::log_iter()
- The latter now returns a standard Platform to iterate over all
- reflog entries from oldest to newest or vice versa.
-
-### Refactor (BREAKING)
-
- - <csr-id-0e1875363fea09452789d7a90fc6860a7996d6d3/> `file::Store::base` is now `file::Store::base()` and read-only
- That way, file databases can't be repositioned anymore, it's recommended
- to recreate it if that's desired.
-
-## 0.12.0 (2021-11-16)
-
-### New Features
-
- - <csr-id-b7aab9efd42975e8f2dcb5c97e51495996175702/> Allow `PartialNameRef` to be created from owned items
-
-### Changed (BREAKING)
-
- - <csr-id-e8b091943f0c9a26317da0003f7fcdf5a56ef21a/> Rename gix->ein and gixp->gix
-
-## v0.11.0 (2021-10-19)
-
-A maintenance release to properly dealing with previously breaking changes in `gix-hash`.
-
-## v0.10.0 (2021-10-15)
-
-<csr-id-1cb41f81cffe19c75aadf49a5cc7ec390ec6cae7/>
-<csr-id-2f2d856efe733d3cf81110c0e0607d2e7c40d968/>
-<csr-id-a19567eceab0dd7f5478b83c2ff9ce79754db308/>
-<csr-id-61793ff42f5c2f9ddf302901adea2dac6149eac8/>
-<csr-id-0cd585e20a5abd323a34ec32d92fbd48531b3b18/>
-<csr-id-89f15051763a03627f332c46beedfc53b8b9b15b/>
-<csr-id-f644d0ede7a2e8d344a81c7003c3877eed64a6b0/>
-<csr-id-ac3b9efb7b90958274ce55800959d930f8641115/>
-<csr-id-03fe8a7ebd34608d725d4585da5c1630123762ec/>
-<csr-id-8fe461281842b58aa11437445637c6e587bedd63/>
-<csr-id-b209da29f361512ba757febf56bc1aca039f2a41/>
-<csr-id-741558dd8194590c5cc8566aa22f96e73df38edf/>
-<csr-id-e16603b15b5488b81563c583cd8f5292ab9d24a2/>
-<csr-id-54a64a588ff72515451a3d0343306ac4abe1cb35/>
-<csr-id-1f4e45a26a3d2727f00c3f248452dd41fc8a95be/>
-<csr-id-1958e8aa65eb97f9755f065d713f0a48c5e41b1b/>
-<csr-id-066f59b23a125b1ce9a015437a3f4468e5791da0/>
-<csr-id-329d183ad4e256a4f9cdeb34589b5f3432495f79/>
-<csr-id-1a1959f487d69ffdd5394775b707139c44dbd11d/>
-<csr-id-5e091fb2b4fd33879c176e6dadd3c9805d99af50/>
-<csr-id-e3760679547e0dc1bf31761acdb6e63b04a50919/>
-<csr-id-de004b318fdc6923711dd001bff5f4bcbba4270e/>
-<csr-id-41afad3386461b658ee859225785b6de86d13cfb/>
-<csr-id-f582439a3efe5c234f54c488792395e9de09a032/>
-<csr-id-42080aefe3b286afb58235c1c22491579ab73919/>
-<csr-id-d422b9a31a37a03551bec4382039aaf3a7e49902/>
-<csr-id-e7c061b10c263001eb4abf03098d6694b770f828/>
-<csr-id-66292fd1076c2c9db4694c5ded09799a0be11a03/>
-<csr-id-5aadf75a0d93d1a990ad0305c38366c5c22bdcb2/>
-<csr-id-d79a1b75304e397c16b5af7055906591a187ddfd/>
-<csr-id-7d2b6b66e09ff39727fccd68d190679b52d90126/>
-<csr-id-06996e032b1e451a674395ebaca94434fac46f05/>
-<csr-id-daec7167df524b329daad7dabb1b9920b6ef8936/>
-<csr-id-4fe4786797d240a59d29dbf2c6310490a381c8b6/>
-<csr-id-debe0094826f83839f907523715def929133fd58/>
-<csr-id-56e39fac54bfa3871c42bbf76a9f7c49486b85be/>
-<csr-id-293bfc0278c5983c0beaec93253fb51f00d81156/>
-<csr-id-650241251a420602f74037babfc24c9f64df78d8/>
-<csr-id-2b4a61589a7cba3f7600710e21304e731ae3b36a/>
-<csr-id-8b82f7d44c7eb63b7922ddc31ada9cefdce776b0/>
-
-### New Features
-
- - <csr-id-11b64fce4630371633b6415f227eecdc6b42b20b/> Make `gix_url::Url` available under `gix::Url`
- - <csr-id-80b8331092f4856f52afa1d85fa375ae688bdd28/> add easy::ext::ObjectAccessExt::tag(…) to create tag objects
- It's a quick sketch on how tag object creation could work.
-
- Note the duplication the method name using traits, which seems like a good solution
- to the problem of differentiating tag objects and tag references while
- keeping the method name short.
-
- Most will only ever need one, right?
-
- Even in my example that's not the case, so maybe we have to rename it.
- - <csr-id-0ebfeb614264ca06ab763189e55e6c016c9997af/> Make `gix_url::Url` available under `gix::Url`
-
-### BREAKING Changes
-
- - Use 'to_*' when converting `easy::Object` to specific object kind
- This also makes the API more consistent while being more idiomatic.
- - Avoid duplicate module paths in 'tree' and 'commit'
- - rename ObjectIdExt::ancestors_iter() to *::ancestors()
- - rename `easy::Object::to_(commit|tag)_iter()`…
- …to `easy::Object::try_to_(commit|tag)_iter()` for consistency.
- - rename `*::State` into `*::Platform`
- - various small API changes
- - move easy::head::peel::Error -> easy::head::peel::to_id::Error
- - rename path::is_git to path::is
- - rename easy::reference::log::State to easy::reference::Logs
-
-### Other
-
- - <csr-id-293bfc0278c5983c0beaec93253fb51f00d81156/> loose reference iteration with non-dir prefixes…
- Previously it was expected for the prefix `Path` to always exist for
- the prefix to be valid. This, however, is not similar to packed
- prefixes, which allow non-dir prefixes as well.
-
- Now we will check if the prefix is actually a directory, and if not
- split it into its parent directory and the filename portion. The latter
- is then used for prefix matching file names within that directory.
- - <csr-id-650241251a420602f74037babfc24c9f64df78d8/> Add 'references().all().peeled().'…
- …to not only make typical usage of iterated references more convenient
- but also work around a double-borrow error one would see otherwise.
- - <csr-id-2b4a61589a7cba3f7600710e21304e731ae3b36a/> filter refs correctly, but…
- …it needs a way to peel references right away without trying
- to double-borrow. This means the Iterator needs to implement this.
- - <csr-id-8b82f7d44c7eb63b7922ddc31ada9cefdce776b0/> improved changelog…
- …akin to 'Keep a changelog'.
-
-### Refactor
-
- - <csr-id-8fe461281842b58aa11437445637c6e587bedd63/> split data::output::count::objects into files
- - <csr-id-b209da29f361512ba757febf56bc1aca039f2a41/> use new gix_pack::cache::Object trait
- - <csr-id-741558dd8194590c5cc8566aa22f96e73df38edf/> remove object cache impl which now lives in gix-pack
-
-### Other
-
- - <csr-id-e16603b15b5488b81563c583cd8f5292ab9d24a2/> :remote_url() is now optional
- Otherwise it wouldn't work on repos that don't have a remote set yet.
- Instead of failing, we don't create links.
- - <csr-id-54a64a588ff72515451a3d0343306ac4abe1cb35/> try to create persistent Easy iterator, but can't make it Send…
- …which is fair as it contains borrowed RefCells, which really would have
- to be owned to work for this, which would in turn require the Ancestor's
- struct to be kind of self-referential
- - <csr-id-1f4e45a26a3d2727f00c3f248452dd41fc8a95be/> path::is
- - <csr-id-1958e8aa65eb97f9755f065d713f0a48c5e41b1b/> path::discover
- - <csr-id-066f59b23a125b1ce9a015437a3f4468e5791da0/> top-level of 'path' module
- - <csr-id-329d183ad4e256a4f9cdeb34589b5f3432495f79/> object_id
- - <csr-id-1a1959f487d69ffdd5394775b707139c44dbd11d/> repository
- - <csr-id-5e091fb2b4fd33879c176e6dadd3c9805d99af50/> ext::tree
- - <csr-id-e3760679547e0dc1bf31761acdb6e63b04a50919/> easy::object::peel
- - <csr-id-de004b318fdc6923711dd001bff5f4bcbba4270e/> easy::object::errors
- - <csr-id-41afad3386461b658ee859225785b6de86d13cfb/> a seemingly slow version of path lookup, but…
- …in debug mode it's faster than the fast path, despite doing more
- and being the same when it comes to searching path components.
- - <csr-id-f582439a3efe5c234f54c488792395e9de09a032/> easy::object, sans a few child-modules
- - <csr-id-42080aefe3b286afb58235c1c22491579ab73919/> update 'platform' information to reflect the current usage
- - <csr-id-d422b9a31a37a03551bec4382039aaf3a7e49902/> configure caches with env vars using `apply_environment()`
- - <csr-id-e7c061b10c263001eb4abf03098d6694b770f828/> refactor
- - <csr-id-66292fd1076c2c9db4694c5ded09799a0be11a03/> set package cache via RepositoryAccessExt
- - <csr-id-5aadf75a0d93d1a990ad0305c38366c5c22bdcb2/> Add GITOXIDE_PACK_CACHE_MEMORY_IN_BYTES=536870912 to control pack-cache size…
- …which can mean another considerable speed-up for many workloads, but
- usually needs some knowledge about the application, repos, and should
- thus be with the user.
- - <csr-id-d79a1b75304e397c16b5af7055906591a187ddfd/> allow disabling the pack cache with GITOXIDE_DISABLE_PACK_CACHE
- - <csr-id-7d2b6b66e09ff39727fccd68d190679b52d90126/> prepare for configurable pack cache
- - <csr-id-06996e032b1e451a674395ebaca94434fac46f05/> object-cache to allow for a speed boost…
- …by avoiding duplicate accesses to hit the object database.
- However, the cost for the cache are relatively high and involve some
- memory copying, so hit rates of about 50% is certainly what is needed
- to get any speed boost at all.
- - <csr-id-daec7167df524b329daad7dabb1b9920b6ef8936/> build commit history for later use in changelog generation
- - <csr-id-4fe4786797d240a59d29dbf2c6310490a381c8b6/> Allow object access during commit ancestor traversal…
- …by getting only a temporary handle to the pack-cache. The cost of this
- should be negligible compared to the cost of object decoding.
- - <csr-id-debe0094826f83839f907523715def929133fd58/> sketch history acquisition
- - <csr-id-56e39fac54bfa3871c42bbf76a9f7c49486b85be/> add 'Head::peeled()' method
-
-### Changed (BREAKING)
-
- - <csr-id-c3385cd144298eb9f06d7751d180e26da7b4d338/> `easy::Object::try_to_commit()` now returns `Result<CommitRef>`…
- …without the nested `Option`, folding the type mismatch into a specific
- `conversion::Error` instead.
- - <csr-id-e59f901f47fb0180211494a1591aed62b856406a/> rename `ObjectAccessExt::tag(…)` to `*::tag_reference(…)`, add `easy::Object::try_to_tag()`
- This one also contains the first and probably only test for tag object
- creation.
-
-## v0.9.1 (2021-09-10)
-
-<csr-id-293bfc0278c5983c0beaec93253fb51f00d81156/>
-<csr-id-650241251a420602f74037babfc24c9f64df78d8/>
-<csr-id-2b4a61589a7cba3f7600710e21304e731ae3b36a/>
-<csr-id-8b82f7d44c7eb63b7922ddc31ada9cefdce776b0/>
-
-- Remove `max-performance` feature from default set until the `msvc` build issue is fixed. Otherwise it will surprisingly break windows builds.
-
-### Other
-
- - <csr-id-293bfc0278c5983c0beaec93253fb51f00d81156/> loose reference iteration with non-dir prefixes…
- Previously it was expected for the prefix `Path` to always exist for
- the prefix to be valid. This, however, is not similar to packed
- prefixes, which allow non-dir prefixes as well.
-
- Now we will check if the prefix is actually a directory, and if not
- split it into its parent directory and the filename portion. The latter
- is then used for prefix matching file names within that directory.
- - <csr-id-650241251a420602f74037babfc24c9f64df78d8/> Add 'references().all().peeled().'…
- …to not only make typical usage of iterated references more convenient
- but also work around a double-borrow error one would see otherwise.
- - <csr-id-2b4a61589a7cba3f7600710e21304e731ae3b36a/> filter refs correctly, but…
- …it needs a way to peel references right away without trying
- to double-borrow. This means the Iterator needs to implement this.
- - <csr-id-8b82f7d44c7eb63b7922ddc31ada9cefdce776b0/> improved changelog…
- …akin to 'Keep a changelog'.
-
-## v0.9.0 (2021-09-08)
-
-- rename `prelude::ConfigAccessExt` to `prelude::RepositoryAccessExt`
-- `prelude::ObjectAccessExt::commit()` signature change
-- cargo feature changed in incompatible ways. `network` was replaced by more finegrained options for _blocking_ and _async_ networking, as well as optional http transport
-
-### New
-
-- `init()`
-- `init_bare()`
-- `Repository::init(Kind)`
-- `open()`
-- `Repository::open()`
-- `easy::Head`
-- `easy::ext::ReferenceAccessExt::head()`
-- `ext::ReferenceExt` trait
-
-### Breaking
-- **renames / moves / Signature Changes**
- - `path::Path` to `Path`
- - `init::repository(dir)` -> `path::create::into(dir, **Kind**)`
-
-## v0.8.2 (2021-09-07)
-
-## v0.8.1 (2021-08-28)
-
-- Introduce `EasyArcExclusive` type, now available thanks to `parking_lot` 0.11.2
-
-## v0.8.0 (2021-08-27)
-
-- Rename `object` to `objs` to be equivalent to `refs` and make space for the new `object` module
-- various minor version updates of pre-release dependencies
-
-## v0.7.2 (2021-08-17)
-
-## v0.7.1 (2021-08-13)
-
-## v0.7.0 (2021-08-10)
-
-## v0.6.0 (2021-05-28)
-
-## v0.5.0 (2021-04-08)
-
-## v0.4.0 (2020-09-12)
-
-## v0.3.0 (2020-08-12)
-
-## v0.1.0 (2020-07-12)
-
-## 0.0.0 (2023-02-10)
-
-### Commit Statistics
-
-<csr-read-only-do-not-edit/>
-
- - 2 commits contributed to the release.
- - 0 commits were understood as [conventional](https://www.conventionalcommits.org).
- - 0 issues like '(#ID)' were seen in commit messages
-
-### Commit Details
-
-<csr-read-only-do-not-edit/>
-
-<details><summary>view details</summary>
-
- * **Uncategorized**
- - Release gix v0.0.0 ([`8bce6d5`](https://github.com/Byron/gitoxide/commit/8bce6d5cba12630bf4d12ed92f572a379d945329))
- - Add `gix` crate to reserve name ([`5104a78`](https://github.com/Byron/gitoxide/commit/5104a787127bf0b1f9b65f371b7c5b79f491e396))
-</details>
-
diff --git a/vendor/gix/Cargo.lock b/vendor/gix/Cargo.lock
index b87494c7e..11dd6ebe9 100644
--- a/vendor/gix/Cargo.lock
+++ b/vendor/gix/Cargo.lock
@@ -4,9 +4,9 @@ version = 3
[[package]]
name = "addr2line"
-version = "0.20.0"
+version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
dependencies = [
"gimli",
]
@@ -31,18 +31,18 @@ dependencies = [
[[package]]
name = "aho-corasick"
-version = "1.0.4"
+version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
dependencies = [
"memchr",
]
[[package]]
name = "anyhow"
-version = "1.0.72"
+version = "1.0.75"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
[[package]]
name = "arc-swap"
@@ -79,14 +79,14 @@ dependencies = [
[[package]]
name = "async-executor"
-version = "1.5.1"
+version = "1.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb"
+checksum = "2c1da3ae8dabd9c00f453a329dfe1fb28da3c0a72e2478cdcd93171740c20499"
dependencies = [
"async-lock",
"async-task",
"concurrent-queue",
- "fastrand 1.9.0",
+ "fastrand 2.0.1",
"futures-lite",
"slab",
]
@@ -120,7 +120,7 @@ dependencies = [
"log",
"parking",
"polling",
- "rustix 0.37.23",
+ "rustix 0.37.25",
"slab",
"socket2 0.4.9",
"waker-fn",
@@ -128,9 +128,9 @@ dependencies = [
[[package]]
name = "async-lock"
-version = "2.7.0"
+version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7"
+checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
dependencies = [
"event-listener",
]
@@ -164,26 +164,26 @@ dependencies = [
[[package]]
name = "async-task"
-version = "4.4.0"
+version = "4.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae"
+checksum = "b9441c6b2fe128a7c2bf680a44c34d0df31ce09e5b7e401fcca3faa483dbc921"
[[package]]
name = "async-trait"
-version = "0.1.71"
+version = "0.1.73"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a564d521dd56509c4c47480d00b80ee55f7e385ae48db5744c67ad50c92d2ebf"
+checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.29",
+ "syn 2.0.38",
]
[[package]]
name = "atomic-waker"
-version = "1.1.1"
+version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3"
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
[[package]]
name = "autocfg"
@@ -193,9 +193,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "backtrace"
-version = "0.3.68"
+version = "0.3.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
dependencies = [
"addr2line",
"cc",
@@ -208,9 +208,15 @@ dependencies = [
[[package]]
name = "base64"
-version = "0.21.2"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
+checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2"
[[package]]
name = "bitflags"
@@ -220,9 +226,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
-version = "2.3.3"
+version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42"
+checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
dependencies = [
"serde",
]
@@ -238,24 +244,25 @@ dependencies = [
[[package]]
name = "blocking"
-version = "1.3.1"
+version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65"
+checksum = "8c36a4d0d48574b3dd360b4b7d95cc651d2b6557b6402848a27d4b228a473e2a"
dependencies = [
"async-channel",
"async-lock",
"async-task",
- "atomic-waker",
- "fastrand 1.9.0",
+ "fastrand 2.0.1",
+ "futures-io",
"futures-lite",
- "log",
+ "piper",
+ "tracing",
]
[[package]]
name = "bstr"
-version = "1.6.0"
+version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05"
+checksum = "c79ad7fb2dd38f3dabd76b09c6a5a20c038fc0213ef1e9afd30eb777f120f019"
dependencies = [
"memchr",
"regex-automata",
@@ -273,27 +280,30 @@ dependencies = [
[[package]]
name = "bumpalo"
-version = "3.13.0"
+version = "3.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
[[package]]
name = "bytes"
-version = "1.4.0"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
[[package]]
name = "bytesize"
-version = "1.2.0"
+version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38fcc2979eff34a4b84e1cf9a1e3da42a7d44b3b690a40cdcb23e3d556cfb2e5"
+checksum = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc"
[[package]]
name = "cc"
-version = "1.0.79"
+version = "1.0.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
[[package]]
name = "cfg-if"
@@ -318,9 +328,9 @@ dependencies = [
[[package]]
name = "concurrent-queue"
-version = "2.2.0"
+version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c"
+checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400"
dependencies = [
"crossbeam-utils",
]
@@ -453,27 +463,28 @@ dependencies = [
[[package]]
name = "curl-sys"
-version = "0.4.63+curl-8.1.2"
+version = "0.4.68+curl-8.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aeb0fef7046022a1e2ad67a004978f0e3cacb9e3123dc62ce768f92197b771dc"
+checksum = "b4a0d18d88360e374b16b2273c832b5e57258ffc1d4aa4f96b108e0738d5752f"
dependencies = [
"cc",
"libc",
"libz-sys",
"openssl-sys",
"pkg-config",
+ "rustls-ffi",
"vcpkg",
- "winapi",
+ "windows-sys",
]
[[package]]
name = "dashmap"
-version = "5.5.0"
+version = "5.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6943ae99c34386c84a470c499d3414f66502a41340aa895406e0d2e4a207b91d"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
dependencies = [
"cfg-if",
- "hashbrown 0.14.0",
+ "hashbrown 0.14.1",
"lock_api",
"once_cell",
"parking_lot_core",
@@ -512,50 +523,45 @@ checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
[[package]]
name = "either"
-version = "1.8.1"
+version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
[[package]]
name = "encoding_rs"
-version = "0.8.32"
+version = "0.8.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
dependencies = [
"cfg-if",
]
[[package]]
name = "enum-as-inner"
-version = "0.5.1"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116"
+checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a"
dependencies = [
"heck",
"proc-macro2",
"quote",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
-name = "errno"
-version = "0.3.1"
+name = "equivalent"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
-dependencies = [
- "errno-dragonfly",
- "libc",
- "windows-sys",
-]
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
-name = "errno-dragonfly"
-version = "0.1.2"
+name = "errno"
+version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
dependencies = [
- "cc",
"libc",
+ "windows-sys",
]
[[package]]
@@ -566,9 +572,9 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
[[package]]
name = "faster-hex"
-version = "0.8.0"
+version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e9042d281a5eec0f2387f8c3ea6c4514e2cf2732c90a85aaf383b761ee3b290d"
+checksum = "239f7bfb930f820ab16a9cd95afc26f88264cf6905c960b340a615384aa3338a"
dependencies = [
"serde",
]
@@ -584,27 +590,27 @@ dependencies = [
[[package]]
name = "fastrand"
-version = "2.0.0"
+version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
[[package]]
name = "filetime"
-version = "0.2.21"
+version = "0.2.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
+checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
dependencies = [
"cfg-if",
"libc",
- "redox_syscall 0.2.16",
+ "redox_syscall 0.3.5",
"windows-sys",
]
[[package]]
name = "flate2"
-version = "1.0.27"
+version = "1.0.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
dependencies = [
"crc32fast",
"libz-ng-sys",
@@ -685,7 +691,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.29",
+ "syn 2.0.38",
]
[[package]]
@@ -739,20 +745,22 @@ dependencies = [
[[package]]
name = "gimli"
-version = "0.27.3"
+version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
+checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
[[package]]
name = "gix"
-version = "0.55.2"
+version = "0.56.0"
dependencies = [
"anyhow",
"async-std",
+ "curl",
"document-features",
"gix-actor",
"gix-archive",
"gix-attributes",
+ "gix-command",
"gix-commitgraph",
"gix-config",
"gix-credentials",
@@ -812,9 +820,9 @@ dependencies = [
[[package]]
name = "gix-actor"
-version = "0.28.0"
+version = "0.28.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "948a5f9e43559d16faf583694f1c742eb401ce24ce8e6f2238caedea7486433c"
+checksum = "2eadca029ef716b4378f7afb19f7ee101fde9e58ba1f1445971315ac866db417"
dependencies = [
"bstr",
"btoi",
@@ -827,9 +835,9 @@ dependencies = [
[[package]]
name = "gix-archive"
-version = "0.6.0"
+version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "909f8417346ebae6a8ca4e947966541a30a1eaac0d67c816f735cba03f0ff09d"
+checksum = "c9d1095b8cbc9369f1cd59dc73f7e37fab2252294265705da8bc80e42a2ecc38"
dependencies = [
"bstr",
"gix-date",
@@ -840,9 +848,9 @@ dependencies = [
[[package]]
name = "gix-attributes"
-version = "0.20.0"
+version = "0.20.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dca120f0c6562d2d7cae467f2466e576d9f7f189beec2af2e026145107c729e2"
+checksum = "0f395469d38c76ec47cd1a6c5a53fbc3f13f737b96eaf7535f4e6b367e643381"
dependencies = [
"bstr",
"gix-glob",
@@ -858,36 +866,39 @@ dependencies = [
[[package]]
name = "gix-bitmap"
-version = "0.2.7"
+version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ccab4bc576844ddb51b78d81b4a42d73e6229660fa614dfc3d3999c874d1959"
+checksum = "d49e1a13a30d3f88be4bceae184dd13a2d3fb9ffa7515f7ed7ae771b857f4916"
dependencies = [
"thiserror",
]
[[package]]
name = "gix-chunk"
-version = "0.4.4"
+version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b42ea64420f7994000130328f3c7a2038f639120518870436d31b8bde704493"
+checksum = "d411ecd9b558b0c20b3252b7e409eec48eabc41d18324954fe526bac6e2db55f"
dependencies = [
"thiserror",
]
[[package]]
name = "gix-command"
-version = "0.2.10"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c576cfbf577f72c097b5f88aedea502cd62952bdc1fb3adcab4531d5525a4c7"
+checksum = "b3b54c1d8d63e6ef2adbd9b94d6e49ff168858510b44d3811cdd02dfacc4f0c9"
dependencies = [
"bstr",
+ "gix-path",
+ "gix-trace",
+ "shell-words",
]
[[package]]
name = "gix-commitgraph"
-version = "0.22.0"
+version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e8bc78b1a6328fa6d8b3a53b6c73997af37fd6bfc1d6c49f149e63bda5cbb36"
+checksum = "85a7007ba021f059803afaf6f8a48872422abc20550ac12ede6ddea2936cec36"
dependencies = [
"bstr",
"gix-chunk",
@@ -900,9 +911,9 @@ dependencies = [
[[package]]
name = "gix-config"
-version = "0.31.0"
+version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5cae98c6b4c66c09379bc35274b172587d6b0ac369a416c39128ad8c6454f9bb"
+checksum = "ada0e0b904b17a3f2636b70a33e2c8b075b8eb947db80f6c6e94549f2d5b78d1"
dependencies = [
"bstr",
"gix-config-value",
@@ -921,11 +932,11 @@ dependencies = [
[[package]]
name = "gix-config-value"
-version = "0.14.0"
+version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea7505b97f4d8e7933e29735a568ba2f86d8de466669d9f0e8321384f9972f47"
+checksum = "6419db582ea84dfb58c7e7b0af7fd62c808aa14954af2936a33f89b0f4ed018e"
dependencies = [
- "bitflags 2.3.3",
+ "bitflags 2.4.0",
"bstr",
"gix-path",
"libc",
@@ -934,9 +945,9 @@ dependencies = [
[[package]]
name = "gix-credentials"
-version = "0.21.0"
+version = "0.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c5c5d74069b842a1861e581027ac6b7ad9ff66f5911c89b9f45484d7ebda6a4"
+checksum = "513dac42450b27946bd0a0535a3a5a88e473d6522e5e3439a129cab779c88f3d"
dependencies = [
"bstr",
"gix-command",
@@ -944,6 +955,7 @@ dependencies = [
"gix-path",
"gix-prompt",
"gix-sec",
+ "gix-trace",
"gix-url",
"serde",
"thiserror",
@@ -951,9 +963,9 @@ dependencies = [
[[package]]
name = "gix-date"
-version = "0.8.0"
+version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fc7df669639582dc7c02737642f76890b03b5544e141caba68a7d6b4eb551e0d"
+checksum = "468dfbe411f335f01525a1352271727f8e7772075a93fa747260f502086b30be"
dependencies = [
"bstr",
"itoa",
@@ -964,21 +976,29 @@ dependencies = [
[[package]]
name = "gix-diff"
-version = "0.37.0"
+version = "0.38.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "931394f69fb8c9ed6afc0aae3487bd869e936339bcc13ed8884472af072e0554"
+checksum = "8119a985887cfe68f4bdf92e51bd64bc758a73882d82fcfc03ebcb164441c85d"
dependencies = [
+ "bstr",
+ "gix-command",
+ "gix-filter",
+ "gix-fs",
"gix-hash",
"gix-object",
+ "gix-path",
+ "gix-tempfile",
+ "gix-trace",
+ "gix-worktree",
"imara-diff",
"thiserror",
]
[[package]]
name = "gix-discover"
-version = "0.26.0"
+version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a45d5cf0321178883e38705ab2b098f625d609a7d4c391b33ac952eff2c490f2"
+checksum = "6fad89416ebe0b3b7df78464124e2a02417b6cd3743d48ad93df86f4d2929c07"
dependencies = [
"bstr",
"dunce",
@@ -991,9 +1011,9 @@ dependencies = [
[[package]]
name = "gix-features"
-version = "0.36.0"
+version = "0.36.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "51f4365ba17c4f218d7fd9ec102b8d2d3cb0ca200a835e81151ace7778aec827"
+checksum = "4d46a4a5c6bb5bebec9c0d18b65ada20e6517dbd7cf855b87dd4bbdce3a771b2"
dependencies = [
"bytes",
"bytesize",
@@ -1015,9 +1035,9 @@ dependencies = [
[[package]]
name = "gix-filter"
-version = "0.6.0"
+version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92f674d3fdb6b1987b04521ec9a5b7be8650671f2c4bbd17c3c81e2a364242ff"
+checksum = "6d6a5c9d8e55c364e7c226919c19c9a28be1392d6208b5008059fa94ff7e2bf0"
dependencies = [
"bstr",
"encoding_rs",
@@ -1029,26 +1049,27 @@ dependencies = [
"gix-path",
"gix-quote",
"gix-trace",
+ "gix-utils",
"smallvec",
"thiserror",
]
[[package]]
name = "gix-fs"
-version = "0.8.0"
+version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8cd171c0cae97cd0dc57e7b4601cb1ebf596450e263ef3c02be9107272c877bd"
+checksum = "20e86eb040f5776a5ade092282e51cdcad398adb77d948b88d17583c2ae4e107"
dependencies = [
"gix-features",
]
[[package]]
name = "gix-glob"
-version = "0.14.0"
+version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8fac08925dbc14d414bd02eb45ffb4cecd912d1fce3883f867bd0103c192d3e4"
+checksum = "5db19298c5eeea2961e5b3bf190767a2d1f09b8802aeb5f258e42276350aff19"
dependencies = [
- "bitflags 2.3.3",
+ "bitflags 2.4.0",
"bstr",
"gix-features",
"gix-path",
@@ -1057,9 +1078,9 @@ dependencies = [
[[package]]
name = "gix-hash"
-version = "0.13.1"
+version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1884c7b41ea0875217c1be9ce91322f90bde433e91d374d0e1276073a51ccc60"
+checksum = "99c1e554a87759e672c7d2e37211e761aa390c61ffcd3753a57c51173143f3cb"
dependencies = [
"faster-hex",
"serde",
@@ -1068,20 +1089,20 @@ dependencies = [
[[package]]
name = "gix-hashtable"
-version = "0.4.0"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "409268480841ad008e81c17ca5a293393fbf9f2b6c2f85b8ab9de1f0c5176a16"
+checksum = "feb61880816d7ec4f0b20606b498147d480860ddd9133ba542628df2f548d3ca"
dependencies = [
"gix-hash",
- "hashbrown 0.14.0",
+ "hashbrown 0.14.1",
"parking_lot",
]
[[package]]
name = "gix-ignore"
-version = "0.9.0"
+version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e73c07763a8005ae02cb5cf83040729cea9bb70c7cef68ec6c24159904c499a"
+checksum = "a215cc8cf21645bca131fcf6329d3ebd46299c47dbbe27df71bb1ca9e328b879"
dependencies = [
"bstr",
"gix-glob",
@@ -1092,11 +1113,11 @@ dependencies = [
[[package]]
name = "gix-index"
-version = "0.26.0"
+version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c83a4fcc121b2f2e109088f677f89f85e7a8ebf39e8e6659c0ae54d4283b1650"
+checksum = "65ce8d03ec25de952be7d2a9adce2a4c2cb8f7fc2d4c25be91301be9707f380b"
dependencies = [
- "bitflags 2.3.3",
+ "bitflags 2.4.0",
"bstr",
"btoi",
"filetime",
@@ -1108,7 +1129,9 @@ dependencies = [
"gix-object",
"gix-traverse",
"itoa",
+ "libc",
"memmap2",
+ "rustix 0.38.21",
"serde",
"smallvec",
"thiserror",
@@ -1116,9 +1139,9 @@ dependencies = [
[[package]]
name = "gix-lock"
-version = "11.0.0"
+version = "11.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4feb1dcd304fe384ddc22edba9dd56a42b0800032de6537728cea2f033a4f37"
+checksum = "7e5c65e6a29830a435664891ced3f3c1af010f14900226019590ee0971a22f37"
dependencies = [
"gix-tempfile",
"gix-utils",
@@ -1127,20 +1150,20 @@ dependencies = [
[[package]]
name = "gix-macros"
-version = "0.1.0"
+version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d8acb5ee668d55f0f2d19a320a3f9ef67a6999ad483e11135abcc2464ed18b6"
+checksum = "02a5bcaf6704d9354a3071cede7e77d366a5980c7352e102e2c2f9b645b1d3ae"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.29",
+ "syn 2.0.38",
]
[[package]]
name = "gix-mailmap"
-version = "0.20.0"
+version = "0.20.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "496141bc97ca2074401dfd3049a958554ab5a80c7f00a9dcfb41d29a7396f9e2"
+checksum = "e2325fec0d5e6b2dd758083a6f560bfeabc73ff7a12ffe378986baf890fe9f07"
dependencies = [
"bstr",
"gix-actor",
@@ -1151,11 +1174,11 @@ dependencies = [
[[package]]
name = "gix-negotiate"
-version = "0.9.0"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a5cdcf491ecc9ce39dcc227216c540355fe0024ae7c38e94557752ca5ebb67f"
+checksum = "979f6accd9c051b3dd018b50adf29c0a2459edddf6105cc70b767976cd6f8014"
dependencies = [
- "bitflags 2.3.3",
+ "bitflags 2.4.0",
"gix-commitgraph",
"gix-date",
"gix-hash",
@@ -1167,9 +1190,9 @@ dependencies = [
[[package]]
name = "gix-object"
-version = "0.38.0"
+version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "740f2a44267f58770a1cb3a3d01d14e67b089c7136c48d4bddbb3cfd2bf86a51"
+checksum = "febf79c5825720c1c63fe974c7bbe695d0cb54aabad73f45671c60ce0e501e33"
dependencies = [
"bstr",
"btoi",
@@ -1187,9 +1210,9 @@ dependencies = [
[[package]]
name = "gix-odb"
-version = "0.54.0"
+version = "0.55.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8630b56cb80d8fa684d383dad006a66401ee8314e12fbf0e566ddad8c115143b"
+checksum = "1fae5f971540c99c6ecc8d4368ecc9d18a9dc8b9391025c68c4399747dc93bac"
dependencies = [
"arc-swap",
"gix-date",
@@ -1207,9 +1230,9 @@ dependencies = [
[[package]]
name = "gix-pack"
-version = "0.44.0"
+version = "0.45.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1431ba2e30deff1405920693d54ab231c88d7c240dd6ccc936ee223d8f8697c3"
+checksum = "4569491c92446fddf373456ff360aff9a9effd627b40a70f2d7914dcd75a3205"
dependencies = [
"clru",
"gix-chunk",
@@ -1229,34 +1252,36 @@ dependencies = [
[[package]]
name = "gix-packetline"
-version = "0.16.7"
+version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a8384b1e964151aff0d5632dd9b191059d07dff358b96bd940f1b452600d7ab"
+checksum = "03b9fcc4425bd64c585440d14e5d2405a399f323429401571ba56a2c6d111865"
dependencies = [
"bstr",
"faster-hex",
"futures-io",
"futures-lite",
+ "gix-trace",
"pin-project-lite",
"thiserror",
]
[[package]]
name = "gix-packetline-blocking"
-version = "0.16.6"
+version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d8395f7501c84d6a1fe902035fdfd8cd86d89e2dd6be0200ec1a72fd3c92d39"
+checksum = "50052c0f76c5af5acda41177fb55b60c1e484cc246ae919d8d21129cd1000a4e"
dependencies = [
"bstr",
"faster-hex",
+ "gix-trace",
"thiserror",
]
[[package]]
name = "gix-path"
-version = "0.10.0"
+version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a1d370115171e3ae03c5c6d4f7d096f2981a40ddccb98dfd704c773530ba73b"
+checksum = "d86d6fac2fabe07b67b7835f46d07571f68b11aa1aaecae94fe722ea4ef305e1"
dependencies = [
"bstr",
"gix-trace",
@@ -1267,11 +1292,11 @@ dependencies = [
[[package]]
name = "gix-pathspec"
-version = "0.4.0"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e9cc7194fdcf43b4a1ccfa13ffae1d79f83beb4becff7761d88dd99faeafe625"
+checksum = "1dbbb92f75a38ef043c8bb830b339b38d0698d7f3746968b5fcbade7a880494d"
dependencies = [
- "bitflags 2.3.3",
+ "bitflags 2.4.0",
"bstr",
"gix-attributes",
"gix-config-value",
@@ -1282,22 +1307,22 @@ dependencies = [
[[package]]
name = "gix-prompt"
-version = "0.7.0"
+version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c9a913769516f5e9d937afac206fb76428e3d7238e538845842887fda584678"
+checksum = "4967b921304a5355e65a6257280eddf6e0f9ce3df111256531460adca3771305"
dependencies = [
"gix-command",
"gix-config-value",
"parking_lot",
- "rustix 0.38.4",
+ "rustix 0.38.21",
"thiserror",
]
[[package]]
name = "gix-protocol"
-version = "0.41.1"
+version = "0.42.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "391e3feabdfa5f90dad6673ce59e3291ac28901b2ff248d86c5a7fbde0391e0e"
+checksum = "95736ef407db0bd15a5bdea791fbfcf523b9f13b96c852c240cd86a9ee0ef817"
dependencies = [
"async-trait",
"bstr",
@@ -1317,9 +1342,9 @@ dependencies = [
[[package]]
name = "gix-quote"
-version = "0.4.7"
+version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "475c86a97dd0127ba4465fbb239abac9ea10e68301470c9791a6dd5351cdc905"
+checksum = "4f84845efa535468bc79c5a87b9d29219f1da0313c8ecf0365a5daa7e72786f2"
dependencies = [
"bstr",
"btoi",
@@ -1328,9 +1353,9 @@ dependencies = [
[[package]]
name = "gix-ref"
-version = "0.38.0"
+version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ec2f6d07ac88d2fb8007ee3fa3e801856fb9d82e7366ec0ca332eb2c9d74a52"
+checksum = "1ac23ed741583c792f573c028785db683496a6dfcd672ec701ee54ba6a77e1ff"
dependencies = [
"gix-actor",
"gix-date",
@@ -1350,9 +1375,9 @@ dependencies = [
[[package]]
name = "gix-refspec"
-version = "0.19.0"
+version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ccb0974cc41dbdb43a180c7f67aa481e1c1e160fcfa8f4a55291fd1126c1a6e7"
+checksum = "76d9d3b82e1ee78fc0dc1c37ea5ea76c2dbc73f407db155f0dfcea285e583bee"
dependencies = [
"bstr",
"gix-hash",
@@ -1364,9 +1389,9 @@ dependencies = [
[[package]]
name = "gix-revision"
-version = "0.23.0"
+version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2ca97ac73459a7f3766aa4a5638a6e37d56d4c7962bc1986fbaf4883d0772588"
+checksum = "fe5dd51710ce5434bc315ea30394fab483c5377276494edd79222b321a5a9544"
dependencies = [
"bstr",
"gix-date",
@@ -1381,9 +1406,9 @@ dependencies = [
[[package]]
name = "gix-revwalk"
-version = "0.9.0"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a16d8c892e4cd676d86f0265bf9d40cefd73d8d94f86b213b8b77d50e77efae0"
+checksum = "69d4ed2493ca94a475fdf147138e1ef8bab3b6ebb56abf3d9bda1c05372ec1dd"
dependencies = [
"gix-commitgraph",
"gix-date",
@@ -1396,11 +1421,11 @@ dependencies = [
[[package]]
name = "gix-sec"
-version = "0.10.0"
+version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92b9542ac025a8c02ed5d17b3fc031a111a384e859d0be3532ec4d58c40a0f28"
+checksum = "a36ea2c5907d64a9b4b5d3cc9f430e6c30f0509646b5e38eb275ca57c5bf29e2"
dependencies = [
- "bitflags 2.3.3",
+ "bitflags 2.4.0",
"gix-path",
"libc",
"serde",
@@ -1409,9 +1434,9 @@ dependencies = [
[[package]]
name = "gix-status"
-version = "0.2.0"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c54271ffb47bce5826be9214a3993d595c5285c1ec23c036d9b1012920f6ab0"
+checksum = "255a11459330a9a6ef59a5614b90c5661f04836c0f715cf68f8ca53726843d24"
dependencies = [
"bstr",
"filetime",
@@ -1422,16 +1447,15 @@ dependencies = [
"gix-index",
"gix-object",
"gix-path",
- "gix-pathspec",
"gix-worktree",
"thiserror",
]
[[package]]
name = "gix-submodule"
-version = "0.5.0"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bba78c8d12aa24370178453ec3a472ff08dfaa657d116229f57f2c9cd469a1c2"
+checksum = "02a3d7f60a95bdcaeb8981663c99d1c9f4de42aab1169524c949e948989809f9"
dependencies = [
"bstr",
"gix-config",
@@ -1444,9 +1468,9 @@ dependencies = [
[[package]]
name = "gix-tempfile"
-version = "11.0.0"
+version = "11.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "05cc2205cf10d99f70b96e04e16c55d4c7cf33efc151df1f793e29fd12a931f8"
+checksum = "388dd29114a86ec69b28d1e26d6d63a662300ecf61ab3f4cc578f7d7dc9e7e23"
dependencies = [
"dashmap",
"gix-fs",
@@ -1460,19 +1484,19 @@ dependencies = [
[[package]]
name = "gix-trace"
-version = "0.1.3"
+version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96b6d623a1152c3facb79067d6e2ecdae48130030cf27d6eb21109f13bd7b836"
+checksum = "b686a35799b53a9825575ca3f06481d0a053a409c4d97ffcf5ddd67a8760b497"
[[package]]
name = "gix-transport"
-version = "0.38.0"
+version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f209a93364e24f20319751bc11092272e2f3fe82bb72592b2822679cf5be752"
+checksum = "f731cfefc4d62468c6dd2053f5c6707828256a6d2f5488c1811e3f42c178b144"
dependencies = [
"async-std",
"async-trait",
- "base64",
+ "base64 0.21.4",
"bstr",
"curl",
"futures-io",
@@ -1492,9 +1516,9 @@ dependencies = [
[[package]]
name = "gix-traverse"
-version = "0.34.0"
+version = "0.35.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14d050ec7d4e1bb76abf0636cf4104fb915b70e54e3ced9a4427c999100ff38a"
+checksum = "df2112088122a0206592c84fbd42020db63b2ccaed66a0293779f2e5fbf80474"
dependencies = [
"gix-commitgraph",
"gix-date",
@@ -1508,9 +1532,9 @@ dependencies = [
[[package]]
name = "gix-url"
-version = "0.25.0"
+version = "0.25.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa9a4e69d57162242b32cc05e1b96681cb8e513210e3a0b4e89ff647a5b2ab50"
+checksum = "0c427a1a11ccfa53a4a2da47d9442c2241deee63a154bc15cc14b8312fbc4005"
dependencies = [
"bstr",
"gix-features",
@@ -1523,18 +1547,18 @@ dependencies = [
[[package]]
name = "gix-utils"
-version = "0.1.5"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b85d89dc728613e26e0ed952a19583744e7f5240fcd4aa30d6c824ffd8b52f0f"
+checksum = "9f82c41937f00e15a1f6cb0b55307f0ca1f77f4407ff2bf440be35aa688c6a3e"
dependencies = [
- "fastrand 2.0.0",
+ "fastrand 2.0.1",
]
[[package]]
name = "gix-validate"
-version = "0.8.0"
+version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e05cab2b03a45b866156e052aa38619f4ece4adcb2f79978bfc249bc3b21b8c5"
+checksum = "75b7d8e4274be69f284bbc7e6bb2ccf7065dbcdeba22d8c549f2451ae426883f"
dependencies = [
"bstr",
"thiserror",
@@ -1542,9 +1566,9 @@ dependencies = [
[[package]]
name = "gix-worktree"
-version = "0.27.0"
+version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ddaf79e721dba64fe726a42f297a3c8ed42e55cdc0d81ca68452f2def3c2d7fd"
+checksum = "7f1d0ae01dee14abe8c8117d78d7518f9a507de2dc4522546fbf4c444e9860b4"
dependencies = [
"bstr",
"gix-attributes",
@@ -1561,9 +1585,9 @@ dependencies = [
[[package]]
name = "gix-worktree-state"
-version = "0.4.0"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34a2fcccdcaf3c71c00a03df31c9aa459d444cabbec4ed9ca1fa64e43406bed4"
+checksum = "afef3c1cfe610ccfbca391515a1254662a648ce2635c9f60511eb1feb751fa01"
dependencies = [
"bstr",
"gix-features",
@@ -1581,9 +1605,9 @@ dependencies = [
[[package]]
name = "gix-worktree-stream"
-version = "0.6.0"
+version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee4b34b6f8c9347327682064627e3e72c1fc545849b6d4c183fdfa84af71af2c"
+checksum = "3c783c269ed30193a00becb20209aa89fb48dadbaf30c9f66082472da966106c"
dependencies = [
"gix-attributes",
"gix-features",
@@ -1611,9 +1635,9 @@ dependencies = [
[[package]]
name = "h2"
-version = "0.3.20"
+version = "0.3.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049"
+checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833"
dependencies = [
"bytes",
"fnv",
@@ -1621,7 +1645,7 @@ dependencies = [
"futures-sink",
"futures-util",
"http",
- "indexmap",
+ "indexmap 1.9.3",
"slab",
"tokio",
"tokio-util",
@@ -1636,9 +1660,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
[[package]]
name = "hashbrown"
-version = "0.14.0"
+version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12"
[[package]]
name = "heck"
@@ -1648,9 +1672,9 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
[[package]]
name = "hermit-abi"
-version = "0.3.2"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
[[package]]
name = "home"
@@ -1702,9 +1726,9 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
[[package]]
name = "httpdate"
-version = "1.0.2"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
[[package]]
name = "human_format"
@@ -1745,7 +1769,7 @@ dependencies = [
"futures-util",
"http",
"hyper",
- "rustls",
+ "rustls 0.21.7",
"tokio",
"tokio-rustls",
]
@@ -1765,17 +1789,6 @@ dependencies = [
[[package]]
name = "idna"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
-dependencies = [
- "matches",
- "unicode-bidi",
- "unicode-normalization",
-]
-
-[[package]]
-name = "idna"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
@@ -1805,6 +1818,16 @@ dependencies = [
]
[[package]]
+name = "indexmap"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.1",
+]
+
+[[package]]
name = "instant"
version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1840,7 +1863,7 @@ version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f"
dependencies = [
- "socket2 0.5.3",
+ "socket2 0.5.4",
"widestring",
"windows-sys",
"winreg",
@@ -1910,9 +1933,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
-version = "0.2.147"
+version = "0.2.149"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b"
[[package]]
name = "libz-ng-sys"
@@ -1950,9 +1973,9 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
[[package]]
name = "linux-raw-sys"
-version = "0.4.3"
+version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0"
+checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
[[package]]
name = "litrs"
@@ -1972,9 +1995,9 @@ dependencies = [
[[package]]
name = "log"
-version = "0.4.19"
+version = "0.4.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
dependencies = [
"value-bag",
]
@@ -1995,12 +2018,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
[[package]]
-name = "matches"
-version = "0.1.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
-
-[[package]]
name = "maybe-async"
version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2013,15 +2030,15 @@ dependencies = [
[[package]]
name = "memchr"
-version = "2.6.0"
+version = "2.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76fc44e2588d5b436dbc3c6cf62aef290f90dab6235744a93dfe1cc18f451e2c"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
[[package]]
name = "memmap2"
-version = "0.7.1"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f49388d20533534cd19360ad3d6a7dadc885944aa802ba3995040c5ec11288c6"
+checksum = "deaba38d7abf1d4cca21cc89e932e542ba2b9258664d2a9ef0e61512039c9375"
dependencies = [
"libc",
]
@@ -2081,9 +2098,9 @@ dependencies = [
[[package]]
name = "num-traits"
-version = "0.2.15"
+version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
dependencies = [
"autocfg",
]
@@ -2099,6 +2116,27 @@ dependencies = [
]
[[package]]
+name = "num_enum"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
+dependencies = [
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
name = "num_threads"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2109,9 +2147,9 @@ dependencies = [
[[package]]
name = "object"
-version = "0.31.1"
+version = "0.32.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1"
+checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
dependencies = [
"memchr",
]
@@ -2124,11 +2162,11 @@ checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
[[package]]
name = "openssl"
-version = "0.10.55"
+version = "0.10.57"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d"
+checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c"
dependencies = [
- "bitflags 1.3.2",
+ "bitflags 2.4.0",
"cfg-if",
"foreign-types",
"libc",
@@ -2145,7 +2183,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.29",
+ "syn 2.0.38",
]
[[package]]
@@ -2156,9 +2194,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
[[package]]
name = "openssl-sys"
-version = "0.9.90"
+version = "0.9.93"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6"
+checksum = "db4d56a4c0478783083cfafcc42493dd4a981d41669da64b4572a2a089b51b1d"
dependencies = [
"cc",
"libc",
@@ -2168,9 +2206,9 @@ dependencies = [
[[package]]
name = "parking"
-version = "2.1.0"
+version = "2.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e"
+checksum = "e52c774a4c39359c1d1c52e43f73dd91a75a614652c825408eec30c95a9b2067"
[[package]]
name = "parking_lot"
@@ -2203,9 +2241,9 @@ checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
[[package]]
name = "pin-project-lite"
-version = "0.2.10"
+version = "0.2.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c40d25201921e5ff0c862a505c6557ea88568a4e3ace775ab55e93f2f4f9d57"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
[[package]]
name = "pin-utils"
@@ -2214,6 +2252,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
+name = "piper"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4"
+dependencies = [
+ "atomic-waker",
+ "fastrand 2.0.1",
+ "futures-io",
+]
+
+[[package]]
name = "pkg-config"
version = "0.3.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2242,10 +2291,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
[[package]]
+name = "proc-macro-crate"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+dependencies = [
+ "once_cell",
+ "toml_edit",
+]
+
+[[package]]
name = "proc-macro2"
-version = "1.0.66"
+version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
dependencies = [
"unicode-ident",
]
@@ -2269,9 +2328,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
[[package]]
name = "quote"
-version = "1.0.31"
+version = "1.0.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
dependencies = [
"proc-macro2",
]
@@ -2308,9 +2367,9 @@ dependencies = [
[[package]]
name = "rayon"
-version = "1.7.0"
+version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
dependencies = [
"either",
"rayon-core",
@@ -2318,39 +2377,37 @@ dependencies = [
[[package]]
name = "rayon-core"
-version = "1.11.0"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
dependencies = [
- "crossbeam-channel",
"crossbeam-deque",
"crossbeam-utils",
- "num_cpus",
]
[[package]]
name = "redox_syscall"
-version = "0.2.16"
+version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
dependencies = [
"bitflags 1.3.2",
]
[[package]]
name = "redox_syscall"
-version = "0.3.5"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
dependencies = [
"bitflags 1.3.2",
]
[[package]]
name = "regex"
-version = "1.9.1"
+version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575"
+checksum = "d119d7c7ca818f8a53c300863d4f87566aac09943aef5b355bb83969dae75d87"
dependencies = [
"aho-corasick",
"memchr",
@@ -2360,9 +2417,9 @@ dependencies = [
[[package]]
name = "regex-automata"
-version = "0.3.3"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310"
+checksum = "465c6fc0621e4abc4187a2bda0937bfd4f722c2730b29562e19689ea796c9a4b"
dependencies = [
"aho-corasick",
"memchr",
@@ -2371,17 +2428,17 @@ dependencies = [
[[package]]
name = "regex-syntax"
-version = "0.7.4"
+version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2"
+checksum = "56d84fdd47036b038fc80dd333d10b6aab10d5d31f4a366e20014def75328d33"
[[package]]
name = "reqwest"
-version = "0.11.19"
+version = "0.11.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "20b9b67e2ca7dd9e9f9285b759de30ff538aab981abaaf7bc9bd90b84a0126c3"
+checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b"
dependencies = [
- "base64",
+ "base64 0.21.4",
"bytes",
"encoding_rs",
"futures-core",
@@ -2400,11 +2457,12 @@ dependencies = [
"once_cell",
"percent-encoding",
"pin-project-lite",
- "rustls",
- "rustls-pemfile",
+ "rustls 0.21.7",
+ "rustls-pemfile 1.0.3",
"serde",
"serde_json",
"serde_urlencoded",
+ "system-configuration",
"tokio",
"tokio-native-tls",
"tokio-rustls",
@@ -2437,13 +2495,27 @@ dependencies = [
"cc",
"libc",
"once_cell",
- "spin",
- "untrusted",
+ "spin 0.5.2",
+ "untrusted 0.7.1",
"web-sys",
"winapi",
]
[[package]]
+name = "ring"
+version = "0.17.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9babe80d5c16becf6594aa32ad2be8fe08498e7ae60b77de8df700e67f191d7e"
+dependencies = [
+ "cc",
+ "getrandom",
+ "libc",
+ "spin 0.9.8",
+ "untrusted 0.9.0",
+ "windows-sys",
+]
+
+[[package]]
name = "rustc-demangle"
version = "0.1.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2451,9 +2523,9 @@ checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
[[package]]
name = "rustix"
-version = "0.37.23"
+version = "0.37.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06"
+checksum = "d4eb579851244c2c03e7c24f501c3432bed80b8f720af1d6e5b0e0f01555a035"
dependencies = [
"bitflags 1.3.2",
"errno",
@@ -2465,46 +2537,82 @@ dependencies = [
[[package]]
name = "rustix"
-version = "0.38.4"
+version = "0.38.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5"
+checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3"
dependencies = [
- "bitflags 2.3.3",
+ "bitflags 2.4.0",
"errno",
"libc",
- "linux-raw-sys 0.4.3",
+ "linux-raw-sys 0.4.10",
"windows-sys",
]
[[package]]
name = "rustls"
-version = "0.21.6"
+version = "0.20.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99"
+dependencies = [
+ "log",
+ "ring 0.16.20",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d1feddffcfcc0b33f5c6ce9a29e341e4cd59c3f78e7ee45f4a40c038b1d6cbb"
+checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8"
dependencies = [
"log",
- "ring",
+ "ring 0.16.20",
"rustls-webpki",
"sct",
]
[[package]]
+name = "rustls-ffi"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9da52707cca59e6eef8a78f3ad8d04024254a168ed1b41eb4dfa9616eace781a"
+dependencies = [
+ "libc",
+ "log",
+ "num_enum",
+ "rustls 0.20.9",
+ "rustls-pemfile 0.2.1",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5eebeaeb360c87bfb72e84abdb3447159c0eaececf1bef2aecd65a8be949d1c9"
+dependencies = [
+ "base64 0.13.1",
+]
+
+[[package]]
name = "rustls-pemfile"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
dependencies = [
- "base64",
+ "base64 0.21.4",
]
[[package]]
name = "rustls-webpki"
-version = "0.101.4"
+version = "0.101.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d93931baf2d282fff8d3a532bbfd7653f734643161b87e3e01e59a04439bf0d"
+checksum = "3c7d5dece342910d9ba34d259310cae3e0154b873b35408b787b59bce53d34fe"
dependencies = [
- "ring",
- "untrusted",
+ "ring 0.16.20",
+ "untrusted 0.7.1",
]
[[package]]
@@ -2543,15 +2651,15 @@ version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
dependencies = [
- "ring",
- "untrusted",
+ "ring 0.16.20",
+ "untrusted 0.7.1",
]
[[package]]
name = "security-framework"
-version = "2.9.1"
+version = "2.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8"
+checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
dependencies = [
"bitflags 1.3.2",
"core-foundation",
@@ -2562,9 +2670,9 @@ dependencies = [
[[package]]
name = "security-framework-sys"
-version = "2.9.0"
+version = "2.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7"
+checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
dependencies = [
"core-foundation-sys",
"libc",
@@ -2572,29 +2680,29 @@ dependencies = [
[[package]]
name = "serde"
-version = "1.0.185"
+version = "1.0.189"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be9b6f69f1dfd54c3b568ffa45c310d6973a5e5148fd40cf515acaf38cf5bc31"
+checksum = "8e422a44e74ad4001bdc8eede9a4570ab52f71190e9c076d14369f38b9200537"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.185"
+version = "1.0.189"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc59dfdcbad1437773485e0367fea4b090a2e0a16d9ffc46af47764536a298ec"
+checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.29",
+ "syn 2.0.38",
]
[[package]]
name = "serde_json"
-version = "1.0.103"
+version = "1.0.107"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d03b412469450d4404fe8499a268edd7f8b79fecb074b0d812ad64ca21f4031b"
+checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
dependencies = [
"itoa",
"ryu",
@@ -2633,14 +2741,14 @@ checksum = "91d129178576168c589c9ec973feedf7d3126c01ac2bf08795109aa35b69fb8f"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.29",
+ "syn 2.0.38",
]
[[package]]
name = "sha1"
-version = "0.10.5"
+version = "0.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
dependencies = [
"cfg-if",
"cpufeatures",
@@ -2650,9 +2758,9 @@ dependencies = [
[[package]]
name = "sha1-asm"
-version = "0.5.1"
+version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "563d4f7100bc3fce234e5f37bbf63dc2752558964505ba6ac3f7204bdc59eaac"
+checksum = "2ba6947745e7f86be3b8af00b7355857085dbdf8901393c89514510eb61f4e21"
dependencies = [
"cc",
]
@@ -2664,6 +2772,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
[[package]]
+name = "shell-words"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
+
+[[package]]
name = "signal-hook"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2684,18 +2798,18 @@ dependencies = [
[[package]]
name = "slab"
-version = "0.4.8"
+version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
dependencies = [
"autocfg",
]
[[package]]
name = "smallvec"
-version = "1.11.0"
+version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
+checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
dependencies = [
"serde",
]
@@ -2712,9 +2826,9 @@ dependencies = [
[[package]]
name = "socket2"
-version = "0.5.3"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877"
+checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e"
dependencies = [
"libc",
"windows-sys",
@@ -2727,6 +2841,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+
+[[package]]
name = "static_assertions"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2745,9 +2865,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.29"
+version = "2.0.38"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a"
+checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
dependencies = [
"proc-macro2",
"quote",
@@ -2755,37 +2875,57 @@ dependencies = [
]
[[package]]
+name = "system-configuration"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "system-configuration-sys",
+]
+
+[[package]]
+name = "system-configuration-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
name = "tempfile"
-version = "3.6.0"
+version = "3.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6"
+checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
dependencies = [
- "autocfg",
"cfg-if",
- "fastrand 1.9.0",
- "redox_syscall 0.3.5",
- "rustix 0.37.23",
+ "fastrand 2.0.1",
+ "redox_syscall 0.4.1",
+ "rustix 0.38.21",
"windows-sys",
]
[[package]]
name = "thiserror"
-version = "1.0.44"
+version = "1.0.49"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90"
+checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.44"
+version = "1.0.49"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96"
+checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.29",
+ "syn 2.0.38",
]
[[package]]
@@ -2834,18 +2974,17 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
-version = "1.29.1"
+version = "1.33.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da"
+checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653"
dependencies = [
- "autocfg",
"backtrace",
"bytes",
"libc",
"mio",
"num_cpus",
"pin-project-lite",
- "socket2 0.4.9",
+ "socket2 0.5.4",
"windows-sys",
]
@@ -2865,15 +3004,15 @@ version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
dependencies = [
- "rustls",
+ "rustls 0.21.7",
"tokio",
]
[[package]]
name = "tokio-util"
-version = "0.7.8"
+version = "0.7.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d"
dependencies = [
"bytes",
"futures-core",
@@ -2884,6 +3023,23 @@ dependencies = [
]
[[package]]
+name = "toml_datetime"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+
+[[package]]
+name = "toml_edit"
+version = "0.19.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
+dependencies = [
+ "indexmap 2.0.2",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
name = "tower-service"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2891,11 +3047,10 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
[[package]]
name = "tracing"
-version = "0.1.37"
+version = "0.1.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+checksum = "ee2ef2af84856a50c1d430afce2fdded0a4ec7eda868db86409b4543df0797f9"
dependencies = [
- "cfg-if",
"pin-project-lite",
"tracing-attributes",
"tracing-core",
@@ -2903,29 +3058,29 @@ dependencies = [
[[package]]
name = "tracing-attributes"
-version = "0.1.26"
+version = "0.1.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.29",
+ "syn 2.0.38",
]
[[package]]
name = "tracing-core"
-version = "0.1.31"
+version = "0.1.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
dependencies = [
"once_cell",
]
[[package]]
name = "trust-dns-proto"
-version = "0.22.0"
+version = "0.23.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26"
+checksum = "559ac980345f7f5020883dd3bcacf176355225e01916f8c2efecad7534f682c6"
dependencies = [
"async-trait",
"cfg-if",
@@ -2934,9 +3089,9 @@ dependencies = [
"futures-channel",
"futures-io",
"futures-util",
- "idna 0.2.3",
+ "idna",
"ipnet",
- "lazy_static",
+ "once_cell",
"rand",
"smallvec",
"thiserror",
@@ -2948,16 +3103,17 @@ dependencies = [
[[package]]
name = "trust-dns-resolver"
-version = "0.22.0"
+version = "0.23.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe"
+checksum = "c723b0e608b24ad04c73b2607e0241b2c98fd79795a95e98b068b6966138a29d"
dependencies = [
"cfg-if",
"futures-util",
"ipconfig",
- "lazy_static",
"lru-cache",
+ "once_cell",
"parking_lot",
+ "rand",
"resolv-conf",
"smallvec",
"thiserror",
@@ -2974,9 +3130,9 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
[[package]]
name = "typenum"
-version = "1.16.0"
+version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
[[package]]
name = "uluru"
@@ -3001,9 +3157,9 @@ checksum = "98e90c70c9f0d4d1ee6d0a7d04aa06cb9bbd53d8cfbdd62a0269a7c2eb640552"
[[package]]
name = "unicode-ident"
-version = "1.0.11"
+version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
[[package]]
name = "unicode-normalization"
@@ -3021,13 +3177,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
[[package]]
+name = "untrusted"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
+[[package]]
name = "url"
-version = "2.4.0"
+version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
+checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
dependencies = [
"form_urlencoded",
- "idna 0.4.0",
+ "idna",
"percent-encoding",
]
@@ -3051,15 +3213,15 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]]
name = "waker-fn"
-version = "1.1.0"
+version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690"
[[package]]
name = "walkdir"
-version = "2.3.3"
+version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
dependencies = [
"same-file",
"winapi-util",
@@ -3101,7 +3263,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
- "syn 2.0.29",
+ "syn 2.0.38",
"wasm-bindgen-shared",
]
@@ -3135,7 +3297,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.29",
+ "syn 2.0.38",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -3157,6 +3319,16 @@ dependencies = [
]
[[package]]
+name = "webpki"
+version = "0.22.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53"
+dependencies = [
+ "ring 0.17.3",
+ "untrusted 0.9.0",
+]
+
+[[package]]
name = "webpki-roots"
version = "0.25.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3186,9 +3358,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
-version = "0.1.5"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
dependencies = [
"winapi",
]
@@ -3219,9 +3391,9 @@ dependencies = [
[[package]]
name = "windows-targets"
-version = "0.48.1"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
dependencies = [
"windows_aarch64_gnullvm",
"windows_aarch64_msvc",
@@ -3234,51 +3406,51 @@ dependencies = [
[[package]]
name = "windows_aarch64_gnullvm"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
[[package]]
name = "windows_aarch64_msvc"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
[[package]]
name = "windows_i686_gnu"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
[[package]]
name = "windows_i686_msvc"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
[[package]]
name = "windows_x86_64_gnu"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
[[package]]
name = "windows_x86_64_gnullvm"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
[[package]]
name = "windows_x86_64_msvc"
-version = "0.48.0"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]]
name = "winnow"
-version = "0.5.14"
+version = "0.5.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d09770118a7eb1ccaf4a594a221334119a44a814fcb0d31c5b85e83e97227a97"
+checksum = "0383266b19108dfc6314a56047aa545a1b4d1be60e799b4dbdd407b56402704b"
dependencies = [
"memchr",
]
diff --git a/vendor/gix/Cargo.toml b/vendor/gix/Cargo.toml
index bedeebaeb..0f5fa4db1 100644
--- a/vendor/gix/Cargo.toml
+++ b/vendor/gix/Cargo.toml
@@ -13,12 +13,11 @@
edition = "2021"
rust-version = "1.65"
name = "gix"
-version = "0.55.2"
+version = "0.56.0"
authors = ["Sebastian Thiel <sebastian.thiel@icloud.com>"]
include = [
"src/**/*",
"LICENSE-*",
- "CHANGELOG.md",
]
description = "Interact with git repositories just like git would"
license = "MIT OR Apache-2.0"
@@ -32,10 +31,6 @@ features = [
"blocking-http-transport-curl",
"serde",
]
-rustdoc-args = [
- "--cfg",
- "docsrs",
-]
[lib]
test = true
@@ -50,135 +45,144 @@ required-features = ["blocking-network-client"]
version = "1.12.0"
optional = true
+[dependencies.curl-for-configuration-only]
+version = "0.4"
+optional = true
+package = "curl"
+
[dependencies.document-features]
version = "0.2.0"
optional = true
[dependencies.gix-actor]
-version = "^0.28.0"
+version = "^0.28.1"
[dependencies.gix-archive]
-version = "^0.6.0"
+version = "^0.7.0"
optional = true
default-features = false
[dependencies.gix-attributes]
-version = "^0.20.0"
+version = "^0.20.1"
+optional = true
+
+[dependencies.gix-command]
+version = "^0.3.0"
optional = true
[dependencies.gix-commitgraph]
-version = "^0.22.0"
+version = "^0.22.1"
[dependencies.gix-config]
-version = "^0.31.0"
+version = "^0.32.0"
[dependencies.gix-credentials]
-version = "^0.21.0"
+version = "^0.22.0"
optional = true
[dependencies.gix-date]
-version = "^0.8.0"
+version = "^0.8.1"
[dependencies.gix-diff]
-version = "^0.37.0"
+version = "^0.38.0"
default-features = false
[dependencies.gix-discover]
-version = "^0.26.0"
+version = "^0.27.0"
[dependencies.gix-features]
-version = "^0.36.0"
+version = "^0.36.1"
features = [
"progress",
"once_cell",
]
[dependencies.gix-filter]
-version = "^0.6.0"
+version = "^0.7.0"
optional = true
[dependencies.gix-fs]
-version = "^0.8.0"
+version = "^0.8.1"
[dependencies.gix-glob]
-version = "^0.14.0"
+version = "^0.14.1"
[dependencies.gix-hash]
-version = "^0.13.1"
+version = "^0.13.2"
[dependencies.gix-hashtable]
-version = "^0.4.0"
+version = "^0.4.1"
[dependencies.gix-ignore]
-version = "^0.9.0"
+version = "^0.9.1"
optional = true
[dependencies.gix-index]
-version = "^0.26.0"
+version = "^0.27.0"
optional = true
[dependencies.gix-lock]
version = "^11.0.0"
[dependencies.gix-macros]
-version = "^0.1.0"
+version = "^0.1.1"
[dependencies.gix-mailmap]
-version = "^0.20.0"
+version = "^0.20.1"
optional = true
[dependencies.gix-negotiate]
-version = "^0.9.0"
+version = "^0.10.0"
optional = true
[dependencies.gix-object]
-version = "^0.38.0"
+version = "^0.39.0"
[dependencies.gix-odb]
-version = "^0.54.0"
+version = "^0.55.0"
[dependencies.gix-pack]
-version = "^0.44.0"
+version = "^0.45.0"
features = ["object-cache-dynamic"]
default-features = false
[dependencies.gix-path]
-version = "^0.10.0"
+version = "^0.10.1"
[dependencies.gix-pathspec]
-version = "^0.4.0"
+version = "^0.4.1"
optional = true
[dependencies.gix-prompt]
-version = "^0.7.0"
+version = "^0.8.0"
optional = true
[dependencies.gix-protocol]
-version = "^0.41.1"
+version = "^0.42.0"
optional = true
[dependencies.gix-ref]
-version = "^0.38.0"
+version = "^0.39.0"
[dependencies.gix-refspec]
-version = "^0.19.0"
+version = "^0.20.0"
[dependencies.gix-revision]
-version = "^0.23.0"
+version = "^0.24.0"
default-features = false
[dependencies.gix-revwalk]
-version = "^0.9.0"
+version = "^0.10.0"
[dependencies.gix-sec]
-version = "^0.10.0"
+version = "^0.10.1"
[dependencies.gix-status]
-version = "^0.2.0"
+version = "^0.3.0"
optional = true
[dependencies.gix-submodule]
-version = "^0.5.0"
+version = "^0.6.0"
optional = true
[dependencies.gix-tempfile]
@@ -186,35 +190,35 @@ version = "^11.0.0"
default-features = false
[dependencies.gix-trace]
-version = "^0.1.3"
+version = "^0.1.4"
[dependencies.gix-transport]
-version = "^0.38.0"
+version = "^0.39.0"
optional = true
[dependencies.gix-traverse]
-version = "^0.34.0"
+version = "^0.35.0"
[dependencies.gix-url]
-version = "^0.25.0"
+version = "^0.25.2"
[dependencies.gix-utils]
-version = "^0.1.5"
+version = "^0.1.6"
[dependencies.gix-validate]
-version = "^0.8.0"
+version = "^0.8.1"
[dependencies.gix-worktree]
-version = "^0.27.0"
+version = "^0.28.0"
optional = true
default-features = false
[dependencies.gix-worktree-state]
-version = "^0.4.0"
+version = "^0.5.0"
optional = true
[dependencies.gix-worktree-stream]
-version = "^0.6.0"
+version = "^0.7.0"
optional = true
[dependencies.once_cell]
@@ -294,17 +298,26 @@ attributes = [
"dep:gix-attributes",
"dep:gix-submodule",
"gix-worktree?/attributes",
+ "dep:gix-command",
]
basic = [
"blob-diff",
"revision",
"index",
]
-blob-diff = ["gix-diff/blob"]
+blob-diff = [
+ "gix-diff/blob",
+ "attributes",
+]
blocking-http-transport-curl = [
"blocking-network-client",
"gix-transport/http-client-curl",
]
+blocking-http-transport-curl-rustls = [
+ "blocking-http-transport-curl",
+ "dep:curl-for-configuration-only",
+ "curl-for-configuration-only?/rustls",
+]
blocking-http-transport-reqwest = [
"blocking-network-client",
"gix-transport/http-client-reqwest",
@@ -316,6 +329,10 @@ blocking-http-transport-reqwest-native-tls = [
blocking-http-transport-reqwest-rust-tls = [
"blocking-http-transport-reqwest",
"reqwest-for-configuration-only/rustls-tls",
+]
+blocking-http-transport-reqwest-rust-tls-trust-dns = [
+ "blocking-http-transport-reqwest",
+ "reqwest-for-configuration-only/rustls-tls",
"reqwest-for-configuration-only/trust-dns",
]
blocking-network-client = [
@@ -407,6 +424,7 @@ serde = [
"gix-credentials?/serde",
]
status = ["gix-status"]
+verbose-object-parsing-errors = ["gix-object/verbose-object-parsing-errors"]
worktree-archive = [
"gix-archive",
"worktree-stream",
diff --git a/vendor/gix/LICENSE-MIT b/vendor/gix/LICENSE-MIT
index b58e818f1..97c2fa7d8 100644
--- a/vendor/gix/LICENSE-MIT
+++ b/vendor/gix/LICENSE-MIT
@@ -1,5 +1,3 @@
-MIT License
-
Copyright (c) 2018-2021 Sebastian Thiel, and [contributors](https://github.com/byron/gitoxide/contributors).
Permission is hereby granted, free of charge, to any person obtaining a copy
diff --git a/vendor/gix/src/attribute_stack.rs b/vendor/gix/src/attribute_stack.rs
index 1aaca0f2b..66497def6 100644
--- a/vendor/gix/src/attribute_stack.rs
+++ b/vendor/gix/src/attribute_stack.rs
@@ -1,9 +1,7 @@
-use crate::bstr::BStr;
-use crate::types::AttributeStack;
-use crate::Repository;
-use gix_odb::FindExt;
use std::ops::{Deref, DerefMut};
+use crate::{bstr::BStr, types::AttributeStack, Repository};
+
/// Lifecycle
impl<'repo> AttributeStack<'repo> {
/// Create a new instance from a `repo` and the underlying pre-configured `stack`.
@@ -46,8 +44,7 @@ impl<'repo> AttributeStack<'repo> {
relative: impl AsRef<std::path::Path>,
is_dir: Option<bool>,
) -> std::io::Result<gix_worktree::stack::Platform<'_>> {
- self.inner
- .at_path(relative, is_dir, |id, buf| self.repo.objects.find_blob(id, buf))
+ self.inner.at_path(relative, is_dir, &self.repo.objects)
}
/// Obtain a platform for lookups from a repo-`relative` path, typically obtained from an index entry. `is_dir` should reflect
@@ -63,7 +60,6 @@ impl<'repo> AttributeStack<'repo> {
relative: impl Into<&'r BStr>,
is_dir: Option<bool>,
) -> std::io::Result<gix_worktree::stack::Platform<'_>> {
- self.inner
- .at_entry(relative, is_dir, |id, buf| self.repo.objects.find_blob(id, buf))
+ self.inner.at_entry(relative, is_dir, &self.repo.objects)
}
}
diff --git a/vendor/gix/src/clone/checkout.rs b/vendor/gix/src/clone/checkout.rs
index ece480a56..84a3fedbd 100644
--- a/vendor/gix/src/clone/checkout.rs
+++ b/vendor/gix/src/clone/checkout.rs
@@ -4,8 +4,6 @@ use crate::{clone::PrepareCheckout, Repository};
pub mod main_worktree {
use std::{path::PathBuf, sync::atomic::AtomicBool};
- use gix_odb::FindExt;
-
use crate::{clone::PrepareCheckout, Progress, Repository};
/// The error returned by [`PrepareCheckout::main_worktree()`].
@@ -26,7 +24,7 @@ pub mod main_worktree {
#[error(transparent)]
CheckoutOptions(#[from] crate::config::checkout_options::Error),
#[error(transparent)]
- IndexCheckout(#[from] gix_worktree_state::checkout::Error<gix_odb::find::existing_object::Error>),
+ IndexCheckout(#[from] gix_worktree_state::checkout::Error),
#[error("Failed to reopen object database as Arc (only if thread-safety wasn't compiled in)")]
OpenArcOdb(#[from] std::io::Error),
#[error("The HEAD reference could not be located")]
@@ -87,7 +85,7 @@ pub mod main_worktree {
let workdir = repo.work_dir().ok_or_else(|| Error::BareRepository {
git_dir: repo.git_dir().to_owned(),
})?;
- let root_tree = match repo.head()?.peel_to_id_in_place().transpose()? {
+ let root_tree = match repo.head()?.try_peel_to_id_in_place()? {
Some(id) => id.object().expect("downloaded from remote").peel_to_tree()?.id,
None => {
return Ok((
@@ -96,11 +94,10 @@ pub mod main_worktree {
))
}
};
- let index = gix_index::State::from_tree(&root_tree, |oid, buf| repo.objects.find_tree_iter(oid, buf).ok())
- .map_err(|err| Error::IndexFromTree {
- id: root_tree,
- source: err,
- })?;
+ let index = gix_index::State::from_tree(&root_tree, &repo.objects).map_err(|err| Error::IndexFromTree {
+ id: root_tree,
+ source: err,
+ })?;
let mut index = gix_index::File::from_state(index, repo.index_path());
let mut opts = repo
@@ -118,10 +115,7 @@ pub mod main_worktree {
let outcome = gix_worktree_state::checkout(
&mut index,
workdir,
- {
- let objects = repo.objects.clone().into_arc()?;
- move |oid, buf| objects.find_blob(oid, buf)
- },
+ repo.objects.clone().into_arc()?,
&files,
&bytes,
should_interrupt,
diff --git a/vendor/gix/src/clone/fetch/util.rs b/vendor/gix/src/clone/fetch/util.rs
index db9bc0a1c..627201301 100644
--- a/vendor/gix/src/clone/fetch/util.rs
+++ b/vendor/gix/src/clone/fetch/util.rs
@@ -1,6 +1,5 @@
use std::{borrow::Cow, convert::TryInto, io::Write};
-use gix_odb::Find;
use gix_ref::{
transaction::{LogChange, RefLog},
FullNameRef,
@@ -107,7 +106,7 @@ pub fn update_head(
repo.refs
.transaction()
.packed_refs(gix_ref::file::transaction::PackedRefs::DeletionsAndNonSymbolicUpdates(
- Box::new(|oid, buf| repo.objects.try_find(&oid, buf).map(|obj| obj.map(|obj| obj.kind))),
+ Box::new(&repo.objects),
))
.prepare(
{
diff --git a/vendor/gix/src/commit.rs b/vendor/gix/src/commit.rs
index 2cc8226f5..ce5dee4d6 100644
--- a/vendor/gix/src/commit.rs
+++ b/vendor/gix/src/commit.rs
@@ -28,7 +28,6 @@ pub mod describe {
use gix_hash::ObjectId;
use gix_hashtable::HashMap;
- use gix_odb::Find;
use crate::{bstr::BStr, ext::ObjectIdExt, Repository};
@@ -199,12 +198,7 @@ pub mod describe {
pub fn try_resolve(&self) -> Result<Option<Resolution<'repo>>, Error> {
// TODO: dirty suffix with respective dirty-detection
let mut graph = gix_revwalk::Graph::new(
- |id, buf| {
- self.repo
- .objects
- .try_find(id, buf)
- .map(|r| r.and_then(gix_object::Data::try_into_commit_iter))
- },
+ &self.repo.objects,
gix_commitgraph::Graph::from_info_dir(self.repo.objects.store_ref().path().join("info").as_ref()).ok(),
);
let outcome = gix_revision::describe(
diff --git a/vendor/gix/src/config/cache/access.rs b/vendor/gix/src/config/cache/access.rs
index 3e763c028..464a0bf4d 100644
--- a/vendor/gix/src/config/cache/access.rs
+++ b/vendor/gix/src/config/cache/access.rs
@@ -20,8 +20,7 @@ use crate::{
impl Cache {
#[cfg(feature = "blob-diff")]
pub(crate) fn diff_algorithm(&self) -> Result<gix_diff::blob::Algorithm, config::diff::algorithm::Error> {
- use crate::config::cache::util::ApplyLeniencyDefault;
- use crate::config::diff::algorithm::Error;
+ use crate::config::{cache::util::ApplyLeniencyDefault, diff::algorithm::Error};
self.diff_algorithm
.get_or_try_init(|| {
let name = self
@@ -39,6 +38,97 @@ impl Cache {
.copied()
}
+ #[cfg(feature = "blob-diff")]
+ pub(crate) fn diff_drivers(&self) -> Result<Vec<gix_diff::blob::Driver>, config::diff::drivers::Error> {
+ use crate::config::cache::util::ApplyLeniencyDefault;
+ let mut out = Vec::<gix_diff::blob::Driver>::new();
+ for section in self
+ .resolved
+ .sections_by_name("diff")
+ .into_iter()
+ .flatten()
+ .filter(|s| (self.filter_config_section)(s.meta()))
+ {
+ let Some(name) = section.header().subsection_name().filter(|n| !n.is_empty()) else {
+ continue;
+ };
+
+ let driver = match out.iter_mut().find(|d| d.name == name) {
+ Some(existing) => existing,
+ None => {
+ out.push(gix_diff::blob::Driver {
+ name: name.into(),
+ ..Default::default()
+ });
+ out.last_mut().expect("just pushed")
+ }
+ };
+
+ if let Some(binary) = section.value_implicit("binary") {
+ driver.is_binary = config::tree::Diff::DRIVER_BINARY
+ .try_into_binary(binary)
+ .with_leniency(self.lenient_config)
+ .map_err(|err| config::diff::drivers::Error {
+ name: driver.name.clone(),
+ attribute: "binary",
+ source: Box::new(err),
+ })?;
+ }
+ if let Some(command) = section.value(config::tree::Diff::DRIVER_COMMAND.name) {
+ driver.command = command.into_owned().into();
+ }
+ if let Some(textconv) = section.value(config::tree::Diff::DRIVER_TEXTCONV.name) {
+ driver.binary_to_text_command = textconv.into_owned().into();
+ }
+ if let Some(algorithm) = section.value("algorithm") {
+ driver.algorithm = config::tree::Diff::DRIVER_ALGORITHM
+ .try_into_algorithm(algorithm)
+ .or_else(|err| match err {
+ config::diff::algorithm::Error::Unimplemented { .. } if self.lenient_config => {
+ Ok(gix_diff::blob::Algorithm::Histogram)
+ }
+ err => Err(err),
+ })
+ .with_lenient_default(self.lenient_config)
+ .map_err(|err| config::diff::drivers::Error {
+ name: driver.name.clone(),
+ attribute: "algorithm",
+ source: Box::new(err),
+ })?
+ .into();
+ }
+ }
+ Ok(out)
+ }
+
+ #[cfg(feature = "blob-diff")]
+ pub(crate) fn diff_pipeline_options(
+ &self,
+ ) -> Result<gix_diff::blob::pipeline::Options, config::diff::pipeline_options::Error> {
+ Ok(gix_diff::blob::pipeline::Options {
+ large_file_threshold_bytes: self.big_file_threshold()?,
+ fs: self.fs_capabilities()?,
+ })
+ }
+
+ #[cfg(feature = "blob-diff")]
+ pub(crate) fn diff_renames(&self) -> Result<Option<crate::diff::Rewrites>, crate::diff::new_rewrites::Error> {
+ self.diff_renames
+ .get_or_try_init(|| crate::diff::new_rewrites(&self.resolved, self.lenient_config))
+ .copied()
+ }
+
+ #[cfg(feature = "blob-diff")]
+ pub(crate) fn big_file_threshold(&self) -> Result<u64, config::unsigned_integer::Error> {
+ Ok(self
+ .resolved
+ .integer_by_key("core.bigFileThreshold")
+ .map(|number| Core::BIG_FILE_THRESHOLD.try_into_u64(number))
+ .transpose()
+ .with_leniency(self.lenient_config)?
+ .unwrap_or(512 * 1024 * 1024))
+ }
+
/// Returns a user agent for use with servers.
#[cfg(any(feature = "async-network-client", feature = "blocking-network-client"))]
pub(crate) fn user_agent_tuple(&self) -> (&'static str, Option<Cow<'static, str>>) {
@@ -54,6 +144,18 @@ impl Cache {
("agent", Some(gix_protocol::agent(agent).into()))
}
+ /// Return `true` if packet-tracing is enabled. Lenient and defaults to `false`.
+ #[cfg(any(feature = "async-network-client", feature = "blocking-network-client"))]
+ pub(crate) fn trace_packet(&self) -> bool {
+ use config::tree::Gitoxide;
+
+ use crate::config::tree::Section;
+ self.resolved
+ .boolean(Gitoxide.name(), None, Gitoxide::TRACE_PACKET.name())
+ .and_then(Result::ok)
+ .unwrap_or_default()
+ }
+
pub(crate) fn personas(&self) -> &identity::Personas {
self.personas
.get_or_init(|| identity::Personas::from_config_and_env(&self.resolved))
@@ -81,17 +183,6 @@ impl Cache {
})
}
- #[cfg(feature = "blob-diff")]
- pub(crate) fn diff_renames(
- &self,
- ) -> Result<Option<crate::object::tree::diff::Rewrites>, crate::object::tree::diff::rewrites::Error> {
- self.diff_renames
- .get_or_try_init(|| {
- crate::object::tree::diff::Rewrites::try_from_config(&self.resolved, self.lenient_config)
- })
- .copied()
- }
-
/// Returns (file-timeout, pack-refs timeout)
pub(crate) fn lock_timeout(
&self,
@@ -189,8 +280,8 @@ impl Cache {
)?;
let capabilities = self.fs_capabilities()?;
let filters = {
- let collection = Default::default();
- let mut filters = gix_filter::Pipeline::new(&collection, crate::filter::Pipeline::options(repo)?);
+ let mut filters =
+ gix_filter::Pipeline::new(repo.command_context()?, crate::filter::Pipeline::options(repo)?);
if let Ok(mut head) = repo.head() {
let ctx = filters.driver_context_mut();
ctx.ref_name = head.referent_name().map(|name| name.as_bstr().to_owned());
diff --git a/vendor/gix/src/config/cache/init.rs b/vendor/gix/src/config/cache/init.rs
index 3c482b154..faf3cc8de 100644
--- a/vendor/gix/src/config/cache/init.rs
+++ b/vendor/gix/src/config/cache/init.rs
@@ -9,7 +9,7 @@ use crate::{
config,
config::{
cache::util::ApplyLeniency,
- tree::{gitoxide, Core, Http},
+ tree::{gitoxide, Core, Gitoxide, Http},
Cache,
},
open,
@@ -143,6 +143,7 @@ impl Cache {
use util::config_bool;
let reflog = util::query_refupdates(&config, lenient_config)?;
+ let refs_namespace = util::query_refs_namespace(&config, lenient_config)?;
let ignore_case = config_bool(&config, &Core::IGNORE_CASE, "core.ignoreCase", false, lenient_config)?;
let use_multi_pack_index = config_bool(
&config,
@@ -166,6 +167,7 @@ impl Cache {
pack_cache_bytes,
object_cache_bytes,
reflog,
+ refs_namespace,
is_bare,
ignore_case,
hex_len,
@@ -222,10 +224,12 @@ impl Cache {
self.object_kind_hint = object_kind_hint;
}
let reflog = util::query_refupdates(config, self.lenient_config)?;
+ let refs_namespace = util::query_refs_namespace(config, self.lenient_config)?;
self.hex_len = hex_len;
self.ignore_case = ignore_case;
self.reflog = reflog;
+ self.refs_namespace = refs_namespace;
self.user_agent = Default::default();
self.personas = Default::default();
@@ -298,6 +302,7 @@ impl crate::Repository {
fn apply_changed_values(&mut self) {
self.refs.write_reflog = util::reflog_or_default(self.config.reflog, self.work_dir().is_some());
+ self.refs.namespace = self.config.refs_namespace.clone();
}
}
@@ -339,6 +344,15 @@ fn apply_environment_overrides(
),
(
"gitoxide",
+ None,
+ git_prefix,
+ &[{
+ let key = &Gitoxide::TRACE_PACKET;
+ (env(key), key.name)
+ }],
+ ),
+ (
+ "gitoxide",
Some(Cow::Borrowed("https".into())),
http_transport,
&[
@@ -377,6 +391,30 @@ fn apply_environment_overrides(
),
(
"gitoxide",
+ Some(Cow::Borrowed("http".into())),
+ git_prefix,
+ &[{
+ let key = &gitoxide::Http::SSL_NO_VERIFY;
+ (env(key), key.name)
+ }],
+ ),
+ (
+ "gitoxide",
+ Some(Cow::Borrowed("credentials".into())),
+ git_prefix,
+ &[
+ {
+ let key = &gitoxide::Credentials::TERMINAL_PROMPT;
+ (env(key), key.name)
+ },
+ {
+ let key = &gitoxide::Credentials::HELPER_STDERR;
+ (env(key), key.name)
+ },
+ ],
+ ),
+ (
+ "gitoxide",
Some(Cow::Borrowed("committer".into())),
identity,
&[
@@ -394,10 +432,20 @@ fn apply_environment_overrides(
"gitoxide",
Some(Cow::Borrowed("core".into())),
git_prefix,
- &[{
- let key = &gitoxide::Core::SHALLOW_FILE;
- (env(key), key.name)
- }],
+ &[
+ {
+ let key = &gitoxide::Core::SHALLOW_FILE;
+ (env(key), key.name)
+ },
+ {
+ let key = &gitoxide::Core::REFS_NAMESPACE;
+ (env(key), key.name)
+ },
+ {
+ let key = &gitoxide::Core::EXTERNAL_COMMAND_STDERR;
+ (env(key), key.name)
+ },
+ ],
),
(
"gitoxide",
@@ -500,6 +548,16 @@ fn apply_environment_overrides(
(env(key), key.name)
}],
),
+ #[cfg(feature = "blob-diff")]
+ (
+ "diff",
+ None,
+ git_prefix,
+ &[{
+ let key = &config::tree::Diff::EXTERNAL;
+ (env(key), key.name)
+ }],
+ ),
] {
let mut section = env_override
.new_section(section_name, subsection_name)
diff --git a/vendor/gix/src/config/cache/util.rs b/vendor/gix/src/config/cache/util.rs
index 4032b2cb1..4c1d6c693 100644
--- a/vendor/gix/src/config/cache/util.rs
+++ b/vendor/gix/src/config/cache/util.rs
@@ -55,6 +55,18 @@ pub(crate) fn query_refupdates(
.map_err(Into::into)
}
+pub(crate) fn query_refs_namespace(
+ config: &gix_config::File<'static>,
+ lenient_config: bool,
+) -> Result<Option<gix_ref::Namespace>, config::refs_namespace::Error> {
+ let key = "gitoxide.core.refsNamespace";
+ config
+ .string_by_key(key)
+ .map(|ns| gitoxide::Core::REFS_NAMESPACE.try_into_refs_namespace(ns))
+ .transpose()
+ .with_leniency(lenient_config)
+}
+
pub(crate) fn reflog_or_default(
config_reflog: Option<gix_ref::store::WriteReflog>,
has_worktree: bool,
diff --git a/vendor/gix/src/config/mod.rs b/vendor/gix/src/config/mod.rs
index 102c7a482..301e19ba2 100644
--- a/vendor/gix/src/config/mod.rs
+++ b/vendor/gix/src/config/mod.rs
@@ -76,6 +76,8 @@ pub enum Error {
ConfigUnsigned(#[from] unsigned_integer::Error),
#[error(transparent)]
ConfigTypedString(#[from] key::GenericErrorWithValue),
+ #[error(transparent)]
+ RefsNamespace(#[from] refs_namespace::Error),
#[error("Cannot handle objects formatted as {:?}", .name)]
UnsupportedObjectFormat { name: BString },
#[error(transparent)]
@@ -91,8 +93,11 @@ pub enum Error {
ResolveIncludes(#[from] gix_config::file::includes::Error),
#[error(transparent)]
FromEnv(#[from] gix_config::file::init::from_env::Error),
- #[error(transparent)]
- PathInterpolation(#[from] gix_config::path::interpolate::Error),
+ #[error("The path {path:?} at the 'core.worktree' configuration could not be interpolated")]
+ PathInterpolation {
+ path: BString,
+ source: gix_config::path::interpolate::Error,
+ },
#[error("{source:?} configuration overrides at open or init time could not be applied.")]
ConfigOverrides {
#[source]
@@ -117,6 +122,36 @@ pub mod diff {
Unimplemented { name: BString },
}
}
+
+ ///
+ pub mod pipeline_options {
+ /// The error produced when obtaining options needed to fill in [gix_diff::blob::pipeline::Options].
+ #[derive(Debug, thiserror::Error)]
+ #[allow(missing_docs)]
+ pub enum Error {
+ #[error(transparent)]
+ FilesystemCapabilities(#[from] crate::config::boolean::Error),
+ #[error(transparent)]
+ BigFileThreshold(#[from] crate::config::unsigned_integer::Error),
+ }
+ }
+
+ ///
+ pub mod drivers {
+ use crate::bstr::BString;
+
+ /// The error produced when obtaining a list of [Drivers](gix_diff::blob::Driver).
+ #[derive(Debug, thiserror::Error)]
+ #[error("Failed to parse value of 'diff.{name}.{attribute}'")]
+ pub struct Error {
+ /// The name fo the driver.
+ pub name: BString,
+ /// The name of the attribute we tried to parse.
+ pub attribute: &'static str,
+ /// The actual error that occurred.
+ pub source: Box<dyn std::error::Error + Send + Sync + 'static>,
+ }
+ }
}
///
@@ -149,6 +184,25 @@ pub mod checkout_options {
Attributes(#[from] super::attribute_stack::Error),
#[error(transparent)]
FilterPipelineOptions(#[from] crate::filter::pipeline::options::Error),
+ #[error(transparent)]
+ CommandContext(#[from] crate::config::command_context::Error),
+ }
+}
+
+///
+#[cfg(feature = "attributes")]
+pub mod command_context {
+ use crate::config;
+
+ /// The error produced when collecting all information relevant to spawned commands,
+ /// obtained via [Repository::command_context()](crate::Repository::command_context()).
+ #[derive(Debug, thiserror::Error)]
+ #[allow(missing_docs)]
+ pub enum Error {
+ #[error(transparent)]
+ Boolean(#[from] config::boolean::Error),
+ #[error(transparent)]
+ ParseBool(#[from] gix_config::value::Error),
}
}
@@ -409,6 +463,12 @@ pub mod refspec {
}
///
+pub mod refs_namespace {
+ /// The error produced when failing to parse a refspec from the configuration.
+ pub type Error = super::key::Error<gix_validate::reference::name::Error, 'v', 'i'>;
+}
+
+///
pub mod ssl_version {
/// The error produced when failing to parse a refspec from the configuration.
pub type Error = super::key::Error<std::convert::Infallible, 's', 'i'>;
@@ -504,6 +564,8 @@ pub(crate) struct Cache {
pub use_multi_pack_index: bool,
/// The representation of `core.logallrefupdates`, or `None` if the variable wasn't set.
pub reflog: Option<gix_ref::store::WriteReflog>,
+ /// The representation of `gitoxide.core.refsNamespace`, or `None` if the variable wasn't set.
+ pub refs_namespace: Option<gix_ref::Namespace>,
/// The configured user agent for presentation to servers.
pub(crate) user_agent: OnceCell<String>,
/// identities for later use, lazy initialization.
@@ -512,7 +574,7 @@ pub(crate) struct Cache {
pub(crate) url_rewrite: OnceCell<crate::remote::url::Rewrite>,
/// The lazy-loaded rename information for diffs.
#[cfg(feature = "blob-diff")]
- pub(crate) diff_renames: OnceCell<Option<crate::object::tree::diff::Rewrites>>,
+ pub(crate) diff_renames: OnceCell<Option<crate::diff::Rewrites>>,
/// A lazily loaded mapping to know which url schemes to allow
#[cfg(any(feature = "blocking-network-client", feature = "async-network-client"))]
pub(crate) url_scheme: OnceCell<crate::remote::url::SchemePermission>,
@@ -541,3 +603,23 @@ pub(crate) struct Cache {
environment: crate::open::permissions::Environment,
// TODO: make core.precomposeUnicode available as well.
}
+
+/// Utillities shared privately across the crate, for lack of a better place.
+pub(crate) mod shared {
+ use crate::{
+ config,
+ config::{cache::util::ApplyLeniency, tree::Core},
+ };
+
+ pub fn is_replace_refs_enabled(
+ config: &gix_config::File<'static>,
+ lenient: bool,
+ mut filter_config_section: fn(&gix_config::file::Metadata) -> bool,
+ ) -> Result<Option<bool>, config::boolean::Error> {
+ config
+ .boolean_filter_by_key("core.useReplaceRefs", &mut filter_config_section)
+ .map(|b| Core::USE_REPLACE_REFS.enrich_error(b))
+ .transpose()
+ .with_leniency(lenient)
+ }
+}
diff --git a/vendor/gix/src/config/snapshot/access.rs b/vendor/gix/src/config/snapshot/access.rs
index 7dc593880..6b98cf42d 100644
--- a/vendor/gix/src/config/snapshot/access.rs
+++ b/vendor/gix/src/config/snapshot/access.rs
@@ -4,9 +4,8 @@ use std::borrow::Cow;
use gix_features::threading::OwnShared;
use gix_macros::momo;
-use crate::bstr::ByteSlice;
use crate::{
- bstr::{BStr, BString},
+ bstr::{BStr, BString, ByteSlice},
config::{CommitAutoRollback, Snapshot, SnapshotMut},
};
@@ -118,9 +117,13 @@ impl<'repo> SnapshotMut<'repo> {
}
let value = new_value.into();
key.validate(value)?;
- let current = self
- .config
- .set_raw_value(key.section().name(), None, key.name(), value)?;
+ let section = key.section();
+ let current = match section.parent() {
+ Some(parent) => self
+ .config
+ .set_raw_value(parent.name(), Some(section.name().into()), key.name(), value)?,
+ None => self.config.set_raw_value(section.name(), None, key.name(), value)?,
+ };
Ok(current.map(std::borrow::Cow::into_owned))
}
diff --git a/vendor/gix/src/config/snapshot/credential_helpers.rs b/vendor/gix/src/config/snapshot/credential_helpers.rs
index 189e74471..54499a1c3 100644
--- a/vendor/gix/src/config/snapshot/credential_helpers.rs
+++ b/vendor/gix/src/config/snapshot/credential_helpers.rs
@@ -2,11 +2,12 @@ use std::{borrow::Cow, convert::TryFrom};
pub use error::Error;
-use crate::config::cache::util::IgnoreEmptyPath;
+use crate::config::cache::util::ApplyLeniency;
use crate::{
bstr::{ByteSlice, ByteVec},
config::{
- tree::{credential, Core, Credential, Key},
+ cache::util::IgnoreEmptyPath,
+ tree::{credential, gitoxide::Credentials, Core, Credential, Key},
Snapshot,
},
};
@@ -25,6 +26,8 @@ mod error {
},
#[error("core.askpass could not be read")]
CoreAskpass(#[from] gix_config::path::interpolate::Error),
+ #[error(transparent)]
+ BooleanConfig(#[from] crate::config::boolean::Error),
}
}
@@ -144,16 +147,27 @@ impl Snapshot<'_> {
.transpose()
.ignore_empty()?
.map(|c| Cow::Owned(c.into_owned())),
- ..Default::default()
+ mode: self
+ .try_boolean(Credentials::TERMINAL_PROMPT.logical_name().as_str())
+ .map(|val| Credentials::TERMINAL_PROMPT.enrich_error(val))
+ .transpose()
+ .with_leniency(self.repo.config.lenient_config)?
+ .and_then(|val| (!val).then_some(gix_prompt::Mode::Disable))
+ .unwrap_or_default(),
}
- .apply_environment(allow_git_env, allow_ssh_env, allow_git_env);
+ .apply_environment(allow_git_env, allow_ssh_env, false /* terminal prompt */);
Ok((
gix_credentials::helper::Cascade {
programs,
use_http_path,
// The default ssh implementation uses binaries that do their own auth, so our passwords aren't used.
query_user_only: url.scheme == gix_url::Scheme::Ssh,
- ..Default::default()
+ stderr: self
+ .try_boolean(Credentials::HELPER_STDERR.logical_name().as_str())
+ .map(|val| Credentials::HELPER_STDERR.enrich_error(val))
+ .transpose()
+ .with_leniency(self.repo.options.lenient_config)?
+ .unwrap_or(true),
},
gix_credentials::helper::Action::get_for_url(url.to_bstring()),
prompt_options,
diff --git a/vendor/gix/src/config/tree/sections/core.rs b/vendor/gix/src/config/tree/sections/core.rs
index 2ec5c279e..15ad9f947 100644
--- a/vendor/gix/src/config/tree/sections/core.rs
+++ b/vendor/gix/src/config/tree/sections/core.rs
@@ -8,13 +8,16 @@ impl Core {
pub const ABBREV: Abbrev = Abbrev::new_with_validate("abbrev", &config::Tree::CORE, validate::Abbrev);
/// The `core.bare` key.
pub const BARE: keys::Boolean = keys::Boolean::new_boolean("bare", &config::Tree::CORE);
+ /// The `core.bigFileThreshold` key.
+ pub const BIG_FILE_THRESHOLD: keys::UnsignedInteger =
+ keys::UnsignedInteger::new_unsigned_integer("bigFileThreshold", &config::Tree::CORE);
/// The `core.checkStat` key.
pub const CHECK_STAT: CheckStat =
CheckStat::new_with_validate("checkStat", &config::Tree::CORE, validate::CheckStat);
/// The `core.deltaBaseCacheLimit` key.
pub const DELTA_BASE_CACHE_LIMIT: keys::UnsignedInteger =
keys::UnsignedInteger::new_unsigned_integer("deltaBaseCacheLimit", &config::Tree::CORE)
- .with_environment_override("GITOXIDE_PACK_CACHE_MEMORY")
+ .with_environment_override("GIX_PACK_CACHE_MEMORY")
.with_note("if unset, we default to a small 64 slot fixed-size cache that holds at most 64 full delta base objects of any size. Set to 0 to deactivate it entirely");
/// The `core.disambiguate` key.
pub const DISAMBIGUATE: Disambiguate =
@@ -95,6 +98,7 @@ impl Section for Core {
&[
&Self::ABBREV,
&Self::BARE,
+ &Self::BIG_FILE_THRESHOLD,
&Self::CHECK_STAT,
&Self::DELTA_BASE_CACHE_LIMIT,
&Self::DISAMBIGUATE,
diff --git a/vendor/gix/src/config/tree/sections/diff.rs b/vendor/gix/src/config/tree/sections/diff.rs
index 7c467b8f5..0ebc13711 100644
--- a/vendor/gix/src/config/tree/sections/diff.rs
+++ b/vendor/gix/src/config/tree/sections/diff.rs
@@ -1,6 +1,6 @@
use crate::{
config,
- config::tree::{keys, Diff, Key, Section},
+ config::tree::{keys, Diff, Key, Section, SubSectionRequirement},
};
impl Diff {
@@ -17,6 +17,24 @@ impl Diff {
);
/// The `diff.renames` key.
pub const RENAMES: Renames = Renames::new_renames("renames", &config::Tree::DIFF);
+
+ /// The `diff.<driver>.command` key.
+ pub const DRIVER_COMMAND: keys::String = keys::String::new_string("command", &config::Tree::DIFF)
+ .with_subsection_requirement(Some(SubSectionRequirement::Parameter("driver")));
+ /// The `diff.<driver>.textconv` key.
+ pub const DRIVER_TEXTCONV: keys::String = keys::String::new_string("textconv", &config::Tree::DIFF)
+ .with_subsection_requirement(Some(SubSectionRequirement::Parameter("driver")));
+ /// The `diff.<driver>.algorithm` key.
+ pub const DRIVER_ALGORITHM: Algorithm =
+ Algorithm::new_with_validate("algorithm", &config::Tree::DIFF, validate::Algorithm)
+ .with_subsection_requirement(Some(SubSectionRequirement::Parameter("driver")));
+ /// The `diff.<driver>.binary` key.
+ pub const DRIVER_BINARY: Binary = Binary::new_with_validate("binary", &config::Tree::DIFF, validate::Binary)
+ .with_subsection_requirement(Some(SubSectionRequirement::Parameter("driver")));
+
+ /// The `diff.external` key.
+ pub const EXTERNAL: keys::Program =
+ keys::Program::new_program("external", &config::Tree::DIFF).with_environment_override("GIT_EXTERNAL_DIFF");
}
impl Section for Diff {
@@ -25,7 +43,16 @@ impl Section for Diff {
}
fn keys(&self) -> &[&dyn Key] {
- &[&Self::ALGORITHM, &Self::RENAME_LIMIT, &Self::RENAMES]
+ &[
+ &Self::ALGORITHM,
+ &Self::RENAME_LIMIT,
+ &Self::RENAMES,
+ &Self::DRIVER_COMMAND,
+ &Self::DRIVER_TEXTCONV,
+ &Self::DRIVER_ALGORITHM,
+ &Self::DRIVER_BINARY,
+ &Self::EXTERNAL,
+ ]
}
}
@@ -35,6 +62,9 @@ pub type Algorithm = keys::Any<validate::Algorithm>;
/// The `diff.renames` key.
pub type Renames = keys::Any<validate::Renames>;
+/// The `diff.<driver>.binary` key.
+pub type Binary = keys::Any<validate::Binary>;
+
mod algorithm {
use std::borrow::Cow;
@@ -67,6 +97,38 @@ mod algorithm {
}
}
+mod binary {
+ use crate::config::tree::diff::Binary;
+
+ impl Binary {
+ /// Convert `value` into a tri-state boolean that can take the special value `auto`, resulting in `None`, or is a boolean.
+ /// If `None` is given, it's treated as implicit boolean `true`, as this method is made to be used
+ /// with [`gix_config::file::section::Body::value_implicit()`].
+ pub fn try_into_binary(
+ &'static self,
+ value: Option<std::borrow::Cow<'_, crate::bstr::BStr>>,
+ ) -> Result<Option<bool>, crate::config::key::GenericErrorWithValue> {
+ Ok(match value {
+ None => Some(true),
+ Some(value) => {
+ if value.as_ref() == "auto" {
+ None
+ } else {
+ Some(
+ gix_config::Boolean::try_from(value.as_ref())
+ .map(|b| b.0)
+ .map_err(|err| {
+ crate::config::key::GenericErrorWithValue::from_value(self, value.into_owned())
+ .with_source(err)
+ })?,
+ )
+ }
+ }
+ })
+ }
+ }
+}
+
mod renames {
use crate::{
bstr::ByteSlice,
@@ -125,4 +187,12 @@ mod validate {
Ok(())
}
}
+
+ pub struct Binary;
+ impl keys::Validate for Binary {
+ fn validate(&self, value: &BStr) -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
+ Diff::DRIVER_BINARY.try_into_binary(Some(value.into()))?;
+ Ok(())
+ }
+ }
}
diff --git a/vendor/gix/src/config/tree/sections/fetch.rs b/vendor/gix/src/config/tree/sections/fetch.rs
index 32db7be5f..9b618913d 100644
--- a/vendor/gix/src/config/tree/sections/fetch.rs
+++ b/vendor/gix/src/config/tree/sections/fetch.rs
@@ -45,8 +45,7 @@ mod algorithm {
&'static self,
name: std::borrow::Cow<'_, crate::bstr::BStr>,
) -> Result<crate::remote::fetch::negotiate::Algorithm, crate::config::key::GenericErrorWithValue> {
- use crate::bstr::ByteSlice;
- use crate::remote::fetch::negotiate::Algorithm;
+ use crate::{bstr::ByteSlice, remote::fetch::negotiate::Algorithm};
Ok(match name.as_ref().as_bytes() {
b"noop" => Algorithm::Noop,
diff --git a/vendor/gix/src/config/tree/sections/gitoxide.rs b/vendor/gix/src/config/tree/sections/gitoxide.rs
index 966d5af7c..a3b054412 100644
--- a/vendor/gix/src/config/tree/sections/gitoxide.rs
+++ b/vendor/gix/src/config/tree/sections/gitoxide.rs
@@ -14,6 +14,8 @@ impl Gitoxide {
pub const COMMIT: Commit = Commit;
/// The `gitoxide.committer` section.
pub const COMMITTER: Committer = Committer;
+ /// The `gitoxide.credentials` section.
+ pub const CREDENTIALS: Credentials = Credentials;
/// The `gitoxide.http` section.
pub const HTTP: Http = Http;
/// The `gitoxide.https` section.
@@ -31,6 +33,9 @@ impl Gitoxide {
pub const USER_AGENT: keys::Any = keys::Any::new("userAgent", &config::Tree::GITOXIDE).with_note(
"The user agent presented on the git protocol layer, serving as fallback for when no `http.userAgent` is set",
);
+ /// The `gitoxide.tracePacket` Key.
+ pub const TRACE_PACKET: keys::Boolean = keys::Boolean::new_boolean("tracePacket", &config::Tree::GITOXIDE)
+ .with_environment_override("GIT_TRACE_PACKET");
}
impl Section for Gitoxide {
@@ -39,7 +44,7 @@ impl Section for Gitoxide {
}
fn keys(&self) -> &[&dyn Key] {
- &[&Self::USER_AGENT]
+ &[&Self::USER_AGENT, &Self::TRACE_PACKET]
}
fn sub_sections(&self) -> &[&dyn Section] {
@@ -49,6 +54,7 @@ impl Section for Gitoxide {
&Self::CORE,
&Self::COMMIT,
&Self::COMMITTER,
+ &Self::CREDENTIALS,
&Self::HTTP,
&Self::HTTPS,
&Self::OBJECTS,
@@ -69,6 +75,20 @@ mod subsections {
#[derive(Copy, Clone, Default)]
pub struct Core;
+ /// The `gitoxide.allow.protocolFromUser` key.
+ pub type RefsNamespace = keys::Any<super::validate::RefsNamespace>;
+
+ impl RefsNamespace {
+ /// Derive the negotiation algorithm identified by `name`, case-sensitively.
+ pub fn try_into_refs_namespace(
+ &'static self,
+ name: std::borrow::Cow<'_, crate::bstr::BStr>,
+ ) -> Result<gix_ref::Namespace, crate::config::refs_namespace::Error> {
+ gix_ref::namespace::expand(name.as_ref())
+ .map_err(|err| crate::config::key::Error::from_value(self, name.into_owned()).with_source(err))
+ }
+ }
+
impl Core {
/// The `gitoxide.core.defaultPackCacheMemoryLimit` key.
pub const DEFAULT_PACK_CACHE_MEMORY_LIMIT: keys::UnsignedInteger =
@@ -95,6 +115,20 @@ mod subsections {
/// It controls whether or not long running filter driver processes can use the 'delay' capability.
pub const FILTER_PROCESS_DELAY: keys::Boolean =
keys::Boolean::new_boolean("filterProcessDelay", &Gitoxide::CORE);
+
+ /// The `gitoxide.core.externalCommandStderr` key (default `true`).
+ ///
+ /// If `true`, the default, `stderr` of worktree filter programs, or any other git-context bearing command
+ /// invoked will be inherited.
+ /// If `false`, it will be suppressed completely.
+ pub const EXTERNAL_COMMAND_STDERR: keys::Boolean =
+ keys::Boolean::new_boolean("externalCommandStderr", &Gitoxide::CORE)
+ .with_environment_override("GIX_EXTERNAL_COMMAND_STDERR");
+
+ /// The `gitoxide.core.refsNamespace` key.
+ pub const REFS_NAMESPACE: RefsNamespace =
+ keys::Any::new_with_validate("refsNamespace", &Gitoxide::CORE, super::validate::RefsNamespace)
+ .with_environment_override("GIT_NAMESPACE");
}
impl Section for Core {
@@ -109,6 +143,8 @@ mod subsections {
&Self::USE_STDEV,
&Self::SHALLOW_FILE,
&Self::FILTER_PROCESS_DELAY,
+ &Self::EXTERNAL_COMMAND_STDERR,
+ &Self::REFS_NAMESPACE,
]
}
@@ -154,6 +190,14 @@ mod subsections {
http::SslVersion::new_ssl_version("sslVersionMax", &Gitoxide::HTTP).with_note(
"entirely new to set the upper bound for the allowed ssl version range. Overwrites the max bound of `http.sslVersion` if set. Min and Max must be set to become effective.",
);
+ /// The `gitoxide.http.sslNoVerify` key.
+ ///
+ /// If set, disable SSL verification. Using this is discouraged as it can lead to
+ /// various security risks. An example where this may be needed is when an internal
+ /// git server uses a self-signed certificate and the user accepts the associated security risks.
+ pub const SSL_NO_VERIFY: keys::Boolean = keys::Boolean::new_boolean("sslNoVerify", &Gitoxide::HTTP)
+ .with_environment_override("GIT_SSL_NO_VERIFY")
+ .with_note("used to disable SSL verification. When this is enabled it takes priority over http.sslVerify");
/// The `gitoxide.http.proxyAuthMethod` key.
pub const PROXY_AUTH_METHOD: http::ProxyAuthMethod =
http::ProxyAuthMethod::new_proxy_auth_method("proxyAuthMethod", &Gitoxide::HTTP)
@@ -174,6 +218,7 @@ mod subsections {
&Self::CONNECT_TIMEOUT,
&Self::SSL_VERSION_MIN,
&Self::SSL_VERSION_MAX,
+ &Self::SSL_NO_VERIFY,
&Self::PROXY_AUTH_METHOD,
]
}
@@ -375,7 +420,7 @@ mod subsections {
pub const CACHE_LIMIT: keys::UnsignedInteger =
keys::UnsignedInteger::new_unsigned_integer("cacheLimit", &Gitoxide::OBJECTS)
.with_note("If unset or 0, there is no object cache")
- .with_environment_override("GITOXIDE_OBJECT_CACHE_MEMORY");
+ .with_environment_override("GIX_OBJECT_CACHE_MEMORY");
/// The `gitoxide.objects.noReplace` key.
pub const NO_REPLACE: keys::Boolean = keys::Boolean::new_boolean("noReplace", &Gitoxide::OBJECTS);
/// The `gitoxide.objects.replaceRefBase` key.
@@ -424,6 +469,37 @@ mod subsections {
}
}
+ /// The `credentials` sub-section.
+ #[derive(Copy, Clone, Default)]
+ pub struct Credentials;
+ impl Credentials {
+ /// The `gitoxide.credentials.terminalPrompt` key.
+ pub const TERMINAL_PROMPT: keys::Boolean = keys::Boolean::new_boolean("terminalPrompt", &Gitoxide::CREDENTIALS)
+ .with_note("This is a custom addition to provide an alternative to the respective environment variable.")
+ .with_environment_override("GIT_TERMINAL_PROMPT");
+
+ /// The `gitoxide.credentials.helperStderr` key to control what happens with the credential helpers `stderr`.
+ ///
+ /// If `true`, the default, `stderr` of credential helper programs will be inherited, just like with `git`.
+ /// If `false`, will be suppressed completely.
+ pub const HELPER_STDERR: keys::Boolean = keys::Boolean::new_boolean("helperStderr", &Gitoxide::CREDENTIALS)
+ .with_environment_override("GIX_CREDENTIALS_HELPER_STDERR");
+ }
+
+ impl Section for Credentials {
+ fn name(&self) -> &str {
+ "credentials"
+ }
+
+ fn keys(&self) -> &[&dyn Key] {
+ &[&Self::TERMINAL_PROMPT, &Self::HELPER_STDERR]
+ }
+
+ fn parent(&self) -> Option<&dyn Section> {
+ Some(&Tree::GITOXIDE)
+ }
+ }
+
/// The `commit` sub-section.
#[derive(Copy, Clone, Default)]
pub struct Commit;
@@ -451,7 +527,7 @@ mod subsections {
}
}
}
-pub use subsections::{Allow, Author, Commit, Committer, Core, Http, Https, Objects, Pathspec, Ssh, User};
+pub use subsections::{Allow, Author, Commit, Committer, Core, Credentials, Http, Https, Objects, Pathspec, Ssh, User};
pub mod validate {
use std::error::Error;
@@ -467,4 +543,12 @@ pub mod validate {
Ok(())
}
}
+
+ pub struct RefsNamespace;
+ impl Validate for RefsNamespace {
+ fn validate(&self, value: &BStr) -> Result<(), Box<dyn Error + Send + Sync + 'static>> {
+ super::Core::REFS_NAMESPACE.try_into_refs_namespace(value.into())?;
+ Ok(())
+ }
+ }
}
diff --git a/vendor/gix/src/config/tree/sections/http.rs b/vendor/gix/src/config/tree/sections/http.rs
index f45c37076..4fc733564 100644
--- a/vendor/gix/src/config/tree/sections/http.rs
+++ b/vendor/gix/src/config/tree/sections/http.rs
@@ -10,6 +10,9 @@ impl Http {
.with_deviation(
"accepts the new 'default' value which means to use the curl default just like the empty string does",
);
+ /// The `http.sslVerify` key.
+ pub const SSL_VERIFY: keys::Boolean = keys::Boolean::new_boolean("sslVerify", &config::Tree::HTTP)
+ .with_note("also see the `gitoxide.http.sslNoVerify` key");
/// The `http.proxy` key.
pub const PROXY: keys::String =
keys::String::new_string("proxy", &config::Tree::HTTP).with_deviation("fails on strings with illformed UTF-8");
@@ -58,6 +61,7 @@ impl Section for Http {
fn keys(&self) -> &[&dyn Key] {
&[
&Self::SSL_VERSION,
+ &Self::SSL_VERIFY,
&Self::PROXY,
&Self::PROXY_AUTH_METHOD,
&Self::VERSION,
diff --git a/vendor/gix/src/create.rs b/vendor/gix/src/create.rs
index 1ef63b9aa..00971ec05 100644
--- a/vendor/gix/src/create.rs
+++ b/vendor/gix/src/create.rs
@@ -230,7 +230,7 @@ pub fn into(
Ok(gix_discover::repository::Path::from_dot_git_dir(
dot_git,
if bare {
- gix_discover::repository::Kind::Bare
+ gix_discover::repository::Kind::PossiblyBare
} else {
gix_discover::repository::Kind::WorkTree { linked_git_dir: None }
},
diff --git a/vendor/gix/src/diff.rs b/vendor/gix/src/diff.rs
index b10819293..af3c98704 100644
--- a/vendor/gix/src/diff.rs
+++ b/vendor/gix/src/diff.rs
@@ -15,3 +15,130 @@ pub mod rename {
RenamesAndCopies,
}
}
+
+///
+#[cfg(feature = "blob-diff")]
+mod utils {
+ use gix_diff::{rewrites::Copies, Rewrites};
+
+ use crate::{
+ config::{cache::util::ApplyLeniency, tree::Diff},
+ diff::rename::Tracking,
+ Repository,
+ };
+
+ ///
+ pub mod new_rewrites {
+ /// The error returned by [`new_rewrites()`](super::new_rewrites()).
+ #[derive(Debug, thiserror::Error)]
+ #[allow(missing_docs)]
+ pub enum Error {
+ #[error(transparent)]
+ ConfigDiffRenames(#[from] crate::config::key::GenericError),
+ #[error(transparent)]
+ ConfigDiffRenameLimit(#[from] crate::config::unsigned_integer::Error),
+ }
+ }
+
+ ///
+ pub mod resource_cache {
+ /// The error returned by [`resource_cache()`](super::resource_cache()).
+ #[derive(Debug, thiserror::Error)]
+ #[allow(missing_docs)]
+ pub enum Error {
+ #[error(transparent)]
+ DiffAlgorithm(#[from] crate::config::diff::algorithm::Error),
+ #[error(transparent)]
+ WorktreeFilterOptions(#[from] crate::filter::pipeline::options::Error),
+ #[error(transparent)]
+ DiffDrivers(#[from] crate::config::diff::drivers::Error),
+ #[error(transparent)]
+ DiffPipelineOptions(#[from] crate::config::diff::pipeline_options::Error),
+ #[error(transparent)]
+ CommandContext(#[from] crate::config::command_context::Error),
+ #[error(transparent)]
+ AttributeStack(#[from] crate::config::attribute_stack::Error),
+ }
+ }
+
+ /// Create an instance by reading all relevant information from the `config`uration, while being `lenient` or not.
+ /// Returns `Ok(None)` if nothing is configured.
+ ///
+ /// Note that missing values will be defaulted similar to what git does.
+ #[allow(clippy::result_large_err)]
+ pub fn new_rewrites(
+ config: &gix_config::File<'static>,
+ lenient: bool,
+ ) -> Result<Option<Rewrites>, new_rewrites::Error> {
+ let key = "diff.renames";
+ let copies = match config
+ .boolean_by_key(key)
+ .map(|value| Diff::RENAMES.try_into_renames(value))
+ .transpose()
+ .with_leniency(lenient)?
+ {
+ Some(renames) => match renames {
+ Tracking::Disabled => return Ok(None),
+ Tracking::Renames => None,
+ Tracking::RenamesAndCopies => Some(Copies::default()),
+ },
+ None => return Ok(None),
+ };
+
+ let default = Rewrites::default();
+ Ok(Rewrites {
+ copies,
+ limit: config
+ .integer_by_key("diff.renameLimit")
+ .map(|value| Diff::RENAME_LIMIT.try_into_usize(value))
+ .transpose()
+ .with_leniency(lenient)?
+ .unwrap_or(default.limit),
+ ..default
+ }
+ .into())
+ }
+
+ /// Return a low-level utility to efficiently prepare a the blob-level diff operation between two resources,
+ /// and cache these diffable versions so that matrix-like MxN diffs are efficient.
+ ///
+ /// `repo` is used to obtain the needed configuration values, and `index` is used to potentially read `.gitattributes`
+ /// files from which may affect the diff operation.
+ /// `mode` determines how the diffable files will look like, and also how fast, in average, these conversions are.
+ /// `attribute_source` controls where `.gitattributes` will be read from, and it's typically adjusted based on the
+ /// `roots` - if there are no worktree roots, `.gitattributes` are also not usually read from worktrees.
+ /// `roots` provide information about where to get diffable data from, so source and destination can either be sourced from
+ /// a worktree, or from the object database, or both.
+ pub fn resource_cache(
+ repo: &Repository,
+ index: &gix_index::State,
+ mode: gix_diff::blob::pipeline::Mode,
+ attribute_source: gix_worktree::stack::state::attributes::Source,
+ roots: gix_diff::blob::pipeline::WorktreeRoots,
+ ) -> Result<gix_diff::blob::Platform, resource_cache::Error> {
+ let diff_algo = repo.config.diff_algorithm()?;
+ let diff_cache = gix_diff::blob::Platform::new(
+ gix_diff::blob::platform::Options {
+ algorithm: Some(diff_algo),
+ skip_internal_diff_if_external_is_configured: false,
+ },
+ gix_diff::blob::Pipeline::new(
+ roots,
+ gix_filter::Pipeline::new(repo.command_context()?, crate::filter::Pipeline::options(repo)?),
+ repo.config.diff_drivers()?,
+ repo.config.diff_pipeline_options()?,
+ ),
+ mode,
+ repo.attributes_only(
+ // TODO(perf): this could benefit from not having to build an intermediate index,
+ // and traverse the a tree directly.
+ index,
+ attribute_source,
+ )?
+ .inner,
+ );
+ Ok(diff_cache)
+ }
+}
+#[cfg(feature = "blob-diff")]
+pub use utils::{new_rewrites, resource_cache};
diff --git a/vendor/gix/src/ext/object_id.rs b/vendor/gix/src/ext/object_id.rs
index a4515022b..d4d946766 100644
--- a/vendor/gix/src/ext/object_id.rs
+++ b/vendor/gix/src/ext/object_id.rs
@@ -8,10 +8,9 @@ pub type AncestorsIter<Find> = Ancestors<Find, fn(&gix_hash::oid) -> bool, ances
/// An extension trait to add functionality to [`ObjectId`]s.
pub trait ObjectIdExt: Sealed {
/// Create an iterator over the ancestry of the commits reachable from this id, which must be a commit.
- fn ancestors<Find, E>(self, find: Find) -> AncestorsIter<Find>
+ fn ancestors<Find>(self, find: Find) -> AncestorsIter<Find>
where
- Find: for<'a> FnMut(&gix_hash::oid, &'a mut Vec<u8>) -> Result<gix_object::CommitRefIter<'a>, E>,
- E: std::error::Error + Send + Sync + 'static;
+ Find: gix_object::Find;
/// Infuse this object id `repo` access.
fn attach(self, repo: &crate::Repository) -> crate::Id<'_>;
@@ -20,10 +19,9 @@ pub trait ObjectIdExt: Sealed {
impl Sealed for ObjectId {}
impl ObjectIdExt for ObjectId {
- fn ancestors<Find, E>(self, find: Find) -> AncestorsIter<Find>
+ fn ancestors<Find>(self, find: Find) -> AncestorsIter<Find>
where
- Find: for<'a> FnMut(&gix_hash::oid, &'a mut Vec<u8>) -> Result<gix_object::CommitRefIter<'a>, E>,
- E: std::error::Error + Send + Sync + 'static,
+ Find: gix_object::Find,
{
Ancestors::new(Some(self), ancestors::State::default(), find)
}
diff --git a/vendor/gix/src/ext/rev_spec.rs b/vendor/gix/src/ext/rev_spec.rs
index ed7dc0460..caa58e2c7 100644
--- a/vendor/gix/src/ext/rev_spec.rs
+++ b/vendor/gix/src/ext/rev_spec.rs
@@ -12,6 +12,7 @@ impl RevSpecExt for gix_revision::Spec {
fn attach(self, repo: &crate::Repository) -> crate::revision::Spec<'_> {
crate::revision::Spec {
inner: self,
+ path: None,
first_ref: None,
second_ref: None,
repo,
diff --git a/vendor/gix/src/ext/tree.rs b/vendor/gix/src/ext/tree.rs
index 56b832b84..9aacc9d58 100644
--- a/vendor/gix/src/ext/tree.rs
+++ b/vendor/gix/src/ext/tree.rs
@@ -1,6 +1,5 @@
use std::borrow::BorrowMut;
-use gix_hash::oid;
use gix_object::TreeRefIter;
use gix_traverse::tree::breadthfirst;
@@ -16,11 +15,11 @@ pub trait TreeIterExt: Sealed {
fn traverse<StateMut, Find, V>(
&self,
state: StateMut,
- find: Find,
+ objects: Find,
delegate: &mut V,
) -> Result<(), breadthfirst::Error>
where
- Find: for<'a> FnMut(&oid, &'a mut Vec<u8>) -> Option<TreeRefIter<'a>>,
+ Find: gix_object::Find,
StateMut: BorrowMut<breadthfirst::State>,
V: gix_traverse::tree::Visit;
}
@@ -31,15 +30,15 @@ impl<'d> TreeIterExt for TreeRefIter<'d> {
fn traverse<StateMut, Find, V>(
&self,
state: StateMut,
- find: Find,
+ objects: Find,
delegate: &mut V,
) -> Result<(), breadthfirst::Error>
where
- Find: for<'a> FnMut(&oid, &'a mut Vec<u8>) -> Option<TreeRefIter<'a>>,
+ Find: gix_object::Find,
StateMut: BorrowMut<breadthfirst::State>,
V: gix_traverse::tree::Visit,
{
- breadthfirst(self.clone(), state, find, delegate)
+ breadthfirst(*self, state, objects, delegate)
}
}
diff --git a/vendor/gix/src/filter.rs b/vendor/gix/src/filter.rs
index b106840a7..f05e332a2 100644
--- a/vendor/gix/src/filter.rs
+++ b/vendor/gix/src/filter.rs
@@ -2,7 +2,7 @@
use std::borrow::Cow;
pub use gix_filter as plumbing;
-use gix_odb::{Find, FindExt};
+use gix_object::Find;
use crate::{
bstr::BStr,
@@ -32,6 +32,8 @@ pub mod pipeline {
name: BString,
source: gix_config::value::Error,
},
+ #[error(transparent)]
+ CommandContext(#[from] config::command_context::Error),
}
}
@@ -111,7 +113,7 @@ impl<'repo> Pipeline<'repo> {
/// Create a new instance by extracting all necessary information and configuration from a `repo` along with `cache` for accessing
/// attributes. The `index` is used for some filters which may access it under very specific circumstances.
pub fn new(repo: &'repo Repository, cache: gix_worktree::Stack) -> Result<Self, pipeline::options::Error> {
- let pipeline = gix_filter::Pipeline::new(cache.attributes_collection(), Self::options(repo)?);
+ let pipeline = gix_filter::Pipeline::new(repo.command_context()?, Self::options(repo)?);
Ok(Pipeline {
inner: pipeline,
cache,
@@ -141,16 +143,14 @@ impl<'repo> Pipeline<'repo> {
where
R: std::io::Read,
{
- let entry = self
- .cache
- .at_path(rela_path, Some(false), |id, buf| self.repo.objects.find_blob(id, buf))?;
+ let entry = self.cache.at_path(rela_path, Some(false), &self.repo.objects)?;
Ok(self.inner.convert_to_git(
src,
rela_path,
&mut |_, attrs| {
entry.matching_attributes(attrs);
},
- &mut |buf| -> Result<_, gix_odb::find::Error> {
+ &mut |buf| -> Result<_, gix_object::find::Error> {
let entry = match index.entry_by_path(gix_path::into_bstr(rela_path).as_ref()) {
None => return Ok(None),
Some(entry) => entry,
@@ -175,9 +175,7 @@ impl<'repo> Pipeline<'repo> {
can_delay: gix_filter::driver::apply::Delay,
) -> Result<gix_filter::pipeline::convert::ToWorktreeOutcome<'input, '_>, pipeline::convert_to_worktree::Error>
{
- let entry = self
- .cache
- .at_entry(rela_path, Some(false), |id, buf| self.repo.objects.find_blob(id, buf))?;
+ let entry = self.cache.at_entry(rela_path, Some(false), &self.repo.objects)?;
Ok(self.inner.convert_to_worktree(
src,
rela_path,
diff --git a/vendor/gix/src/head/peel.rs b/vendor/gix/src/head/peel.rs
index 88e23636f..4ee116ed0 100644
--- a/vendor/gix/src/head/peel.rs
+++ b/vendor/gix/src/head/peel.rs
@@ -1,12 +1,14 @@
use crate::{
ext::{ObjectIdExt, ReferenceExt},
+ head::Kind,
Head,
};
mod error {
use crate::{object, reference};
- /// The error returned by [`Head::peel_to_id_in_place()`][super::Head::peel_to_id_in_place()] and [`Head::into_fully_peeled_id()`][super::Head::into_fully_peeled_id()].
+ /// The error returned by [`Head::peel_to_id_in_place()`](super::Head::try_peel_to_id_in_place())
+ /// and [`Head::into_fully_peeled_id()`](super::Head::try_into_peeled_id()).
#[derive(Debug, thiserror::Error)]
#[allow(missing_docs)]
pub enum Error {
@@ -19,13 +21,11 @@ mod error {
pub use error::Error;
-use crate::head::Kind;
-
///
-pub mod to_commit {
+pub mod into_id {
use crate::object;
- /// The error returned by [`Head::peel_to_commit_in_place()`][super::Head::peel_to_commit_in_place()].
+ /// The error returned by [`Head::into_peeled_id()`](super::Head::into_peeled_id()).
#[derive(Debug, thiserror::Error)]
#[allow(missing_docs)]
pub enum Error {
@@ -38,86 +38,122 @@ pub mod to_commit {
}
}
+///
+pub mod to_commit {
+ use crate::object;
+
+ /// The error returned by [`Head::peel_to_commit_in_place()`](super::Head::peel_to_commit_in_place()).
+ #[derive(Debug, thiserror::Error)]
+ #[allow(missing_docs)]
+ pub enum Error {
+ #[error(transparent)]
+ PeelToObject(#[from] super::to_object::Error),
+ #[error(transparent)]
+ ObjectKind(#[from] object::try_into::Error),
+ }
+}
+
+///
+pub mod to_object {
+ /// The error returned by [`Head::peel_to_object_in_place()`](super::Head::peel_to_object_in_place()).
+ #[derive(Debug, thiserror::Error)]
+ #[allow(missing_docs)]
+ pub enum Error {
+ #[error(transparent)]
+ Peel(#[from] super::Error),
+ #[error("Branch '{name}' does not have any commits")]
+ Unborn { name: gix_ref::FullName },
+ }
+}
+
impl<'repo> Head<'repo> {
- // TODO: tests
- /// Peel this instance to make obtaining its final target id possible, while returning an error on unborn heads.
- pub fn peeled(mut self) -> Result<Self, Error> {
- self.peel_to_id_in_place().transpose()?;
- Ok(self)
+ /// Peel this instance and consume it to make obtaining its final target id possible, while returning an error on unborn heads.
+ ///
+ /// The final target is obtained by following symbolic references and peeling tags to their final destination, which
+ /// typically is a commit, but can be any object.
+ pub fn into_peeled_id(mut self) -> Result<crate::Id<'repo>, into_id::Error> {
+ self.try_peel_to_id_in_place()?;
+ self.id().ok_or_else(|| match self.kind {
+ Kind::Symbolic(gix_ref::Reference { name, .. }) | Kind::Unborn(name) => into_id::Error::Unborn { name },
+ Kind::Detached { .. } => unreachable!("id can be returned after peeling"),
+ })
+ }
+
+ /// Peel this instance and consume it to make obtaining its final target object possible, while returning an error on unborn heads.
+ ///
+ /// The final target is obtained by following symbolic references and peeling tags to their final destination, which
+ /// typically is a commit, but can be any object as well.
+ pub fn into_peeled_object(mut self) -> Result<crate::Object<'repo>, to_object::Error> {
+ self.peel_to_object_in_place()
+ }
+
+ /// Consume this instance and transform it into the final object that it points to, or `Ok(None)` if the `HEAD`
+ /// reference is yet to be born.
+ ///
+ /// The final target is obtained by following symbolic references and peeling tags to their final destination, which
+ /// typically is a commit, but can be any object.
+ pub fn try_into_peeled_id(mut self) -> Result<Option<crate::Id<'repo>>, Error> {
+ self.try_peel_to_id_in_place()
}
- // TODO: tests
- // TODO: Fix this! It's not consistently peeling tags. The whole peeling business should be reconsidered to do what people usually
- // want which is to peel references, if present, and then peel objects with control over which object type to end at.
- // Finding a good interface for that isn't easy as ideally, it's an iterator that shows the intermediate objects so the user
- // can select which tag of a chain to choose.
/// Follow the symbolic reference of this head until its target object and peel it by following tag objects until there is no
/// more object to follow, and return that object id.
///
- /// Returns `None` if the head is unborn.
- pub fn peel_to_id_in_place(&mut self) -> Option<Result<crate::Id<'repo>, Error>> {
- Some(match &mut self.kind {
- Kind::Unborn(_name) => return None,
+ /// Returns `Ok(None)` if the head is unborn.
+ ///
+ /// The final target is obtained by following symbolic references and peeling tags to their final destination, which
+ /// typically is a commit, but can be any object.
+ pub fn try_peel_to_id_in_place(&mut self) -> Result<Option<crate::Id<'repo>>, Error> {
+ Ok(Some(match &mut self.kind {
+ Kind::Unborn(_name) => return Ok(None),
Kind::Detached {
peeled: Some(peeled), ..
- } => Ok((*peeled).attach(self.repo)),
+ } => (*peeled).attach(self.repo),
Kind::Detached { peeled: None, target } => {
- match target
- .attach(self.repo)
- .object()
- .map_err(Into::into)
- .and_then(|obj| obj.peel_tags_to_end().map_err(Into::into))
- .map(|peeled| peeled.id)
- {
- Ok(peeled) => {
- self.kind = Kind::Detached {
- peeled: Some(peeled),
- target: *target,
- };
- Ok(peeled.attach(self.repo))
+ let id = target.attach(self.repo);
+ if id.header()?.kind() == gix_object::Kind::Commit {
+ id
+ } else {
+ match id.object()?.peel_tags_to_end() {
+ Ok(obj) => {
+ self.kind = Kind::Detached {
+ peeled: Some(obj.id),
+ target: *target,
+ };
+ obj.id()
+ }
+ Err(err) => return Err(err.into()),
}
- Err(err) => Err(err),
}
}
Kind::Symbolic(r) => {
let mut nr = r.clone().attach(self.repo);
- let peeled = nr.peel_to_id_in_place().map_err(Into::into);
+ let peeled = nr.peel_to_id_in_place();
*r = nr.detach();
- peeled
+ peeled?
}
- })
+ }))
}
- // TODO: tests
- // TODO: something similar in `crate::Reference`
/// Follow the symbolic reference of this head until its target object and peel it by following tag objects until there is no
/// more object to follow, transform the id into a commit if possible and return that.
///
/// Returns an error if the head is unborn or if it doesn't point to a commit.
- pub fn peel_to_commit_in_place(&mut self) -> Result<crate::Commit<'repo>, to_commit::Error> {
- let id = self.peel_to_id_in_place().ok_or_else(|| to_commit::Error::Unborn {
- name: self.referent_name().expect("unborn").to_owned(),
- })??;
+ pub fn peel_to_object_in_place(&mut self) -> Result<crate::Object<'repo>, to_object::Error> {
+ let id = self
+ .try_peel_to_id_in_place()?
+ .ok_or_else(|| to_object::Error::Unborn {
+ name: self.referent_name().expect("unborn").to_owned(),
+ })?;
id.object()
- .map_err(|err| to_commit::Error::Peel(Error::FindExistingObject(err)))
- .and_then(|object| object.try_into_commit().map_err(Into::into))
+ .map_err(|err| to_object::Error::Peel(Error::FindExistingObject(err)))
}
- /// Consume this instance and transform it into the final object that it points to, or `None` if the `HEAD`
- /// reference is yet to be born.
- pub fn into_fully_peeled_id(self) -> Option<Result<crate::Id<'repo>, Error>> {
- Some(match self.kind {
- Kind::Unborn(_name) => return None,
- Kind::Detached {
- peeled: Some(peeled), ..
- } => Ok(peeled.attach(self.repo)),
- Kind::Detached { peeled: None, target } => target
- .attach(self.repo)
- .object()
- .map_err(Into::into)
- .and_then(|obj| obj.peel_tags_to_end().map_err(Into::into))
- .map(|obj| obj.id.attach(self.repo)),
- Kind::Symbolic(r) => r.attach(self.repo).peel_to_id_in_place().map_err(Into::into),
- })
+ /// Follow the symbolic reference of this head until its target object and peel it by following tag objects until there is no
+ /// more object to follow, transform the id into a commit if possible and return that.
+ ///
+ /// Returns an error if the head is unborn or if it doesn't point to a commit.
+ pub fn peel_to_commit_in_place(&mut self) -> Result<crate::Commit<'repo>, to_commit::Error> {
+ Ok(self.peel_to_object_in_place()?.try_into_commit()?)
}
}
diff --git a/vendor/gix/src/lib.rs b/vendor/gix/src/lib.rs
index 8218defc8..d4928b9de 100644
--- a/vendor/gix/src/lib.rs
+++ b/vendor/gix/src/lib.rs
@@ -82,10 +82,10 @@
//!
//! ### Feature Flags
#![cfg_attr(
- feature = "document-features",
- cfg_attr(doc, doc = ::document_features::document_features!())
+ all(doc, feature = "document-features"),
+ doc = ::document_features::document_features!()
)]
-#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
+#![cfg_attr(all(doc, feature = "document-features"), feature(doc_cfg, doc_auto_cfg))]
#![deny(missing_docs, rust_2018_idioms, unsafe_code)]
#![allow(clippy::result_large_err)]
diff --git a/vendor/gix/src/object/blob.rs b/vendor/gix/src/object/blob.rs
index ef19c302a..59629727f 100644
--- a/vendor/gix/src/object/blob.rs
+++ b/vendor/gix/src/object/blob.rs
@@ -5,61 +5,132 @@ use crate::{Blob, ObjectDetached};
pub mod diff {
use std::ops::Range;
- use crate::{bstr::ByteSlice, object::blob::diff::line::Change};
+ use gix_diff::blob::{platform::prepare_diff::Operation, ResourceKind};
+
+ use crate::{
+ bstr::ByteSlice,
+ object::{blob::diff::lines::Change, tree::diff::change::Event},
+ };
/// A platform to keep temporary information to perform line diffs on modified blobs.
///
- pub struct Platform<'old, 'new> {
- /// The previous version of the blob.
- pub old: crate::Object<'old>,
- /// The new version of the blob.
- pub new: crate::Object<'new>,
- /// The algorithm to use when calling [imara_diff::diff()][gix_diff::blob::diff()].
- /// This value is determined by the `diff.algorithm` configuration.
- pub algo: gix_diff::blob::Algorithm,
+ pub struct Platform<'a> {
+ /// The cache holding diffable data related to our blobs.
+ pub resource_cache: &'a mut gix_diff::blob::Platform,
}
///
pub mod init {
- /// The error returned by [`Platform::from_ids()`][super::Platform::from_ids()].
- #[derive(Debug, thiserror::Error)]
- #[allow(missing_docs)]
- pub enum Error {
- #[error("Could not find the previous blob or the new blob to diff against")]
- FindExisting(#[from] crate::object::find::existing::Error),
- #[error("Could not obtain diff algorithm from configuration")]
- DiffAlgorithm(#[from] crate::config::diff::algorithm::Error),
- }
+ /// The error returned by [`Platform::from_tree_change()`][super::Platform::from_tree_change()].
+ pub type Error = gix_diff::blob::platform::set_resource::Error;
}
- impl<'old, 'new> Platform<'old, 'new> {
- /// Produce a platform for performing various diffs after obtaining the object data of `previous_id` and `new_id`.
- ///
- /// Note that these objects are treated as raw data and are assumed to be blobs.
- pub fn from_ids(
- previous_id: &crate::Id<'old>,
- new_id: &crate::Id<'new>,
- ) -> Result<Platform<'old, 'new>, init::Error> {
- match previous_id
- .object()
- .and_then(|old| new_id.object().map(|new| (old, new)))
- {
- Ok((old, new)) => {
- let algo = match new_id.repo.config.diff_algorithm() {
- Ok(algo) => algo,
- Err(err) => return Err(err.into()),
- };
- Ok(Platform { old, new, algo })
+ impl<'a> Platform<'a> {
+ /// Produce a platform for performing various diffs after obtaining the data from a single `tree_change`.
+ pub fn from_tree_change(
+ tree_change: &crate::object::tree::diff::Change<'_, '_, '_>,
+ resource_cache: &'a mut gix_diff::blob::Platform,
+ ) -> Result<Platform<'a>, init::Error> {
+ match tree_change.event {
+ Event::Addition { entry_mode, id } => {
+ resource_cache.set_resource(
+ id.repo.object_hash().null(),
+ entry_mode.kind(),
+ tree_change.location,
+ ResourceKind::OldOrSource,
+ &id.repo.objects,
+ )?;
+ resource_cache.set_resource(
+ id.inner,
+ entry_mode.kind(),
+ tree_change.location,
+ ResourceKind::NewOrDestination,
+ &id.repo.objects,
+ )?;
+ }
+ Event::Deletion { entry_mode, id } => {
+ resource_cache.set_resource(
+ id.inner,
+ entry_mode.kind(),
+ tree_change.location,
+ ResourceKind::OldOrSource,
+ &id.repo.objects,
+ )?;
+ resource_cache.set_resource(
+ id.repo.object_hash().null(),
+ entry_mode.kind(),
+ tree_change.location,
+ ResourceKind::NewOrDestination,
+ &id.repo.objects,
+ )?;
+ }
+ Event::Modification {
+ previous_entry_mode,
+ previous_id,
+ entry_mode,
+ id,
+ } => {
+ resource_cache.set_resource(
+ previous_id.inner,
+ previous_entry_mode.kind(),
+ tree_change.location,
+ ResourceKind::OldOrSource,
+ &previous_id.repo.objects,
+ )?;
+ resource_cache.set_resource(
+ id.inner,
+ entry_mode.kind(),
+ tree_change.location,
+ ResourceKind::NewOrDestination,
+ &id.repo.objects,
+ )?;
+ }
+ Event::Rewrite {
+ source_location,
+ source_entry_mode,
+ source_id,
+ entry_mode,
+ id,
+ diff: _,
+ copy: _,
+ } => {
+ resource_cache.set_resource(
+ source_id.inner,
+ source_entry_mode.kind(),
+ source_location,
+ ResourceKind::OldOrSource,
+ &source_id.repo.objects,
+ )?;
+ resource_cache.set_resource(
+ id.inner,
+ entry_mode.kind(),
+ tree_change.location,
+ ResourceKind::NewOrDestination,
+ &id.repo.objects,
+ )?;
}
- Err(err) => Err(err.into()),
}
+ Ok(Self { resource_cache })
}
}
///
- pub mod line {
+ pub mod lines {
use crate::bstr::BStr;
+ /// The error returned by [Platform::lines()](super::Platform::lines()).
+ #[derive(Debug, thiserror::Error)]
+ #[allow(missing_docs)]
+ pub enum Error<E>
+ where
+ E: std::error::Error + Send + Sync + 'static,
+ {
+ #[error(transparent)]
+ ProcessHunk(E),
+ #[error(transparent)]
+ PrepareDiff(#[from] gix_diff::blob::platform::prepare_diff::Error),
+ }
+
/// A change to a hunk of lines.
pub enum Change<'a, 'data> {
/// Lines were added.
@@ -82,70 +153,91 @@ pub mod diff {
}
}
- impl<'old, 'new> Platform<'old, 'new> {
+ impl<'a> Platform<'a> {
/// Perform a diff on lines between the old and the new version of a blob, passing each hunk of lines to `process_hunk`.
- /// The diffing algorithm is determined by the `diff.algorithm` configuration.
- ///
- /// Note that you can invoke the diff more flexibly as well.
+ /// The diffing algorithm is determined by the `diff.algorithm` configuration, or individual diff drivers.
+ /// Note that `process_hunk` is not called if one of the involved resources are binary, but that can be determined
+ /// by introspecting the outcome.
// TODO: more tests (only tested insertion right now)
- pub fn lines<FnH, E>(&self, mut process_hunk: FnH) -> Result<(), E>
+ pub fn lines<FnH, E>(
+ &mut self,
+ mut process_hunk: FnH,
+ ) -> Result<gix_diff::blob::platform::prepare_diff::Outcome<'_>, lines::Error<E>>
where
- FnH: FnMut(line::Change<'_, '_>) -> Result<(), E>,
- E: std::error::Error,
+ FnH: FnMut(lines::Change<'_, '_>) -> Result<(), E>,
+ E: std::error::Error + Send + Sync + 'static,
{
- let input = self.line_tokens();
- let mut err = None;
- let mut lines = Vec::new();
- gix_diff::blob::diff(self.algo, &input, |before: Range<u32>, after: Range<u32>| {
- if err.is_some() {
- return;
+ self.resource_cache.options.skip_internal_diff_if_external_is_configured = false;
+
+ let prep = self.resource_cache.prepare_diff()?;
+ match prep.operation {
+ Operation::InternalDiff { algorithm } => {
+ let input = prep.interned_input();
+ let mut err = None;
+ let mut lines = Vec::new();
+
+ gix_diff::blob::diff(algorithm, &input, |before: Range<u32>, after: Range<u32>| {
+ if err.is_some() {
+ return;
+ }
+ lines.clear();
+ lines.extend(
+ input.before[before.start as usize..before.end as usize]
+ .iter()
+ .map(|&line| input.interner[line].as_bstr()),
+ );
+ let end_of_before = lines.len();
+ lines.extend(
+ input.after[after.start as usize..after.end as usize]
+ .iter()
+ .map(|&line| input.interner[line].as_bstr()),
+ );
+ let hunk_before = &lines[..end_of_before];
+ let hunk_after = &lines[end_of_before..];
+ if hunk_after.is_empty() {
+ err = process_hunk(Change::Deletion { lines: hunk_before }).err();
+ } else if hunk_before.is_empty() {
+ err = process_hunk(Change::Addition { lines: hunk_after }).err();
+ } else {
+ err = process_hunk(Change::Modification {
+ lines_before: hunk_before,
+ lines_after: hunk_after,
+ })
+ .err();
+ }
+ });
+
+ if let Some(err) = err {
+ return Err(lines::Error::ProcessHunk(err));
+ }
}
- lines.clear();
- lines.extend(
- input.before[before.start as usize..before.end as usize]
- .iter()
- .map(|&line| input.interner[line].as_bstr()),
- );
- let end_of_before = lines.len();
- lines.extend(
- input.after[after.start as usize..after.end as usize]
- .iter()
- .map(|&line| input.interner[line].as_bstr()),
- );
- let hunk_before = &lines[..end_of_before];
- let hunk_after = &lines[end_of_before..];
- if hunk_after.is_empty() {
- err = process_hunk(Change::Deletion { lines: hunk_before }).err();
- } else if hunk_before.is_empty() {
- err = process_hunk(Change::Addition { lines: hunk_after }).err();
- } else {
- err = process_hunk(Change::Modification {
- lines_before: hunk_before,
- lines_after: hunk_after,
- })
- .err();
+ Operation::ExternalCommand { .. } => {
+ unreachable!("we disabled that")
}
- });
-
- match err {
- Some(err) => Err(err),
- None => Ok(()),
- }
+ Operation::SourceOrDestinationIsBinary => {}
+ };
+ Ok(prep)
}
/// Count the amount of removed and inserted lines efficiently.
- pub fn line_counts(&self) -> gix_diff::blob::sink::Counter<()> {
- let tokens = self.line_tokens();
- gix_diff::blob::diff(self.algo, &tokens, gix_diff::blob::sink::Counter::default())
- }
+ /// Note that nothing will happen if one of the inputs is binary, and `None` will be returned.
+ pub fn line_counts(
+ &mut self,
+ ) -> Result<Option<gix_diff::blob::sink::Counter<()>>, gix_diff::blob::platform::prepare_diff::Error> {
+ self.resource_cache.options.skip_internal_diff_if_external_is_configured = false;
- /// Return a tokenizer which treats lines as smallest unit for use in a [diff operation][gix_diff::blob::diff()].
- ///
- /// The line separator is determined according to normal git rules and filters.
- pub fn line_tokens(&self) -> gix_diff::blob::intern::InternedInput<&[u8]> {
- // TODO: make use of `core.eol` and/or filters to do line-counting correctly. It's probably
- // OK to just know how these objects are saved to know what constitutes a line.
- gix_diff::blob::intern::InternedInput::new(self.old.data.as_bytes(), self.new.data.as_bytes())
+ let prep = self.resource_cache.prepare_diff()?;
+ match prep.operation {
+ Operation::InternalDiff { algorithm } => {
+ let tokens = prep.interned_input();
+ let counter = gix_diff::blob::diff(algorithm, &tokens, gix_diff::blob::sink::Counter::default());
+ Ok(Some(counter))
+ }
+ Operation::ExternalCommand { .. } => {
+ unreachable!("we disabled that")
+ }
+ Operation::SourceOrDestinationIsBinary => Ok(None),
+ }
}
}
}
diff --git a/vendor/gix/src/object/errors.rs b/vendor/gix/src/object/errors.rs
index 92789b6cb..db81daacb 100644
--- a/vendor/gix/src/object/errors.rs
+++ b/vendor/gix/src/object/errors.rs
@@ -20,12 +20,12 @@ pub mod find {
/// Indicate that an error occurred when trying to find an object.
#[derive(Debug, thiserror::Error)]
#[error(transparent)]
- pub struct Error(#[from] pub gix_odb::find::Error);
+ pub struct Error(#[from] pub gix_object::find::Error);
///
pub mod existing {
/// An object could not be found in the database, or an error occurred when trying to obtain it.
- pub type Error = gix_odb::find::existing::Error;
+ pub type Error = gix_object::find::existing::Error;
}
}
@@ -34,5 +34,5 @@ pub mod write {
/// An error to indicate writing to the loose object store failed.
#[derive(Debug, thiserror::Error)]
#[error(transparent)]
- pub struct Error(#[from] pub gix_odb::find::Error);
+ pub struct Error(#[from] pub gix_object::find::Error);
}
diff --git a/vendor/gix/src/object/tree/diff/change.rs b/vendor/gix/src/object/tree/diff/change.rs
index e6826d6ed..e4eb5f3df 100644
--- a/vendor/gix/src/object/tree/diff/change.rs
+++ b/vendor/gix/src/object/tree/diff/change.rs
@@ -1,17 +1,4 @@
-use crate::{bstr::BStr, Id};
-
-/// Information about the diff performed to detect similarity of a [Rewrite][Event::Rewrite].
-#[derive(Debug, Default, Clone, Copy, Eq, PartialEq)]
-pub struct DiffLineStats {
- /// The amount of lines to remove from the source to get to the destination.
- pub removals: u32,
- /// The amount of lines to add to the source to get to the destination.
- pub insertions: u32,
- /// The amount of lines of the previous state, in the source.
- pub before: u32,
- /// The amount of lines of the new state, in the destination.
- pub after: u32,
-}
+use crate::{bstr::BStr, diff::blob::DiffLineStats, Id};
/// An event emitted when finding differences between two trees.
#[derive(Debug, Clone, Copy)]
@@ -80,25 +67,25 @@ pub enum Event<'a, 'old, 'new> {
},
}
-impl<'a, 'old, 'new> Event<'a, 'old, 'new> {
- /// Produce a platform for performing a line-diff, or `None` if this is not a [`Modification`][Event::Modification]
- /// or one of the entries to compare is not a blob.
- pub fn diff(
+impl<'a, 'old, 'new> super::Change<'a, 'old, 'new> {
+ /// Produce a platform for performing a line-diff no matter whether the underlying [Event] is an addition, modification,
+ /// deletion or rewrite.
+ /// Use `resource_cache` to store the diffable data and possibly reuse previously stored data.
+ /// Afterwards the platform, which holds on to `resource_cache`, can be used to perform ready-made operations on the
+ /// pre-set resources.
+ ///
+ /// ### Warning about Memory Consumption
+ ///
+ /// `resource_cache` only grows, so one should call [`gix_diff::blob::Platform::clear_resource_cache`] occasionally.
+ pub fn diff<'b>(
&self,
- ) -> Option<Result<crate::object::blob::diff::Platform<'old, 'new>, crate::object::blob::diff::init::Error>> {
- match self {
- Event::Modification {
- previous_entry_mode,
- previous_id,
- entry_mode,
- id,
- } if entry_mode.is_blob() && previous_entry_mode.is_blob() => {
- Some(crate::object::blob::diff::Platform::from_ids(previous_id, id))
- }
- _ => None,
- }
+ resource_cache: &'b mut gix_diff::blob::Platform,
+ ) -> Result<crate::object::blob::diff::Platform<'b>, crate::object::blob::diff::init::Error> {
+ crate::object::blob::diff::Platform::from_tree_change(self, resource_cache)
}
+}
+impl<'a, 'old, 'new> Event<'a, 'old, 'new> {
/// Return the current mode of this instance.
pub fn entry_mode(&self) -> gix_object::tree::EntryMode {
match self {
diff --git a/vendor/gix/src/object/tree/diff/for_each.rs b/vendor/gix/src/object/tree/diff/for_each.rs
index 3932f9027..c1b76fbe6 100644
--- a/vendor/gix/src/object/tree/diff/for_each.rs
+++ b/vendor/gix/src/object/tree/diff/for_each.rs
@@ -1,14 +1,11 @@
use gix_object::TreeRefIter;
-use gix_odb::FindExt;
use super::{change, Action, Change, Platform};
use crate::{
bstr::BStr,
+ diff::{rewrites, rewrites::tracker},
ext::ObjectIdExt,
- object::tree::{
- diff,
- diff::{rewrites, tracked},
- },
+ object::tree::diff,
Repository, Tree,
};
@@ -20,12 +17,10 @@ pub enum Error {
Diff(#[from] gix_diff::tree::changes::Error),
#[error("The user-provided callback failed")]
ForEach(#[source] Box<dyn std::error::Error + Send + Sync + 'static>),
- #[error("Could not find blob for similarity checking")]
- FindExistingBlob(#[from] crate::object::find::existing::Error),
- #[error("Could not configure diff algorithm prior to checking similarity")]
- ConfigureDiffAlgorithm(#[from] crate::config::diff::algorithm::Error),
- #[error("Could not traverse tree to obtain possible sources for copies")]
- TraverseTreeForExhaustiveCopyDetection(#[from] gix_traverse::tree::breadthfirst::Error),
+ #[error(transparent)]
+ ResourceCache(#[from] crate::repository::diff::resource_cache::Error),
+ #[error("Failure during rename tracking")]
+ RenameTracking(#[from] tracker::emit::Error),
}
///
@@ -49,24 +44,59 @@ impl<'a, 'old> Platform<'a, 'old> {
where
E: std::error::Error + Sync + Send + 'static,
{
+ self.for_each_to_obtain_tree_inner(other, for_each, None)
+ }
+
+ /// Like [`Self::for_each_to_obtain_tree()`], but with a reusable `resource_cache` which is used to perform
+ /// diffs fast.
+ ///
+ /// Reusing it between multiple invocations saves a lot of IOps as it avoids the creation
+ /// of a temporary `resource_cache` that triggers reading or checking for multiple gitattribute files.
+ /// Note that it's recommended to call [`gix_diff::blob::Platform::clear_resource_cache()`] between the calls
+ /// to avoid runaway memory usage, as the cache isn't limited.
+ ///
+ /// Note that to do rename tracking like `git` does, one has to configure the `resource_cache` with
+ /// a conversion pipeline that uses [`gix_diff::blob::pipeline::Mode::ToGit`].
+ pub fn for_each_to_obtain_tree_with_cache<'new, E>(
+ &mut self,
+ other: &Tree<'new>,
+ resource_cache: &mut gix_diff::blob::Platform,
+ for_each: impl FnMut(Change<'_, 'old, 'new>) -> Result<Action, E>,
+ ) -> Result<Outcome, Error>
+ where
+ E: std::error::Error + Sync + Send + 'static,
+ {
+ self.for_each_to_obtain_tree_inner(other, for_each, Some(resource_cache))
+ }
+
+ fn for_each_to_obtain_tree_inner<'new, E>(
+ &mut self,
+ other: &Tree<'new>,
+ for_each: impl FnMut(Change<'_, 'old, 'new>) -> Result<Action, E>,
+ resource_cache: Option<&mut gix_diff::blob::Platform>,
+ ) -> Result<Outcome, Error>
+ where
+ E: std::error::Error + Sync + Send + 'static,
+ {
let repo = self.lhs.repo;
let mut delegate = Delegate {
src_tree: self.lhs,
other_repo: other.repo,
recorder: gix_diff::tree::Recorder::default().track_location(self.tracking),
visit: for_each,
- tracked: self.rewrites.map(|r| tracked::State::new(r, self.tracking)),
+ location: self.tracking,
+ tracked: self.rewrites.map(rewrites::Tracker::new),
err: None,
};
match gix_diff::tree::Changes::from(TreeRefIter::from_bytes(&self.lhs.data)).needed_to_obtain(
TreeRefIter::from_bytes(&other.data),
&mut self.state,
- |oid, buf| repo.objects.find_tree_iter(oid, buf),
+ &repo.objects,
&mut delegate,
) {
Ok(()) => {
let outcome = Outcome {
- rewrites: delegate.process_tracked_changes()?,
+ rewrites: delegate.process_tracked_changes(resource_cache)?,
};
match delegate.err {
Some(err) => Err(Error::ForEach(Box::new(err))),
@@ -88,7 +118,8 @@ struct Delegate<'a, 'old, 'new, VisitFn, E> {
other_repo: &'new Repository,
recorder: gix_diff::tree::Recorder,
visit: VisitFn,
- tracked: Option<tracked::State>,
+ tracked: Option<rewrites::Tracker<gix_diff::tree::visit::Change>>,
+ location: Option<gix_diff::tree::recorder::Location>,
err: Option<E>,
}
@@ -138,12 +169,25 @@ where
}
}
- fn process_tracked_changes(&mut self) -> Result<Option<rewrites::Outcome>, Error> {
+ fn process_tracked_changes(
+ &mut self,
+ diff_cache: Option<&mut gix_diff::blob::Platform>,
+ ) -> Result<Option<rewrites::Outcome>, Error> {
let tracked = match self.tracked.as_mut() {
Some(t) => t,
None => return Ok(None),
};
+ let repo = self.src_tree.repo;
+ let mut storage;
+ let diff_cache = match diff_cache {
+ Some(cache) => cache,
+ None => {
+ storage = repo.diff_resource_cache(gix_diff::blob::pipeline::Mode::ToGit, Default::default())?;
+ &mut storage
+ }
+ };
+
let outcome = tracked.emit(
|dest, source| match source {
Some(source) => {
@@ -152,14 +196,14 @@ where
location: dest.location,
event: diff::change::Event::Rewrite {
source_location: source.location,
- source_entry_mode: source.mode,
+ source_entry_mode: source.entry_mode,
source_id: source.id.attach(self.src_tree.repo),
entry_mode: mode,
id: oid.to_owned().attach(self.other_repo),
diff: source.diff,
copy: match source.kind {
- tracked::visit::Kind::RenameTarget => false,
- tracked::visit::Kind::CopyDestination => true,
+ tracker::visit::SourceKind::Rename => false,
+ tracker::visit::SourceKind::Copy => true,
},
},
};
@@ -181,7 +225,13 @@ where
&mut self.err,
),
},
- self.src_tree,
+ diff_cache,
+ &self.src_tree.repo.objects,
+ |push| {
+ self.src_tree
+ .traverse()
+ .breadthfirst(&mut tree_to_changes::Delegate::new(push, self.location))
+ },
)?;
Ok(Some(outcome))
}
@@ -234,3 +284,68 @@ where
}
}
}
+
+mod tree_to_changes {
+ use gix_diff::tree::visit::Change;
+ use gix_object::tree::EntryRef;
+
+ use crate::bstr::BStr;
+
+ pub struct Delegate<'a> {
+ push: &'a mut dyn FnMut(Change, &BStr),
+ recorder: gix_traverse::tree::Recorder,
+ }
+
+ impl<'a> Delegate<'a> {
+ pub fn new(
+ push: &'a mut dyn FnMut(Change, &BStr),
+ location: Option<gix_diff::tree::recorder::Location>,
+ ) -> Self {
+ let location = location.map(|t| match t {
+ gix_diff::tree::recorder::Location::FileName => gix_traverse::tree::recorder::Location::FileName,
+ gix_diff::tree::recorder::Location::Path => gix_traverse::tree::recorder::Location::Path,
+ });
+ Self {
+ push,
+ recorder: gix_traverse::tree::Recorder::default().track_location(location),
+ }
+ }
+ }
+
+ impl gix_traverse::tree::Visit for Delegate<'_> {
+ fn pop_front_tracked_path_and_set_current(&mut self) {
+ self.recorder.pop_front_tracked_path_and_set_current()
+ }
+
+ fn push_back_tracked_path_component(&mut self, component: &BStr) {
+ self.recorder.push_back_tracked_path_component(component)
+ }
+
+ fn push_path_component(&mut self, component: &BStr) {
+ self.recorder.push_path_component(component)
+ }
+
+ fn pop_path_component(&mut self) {
+ self.recorder.pop_path_component();
+ }
+
+ fn visit_tree(&mut self, _entry: &EntryRef<'_>) -> gix_traverse::tree::visit::Action {
+ gix_traverse::tree::visit::Action::Continue
+ }
+
+ fn visit_nontree(&mut self, entry: &EntryRef<'_>) -> gix_traverse::tree::visit::Action {
+ if entry.mode.is_blob() {
+ (self.push)(
+ Change::Modification {
+ previous_entry_mode: entry.mode,
+ previous_oid: gix_hash::ObjectId::null(entry.oid.kind()),
+ entry_mode: entry.mode,
+ oid: entry.oid.to_owned(),
+ },
+ self.recorder.path(),
+ );
+ }
+ gix_traverse::tree::visit::Action::Continue
+ }
+ }
+}
diff --git a/vendor/gix/src/object/tree/diff/mod.rs b/vendor/gix/src/object/tree/diff/mod.rs
index 5f7a041e4..858775610 100644
--- a/vendor/gix/src/object/tree/diff/mod.rs
+++ b/vendor/gix/src/object/tree/diff/mod.rs
@@ -1,6 +1,6 @@
use gix_diff::tree::recorder::Location;
-use crate::{bstr::BStr, Tree};
+use crate::{bstr::BStr, diff::Rewrites, Tree};
/// Returned by the `for_each` function to control flow.
#[derive(Default, Clone, Copy, PartialOrd, PartialEq, Ord, Eq, Hash)]
@@ -39,7 +39,7 @@ impl<'repo> Tree<'repo> {
/// try to access blobs to compute a similarity metric. Thus, it's more compatible to turn rewrite tracking off
/// using [`Platform::track_rewrites()`].
#[allow(clippy::result_large_err)]
- pub fn changes<'a>(&'a self) -> Result<Platform<'a, 'repo>, rewrites::Error> {
+ pub fn changes<'a>(&'a self) -> Result<Platform<'a, 'repo>, crate::diff::new_rewrites::Error> {
Ok(Platform {
state: Default::default(),
lhs: self,
@@ -58,34 +58,6 @@ pub struct Platform<'a, 'repo> {
rewrites: Option<Rewrites>,
}
-/// A structure to capture how to perform rename and copy tracking
-#[derive(Debug, Copy, Clone, PartialEq)]
-pub struct Rewrites {
- /// If `Some(…)`, do also find copies. `None` is the default which does not try to detect copies at all.
- ///
- /// Note that this is an even more expensive operation than detecting renames as files.
- pub copies: Option<rewrites::Copies>,
- /// The percentage of similarity needed for files to be considered renamed, defaulting to `Some(0.5)`.
- /// This field is similar to `git diff -M50%`.
- ///
- /// If `None`, files are only considered equal if their content matches 100%.
- /// Note that values greater than 1.0 have no different effect than 1.0.
- pub percentage: Option<f32>,
- /// The amount of files to consider for fuzzy rename or copy tracking. Defaults to 1000, meaning that only 1000*1000
- /// combinations can be tested for fuzzy matches, i.e. the ones that try to find matches by comparing similarity.
- /// If 0, there is no limit.
- ///
- /// If the limit would not be enough to test the entire set of combinations, the algorithm will trade in precision and not
- /// run the fuzzy version of identity tests at all. That way results are never partial.
- pub limit: usize,
-}
-
-///
-pub mod rewrites;
-
-/// types to actually perform rename tracking.
-pub(crate) mod tracked;
-
/// Configuration
impl<'a, 'repo> Platform<'a, 'repo> {
/// Keep track of file-names, which makes the [`location`][Change::location] field usable with the filename of the changed item.
diff --git a/vendor/gix/src/object/tree/diff/rewrites.rs b/vendor/gix/src/object/tree/diff/rewrites.rs
deleted file mode 100644
index e434726d9..000000000
--- a/vendor/gix/src/object/tree/diff/rewrites.rs
+++ /dev/null
@@ -1,108 +0,0 @@
-use crate::{
- config::{cache::util::ApplyLeniency, tree::Diff},
- diff::rename::Tracking,
- object::tree::diff::Rewrites,
-};
-
-/// From where to source copies
-#[derive(Debug, Copy, Clone, Eq, PartialEq)]
-pub enum CopySource {
- /// Find copies from the set of modified files only.
- FromSetOfModifiedFiles,
- /// Find copies from the set of changed files, as well as all files known to the source (i.e. previous state) of the tree.
- ///
- /// This can be an expensive operation as it scales exponentially with the total amount of files in the tree.
- FromSetOfModifiedFilesAndSourceTree,
-}
-
-/// How to determine copied files.
-#[derive(Debug, Copy, Clone, PartialEq)]
-pub struct Copies {
- /// The set of files to search when finding the source of copies.
- pub source: CopySource,
- /// Equivalent to [`Rewrites::percentage`], but used for copy tracking.
- ///
- /// Useful to have similarity-based rename tracking and cheaper copy tracking, which also is the default
- /// as only identity plays a role.
- pub percentage: Option<f32>,
-}
-
-impl Default for Copies {
- fn default() -> Self {
- Copies {
- source: CopySource::FromSetOfModifiedFiles,
- percentage: Some(0.5),
- }
- }
-}
-
-/// Information collected while handling rewrites of files which may be tracked.
-#[derive(Default, Clone, Copy, Debug, PartialEq)]
-pub struct Outcome {
- /// The options used to guide the rewrite tracking. Either fully provided by the caller or retrieved from git configuration.
- pub options: Rewrites,
- /// The amount of similarity checks that have been conducted to find renamed files and potentially copies.
- pub num_similarity_checks: usize,
- /// Set to the amount of worst-case rename permutations we didn't search as our limit didn't allow it.
- pub num_similarity_checks_skipped_for_rename_tracking_due_to_limit: usize,
- /// Set to the amount of worst-case copy permutations we didn't search as our limit didn't allow it.
- pub num_similarity_checks_skipped_for_copy_tracking_due_to_limit: usize,
-}
-
-/// The error returned by [`Rewrites::try_from_config()`].
-#[derive(Debug, thiserror::Error)]
-#[allow(missing_docs)]
-pub enum Error {
- #[error(transparent)]
- ConfigDiffRenames(#[from] crate::config::key::GenericError),
- #[error(transparent)]
- ConfigDiffRenameLimit(#[from] crate::config::unsigned_integer::Error),
-}
-
-/// The default settings for rewrites according to the git configuration defaults.
-impl Default for Rewrites {
- fn default() -> Self {
- Rewrites {
- copies: None,
- percentage: Some(0.5),
- limit: 1000,
- }
- }
-}
-
-impl Rewrites {
- /// Create an instance by reading all relevant information from the `config`uration, while being `lenient` or not.
- /// Returns `Ok(None)` if nothing is configured.
- ///
- /// Note that missing values will be defaulted similar to what git does.
- #[allow(clippy::result_large_err)]
- pub fn try_from_config(config: &gix_config::File<'static>, lenient: bool) -> Result<Option<Self>, Error> {
- let key = "diff.renames";
- let copies = match config
- .boolean_by_key(key)
- .map(|value| Diff::RENAMES.try_into_renames(value))
- .transpose()
- .with_leniency(lenient)?
- {
- Some(renames) => match renames {
- Tracking::Disabled => return Ok(None),
- Tracking::Renames => None,
- Tracking::RenamesAndCopies => Some(Copies::default()),
- },
- None => return Ok(None),
- };
-
- let default = Self::default();
- Ok(Rewrites {
- copies,
- limit: config
- .integer_by_key("diff.renameLimit")
- .map(|value| Diff::RENAME_LIMIT.try_into_usize(value))
- .transpose()
- .with_leniency(lenient)?
- .unwrap_or(default.limit),
- ..default
- }
- .into())
- }
-}
diff --git a/vendor/gix/src/object/tree/diff/tracked.rs b/vendor/gix/src/object/tree/diff/tracked.rs
deleted file mode 100644
index d6042fcbc..000000000
--- a/vendor/gix/src/object/tree/diff/tracked.rs
+++ /dev/null
@@ -1,490 +0,0 @@
-use std::ops::Range;
-
-use gix_diff::tree::visit::Change;
-use gix_object::tree::EntryMode;
-
-use crate::{
- bstr::BStr,
- ext::ObjectIdExt,
- object::tree::diff::{
- change::DiffLineStats,
- rewrites::{CopySource, Outcome},
- Rewrites,
- },
- Repository, Tree,
-};
-
-/// A set of tracked items allows to figure out their relations by figuring out their similarity.
-pub struct Item {
- /// The underlying raw change
- change: Change,
- /// That slice into the backing for paths.
- location: Range<usize>,
- /// If true, this item was already emitted, i.e. seen by the caller.
- emitted: bool,
-}
-
-impl Item {
- fn location<'a>(&self, backing: &'a [u8]) -> &'a BStr {
- backing[self.location.clone()].as_ref()
- }
- fn entry_mode_compatible(&self, mode: EntryMode) -> bool {
- use EntryMode::*;
- matches!(
- (mode, self.change.entry_mode()),
- (Blob | BlobExecutable, Blob | BlobExecutable) | (Link, Link)
- )
- }
-
- fn is_source_for_destination_of(&self, kind: visit::Kind, dest_item_mode: EntryMode) -> bool {
- self.entry_mode_compatible(dest_item_mode)
- && match kind {
- visit::Kind::RenameTarget => !self.emitted && matches!(self.change, Change::Deletion { .. }),
- visit::Kind::CopyDestination => {
- matches!(self.change, Change::Modification { .. })
- }
- }
- }
-}
-
-pub struct State {
- items: Vec<Item>,
- path_backing: Vec<u8>,
- rewrites: Rewrites,
- tracking: Option<gix_diff::tree::recorder::Location>,
-}
-
-pub mod visit {
- use crate::{bstr::BStr, object::tree::diff::change::DiffLineStats};
-
- pub struct Source<'a> {
- pub mode: gix_object::tree::EntryMode,
- pub id: gix_hash::ObjectId,
- pub kind: Kind,
- pub location: &'a BStr,
- pub diff: Option<DiffLineStats>,
- }
-
- #[derive(Debug, Copy, Clone, Eq, PartialEq)]
- pub enum Kind {
- RenameTarget,
- CopyDestination,
- }
-
- pub struct Destination<'a> {
- pub change: gix_diff::tree::visit::Change,
- pub location: &'a BStr,
- }
-}
-
-impl State {
- pub(crate) fn new(renames: Rewrites, tracking: Option<gix_diff::tree::recorder::Location>) -> Self {
- State {
- items: vec![],
- path_backing: vec![],
- rewrites: renames,
- tracking,
- }
- }
-}
-
-/// build state and find matches.
-impl State {
- /// We may refuse the push if that information isn't needed for what we have to track.
- pub fn try_push_change(&mut self, change: Change, location: &BStr) -> Option<Change> {
- if !change.entry_mode().is_blob_or_symlink() {
- return Some(change);
- }
- let keep = match (self.rewrites.copies, &change) {
- (Some(_find_copies), _) => true,
- (None, Change::Modification { .. }) => false,
- (None, _) => true,
- };
-
- if !keep {
- return Some(change);
- }
-
- let start = self.path_backing.len();
- self.path_backing.extend_from_slice(location);
- self.items.push(Item {
- location: start..self.path_backing.len(),
- change,
- emitted: false,
- });
- None
- }
-
- /// Can only be called once effectively as it alters its own state.
- ///
- /// `cb(destination, source)` is called for each item, either with `Some(source)` if it's
- /// the destination of a copy or rename, or with `None` for source if no relation to other
- /// items in the tracked set exist.
- pub fn emit(
- &mut self,
- mut cb: impl FnMut(visit::Destination<'_>, Option<visit::Source<'_>>) -> gix_diff::tree::visit::Action,
- src_tree: &Tree<'_>,
- ) -> Result<Outcome, crate::object::tree::diff::for_each::Error> {
- fn by_id_and_location(a: &Item, b: &Item) -> std::cmp::Ordering {
- a.change.oid().cmp(b.change.oid()).then_with(|| {
- a.location
- .start
- .cmp(&b.location.start)
- .then(a.location.end.cmp(&b.location.end))
- })
- }
- self.items.sort_by(by_id_and_location);
-
- let mut out = Outcome {
- options: self.rewrites,
- ..Default::default()
- };
- out = self.match_pairs_of_kind(
- visit::Kind::RenameTarget,
- &mut cb,
- self.rewrites.percentage,
- out,
- src_tree.repo,
- )?;
-
- if let Some(copies) = self.rewrites.copies {
- out = self.match_pairs_of_kind(
- visit::Kind::CopyDestination,
- &mut cb,
- copies.percentage,
- out,
- src_tree.repo,
- )?;
-
- match copies.source {
- CopySource::FromSetOfModifiedFiles => {}
- CopySource::FromSetOfModifiedFilesAndSourceTree => {
- src_tree
- .traverse()
- .breadthfirst(&mut tree_to_events::Delegate::new(self))?;
- self.items.sort_by(by_id_and_location);
-
- out = self.match_pairs_of_kind(
- visit::Kind::CopyDestination,
- &mut cb,
- copies.percentage,
- out,
- src_tree.repo,
- )?;
- }
- }
- }
-
- self.items
- .sort_by(|a, b| a.location(&self.path_backing).cmp(b.location(&self.path_backing)));
- for item in self.items.drain(..).filter(|item| !item.emitted) {
- if cb(
- visit::Destination {
- location: item.location(&self.path_backing),
- change: item.change,
- },
- None,
- ) == gix_diff::tree::visit::Action::Cancel
- {
- break;
- }
- }
- Ok(out)
- }
-
- fn match_pairs_of_kind(
- &mut self,
- kind: visit::Kind,
- cb: &mut impl FnMut(visit::Destination<'_>, Option<visit::Source<'_>>) -> gix_diff::tree::visit::Action,
- percentage: Option<f32>,
- mut out: Outcome,
- repo: &Repository,
- ) -> Result<Outcome, crate::object::tree::diff::for_each::Error> {
- // we try to cheaply reduce the set of possibilities first, before possibly looking more exhaustively.
- let needs_second_pass = !needs_exact_match(percentage);
- if self.match_pairs(cb, None /* by identity */, kind, repo, &mut out)? == gix_diff::tree::visit::Action::Cancel
- {
- return Ok(out);
- }
- if needs_second_pass {
- let is_limited = if self.rewrites.limit == 0 {
- false
- } else if let Some(permutations) = permutations_over_limit(&self.items, self.rewrites.limit, kind) {
- match kind {
- visit::Kind::RenameTarget => {
- out.num_similarity_checks_skipped_for_rename_tracking_due_to_limit = permutations;
- }
- visit::Kind::CopyDestination => {
- out.num_similarity_checks_skipped_for_copy_tracking_due_to_limit = permutations;
- }
- }
- true
- } else {
- false
- };
- if !is_limited {
- self.match_pairs(cb, self.rewrites.percentage, kind, repo, &mut out)?;
- }
- }
- Ok(out)
- }
-
- fn match_pairs(
- &mut self,
- cb: &mut impl FnMut(visit::Destination<'_>, Option<visit::Source<'_>>) -> gix_diff::tree::visit::Action,
- percentage: Option<f32>,
- kind: visit::Kind,
- repo: &Repository,
- stats: &mut Outcome,
- ) -> Result<gix_diff::tree::visit::Action, crate::object::tree::diff::for_each::Error> {
- // TODO(perf): reuse object data and interner state and interned tokens, make these available to `find_match()`
- let mut dest_ofs = 0;
- while let Some((mut dest_idx, dest)) = self.items[dest_ofs..].iter().enumerate().find_map(|(idx, item)| {
- (!item.emitted && matches!(item.change, Change::Addition { .. })).then_some((idx, item))
- }) {
- dest_idx += dest_ofs;
- dest_ofs = dest_idx + 1;
- let src =
- find_match(&self.items, dest, dest_idx, percentage, kind, repo, stats)?.map(|(src_idx, src, diff)| {
- let (id, mode) = src.change.oid_and_entry_mode();
- let id = id.to_owned();
- let location = src.location(&self.path_backing);
- (
- visit::Source {
- mode,
- id,
- kind,
- location,
- diff,
- },
- src_idx,
- )
- });
- if src.is_none() {
- continue;
- }
- let location = dest.location(&self.path_backing);
- let change = dest.change.clone();
- let dest = visit::Destination { change, location };
- self.items[dest_idx].emitted = true;
- if let Some(src_idx) = src.as_ref().map(|t| t.1) {
- self.items[src_idx].emitted = true;
- }
- if cb(dest, src.map(|t| t.0)) == gix_diff::tree::visit::Action::Cancel {
- return Ok(gix_diff::tree::visit::Action::Cancel);
- }
- }
- Ok(gix_diff::tree::visit::Action::Continue)
- }
-}
-
-fn permutations_over_limit(items: &[Item], limit: usize, kind: visit::Kind) -> Option<usize> {
- let (sources, destinations) = items
- .iter()
- .filter(|item| match kind {
- visit::Kind::RenameTarget => !item.emitted,
- visit::Kind::CopyDestination => true,
- })
- .fold((0, 0), |(mut src, mut dest), item| {
- match item.change {
- Change::Addition { .. } => {
- dest += 1;
- }
- Change::Deletion { .. } => {
- if kind == visit::Kind::RenameTarget {
- src += 1
- }
- }
- Change::Modification { .. } => {
- if kind == visit::Kind::CopyDestination {
- src += 1
- }
- }
- }
- (src, dest)
- });
- let permutations = sources * destinations;
- (permutations > limit * limit).then_some(permutations)
-}
-
-fn needs_exact_match(percentage: Option<f32>) -> bool {
- percentage.map_or(true, |p| p >= 1.0)
-}
-
-/// <`src_idx`, src, possibly diff stat>
-type SourceTuple<'a> = (usize, &'a Item, Option<DiffLineStats>);
-
-/// Find `item` in our set of items ignoring `item_idx` to avoid finding ourselves, by similarity indicated by `percentage`.
-/// The latter can be `None` or `Some(x)` where `x>=1` for identity, and anything else for similarity.
-/// We also ignore emitted items entirely.
-/// Use `kind` to indicate what kind of match we are looking for, which might be deletions matching an `item` addition, or
-/// any non-deletion otherwise.
-/// Note that we always try to find by identity first even if a percentage is given as it's much faster and may reduce the set
-/// of items to be searched.
-fn find_match<'a>(
- items: &'a [Item],
- item: &Item,
- item_idx: usize,
- percentage: Option<f32>,
- kind: visit::Kind,
- repo: &Repository,
- stats: &mut Outcome,
-) -> Result<Option<SourceTuple<'a>>, crate::object::tree::diff::for_each::Error> {
- let (item_id, item_mode) = item.change.oid_and_entry_mode();
- if needs_exact_match(percentage) || item_mode == gix_object::tree::EntryMode::Link {
- let first_idx = items.partition_point(|a| a.change.oid() < item_id);
- let range = match items.get(first_idx..).map(|items| {
- let end = items
- .iter()
- .position(|a| a.change.oid() != item_id)
- .map_or(items.len(), |idx| first_idx + idx);
- first_idx..end
- }) {
- Some(range) => range,
- None => return Ok(None),
- };
- if range.is_empty() {
- return Ok(None);
- }
- let res = items[range.clone()].iter().enumerate().find_map(|(mut src_idx, src)| {
- src_idx += range.start;
- (src_idx != item_idx && src.is_source_for_destination_of(kind, item_mode)).then_some((src_idx, src, None))
- });
- if let Some(src) = res {
- return Ok(Some(src));
- }
- } else {
- let new = item_id.to_owned().attach(repo).object()?;
- let percentage = percentage.expect("it's set to something below 1.0 and we assured this");
- debug_assert!(
- item.change.entry_mode().is_blob(),
- "symlinks are matched exactly, and trees aren't used here"
- );
- let algo = repo.config.diff_algorithm()?;
- for (can_idx, src) in items
- .iter()
- .enumerate()
- .filter(|(src_idx, src)| *src_idx != item_idx && src.is_source_for_destination_of(kind, item_mode))
- {
- let old = src.change.oid().to_owned().attach(repo).object()?;
- // TODO: make sure we get attribute handling and binary skips and filters right here. There is crate::object::blob::diff::Platform
- // which should have facilities for that one day, but we don't use it because we need newlines in our tokens.
- let tokens = gix_diff::blob::intern::InternedInput::new(
- gix_diff::blob::sources::byte_lines_with_terminator(&old.data),
- gix_diff::blob::sources::byte_lines_with_terminator(&new.data),
- );
- let counts = gix_diff::blob::diff(
- algo,
- &tokens,
- gix_diff::blob::sink::Counter::new(diff::Statistics {
- removed_bytes: 0,
- input: &tokens,
- }),
- );
- let similarity = (old.data.len() - counts.wrapped) as f32 / old.data.len().max(new.data.len()) as f32;
- stats.num_similarity_checks += 1;
- if similarity >= percentage {
- return Ok(Some((
- can_idx,
- src,
- DiffLineStats {
- removals: counts.removals,
- insertions: counts.insertions,
- before: tokens.before.len().try_into().expect("interner handles only u32"),
- after: tokens.after.len().try_into().expect("interner handles only u32"),
- }
- .into(),
- )));
- }
- }
- }
- Ok(None)
-}
-
-mod diff {
- use std::ops::Range;
-
- pub struct Statistics<'a, 'data> {
- pub removed_bytes: usize,
- pub input: &'a gix_diff::blob::intern::InternedInput<&'data [u8]>,
- }
-
- impl<'a, 'data> gix_diff::blob::Sink for Statistics<'a, 'data> {
- type Out = usize;
-
- fn process_change(&mut self, before: Range<u32>, _after: Range<u32>) {
- self.removed_bytes = self.input.before[before.start as usize..before.end as usize]
- .iter()
- .map(|token| self.input.interner[*token].len())
- .sum();
- }
-
- fn finish(self) -> Self::Out {
- self.removed_bytes
- }
- }
-}
-
-mod tree_to_events {
- use gix_diff::tree::visit::Change;
- use gix_object::tree::EntryRef;
-
- use crate::bstr::BStr;
-
- pub struct Delegate<'a> {
- parent: &'a mut super::State,
- recorder: gix_traverse::tree::Recorder,
- }
-
- impl<'a> Delegate<'a> {
- pub fn new(parent: &'a mut super::State) -> Self {
- let tracking = parent.tracking.map(|t| match t {
- gix_diff::tree::recorder::Location::FileName => gix_traverse::tree::recorder::Location::FileName,
- gix_diff::tree::recorder::Location::Path => gix_traverse::tree::recorder::Location::Path,
- });
- Self {
- parent,
- recorder: gix_traverse::tree::Recorder::default().track_location(tracking),
- }
- }
- }
-
- impl gix_traverse::tree::Visit for Delegate<'_> {
- fn pop_front_tracked_path_and_set_current(&mut self) {
- self.recorder.pop_front_tracked_path_and_set_current()
- }
-
- fn push_back_tracked_path_component(&mut self, component: &BStr) {
- self.recorder.push_back_tracked_path_component(component)
- }
-
- fn push_path_component(&mut self, component: &BStr) {
- self.recorder.push_path_component(component)
- }
-
- fn pop_path_component(&mut self) {
- self.recorder.pop_path_component();
- }
-
- fn visit_tree(&mut self, _entry: &EntryRef<'_>) -> gix_traverse::tree::visit::Action {
- gix_traverse::tree::visit::Action::Continue
- }
-
- fn visit_nontree(&mut self, entry: &EntryRef<'_>) -> gix_traverse::tree::visit::Action {
- if entry.mode.is_blob() {
- self.parent.try_push_change(
- Change::Modification {
- previous_entry_mode: entry.mode,
- previous_oid: gix_hash::ObjectId::null(entry.oid.kind()),
- entry_mode: entry.mode,
- oid: entry.oid.to_owned(),
- },
- self.recorder.path(),
- );
- // make sure these aren't viable to be emitted anymore.
- self.parent.items.last_mut().expect("just pushed").emitted = true;
- }
- gix_traverse::tree::visit::Action::Continue
- }
- }
-}
diff --git a/vendor/gix/src/object/tree/iter.rs b/vendor/gix/src/object/tree/iter.rs
index 848d9eeab..cc9c4bd28 100644
--- a/vendor/gix/src/object/tree/iter.rs
+++ b/vendor/gix/src/object/tree/iter.rs
@@ -51,7 +51,7 @@ impl<'repo, 'a> std::fmt::Display for EntryRef<'repo, 'a> {
write!(
f,
"{:06o} {:>6} {}\t{}",
- self.mode() as u32,
+ *self.mode(),
self.mode().as_str(),
self.id().shorten_or_id(),
self.filename()
diff --git a/vendor/gix/src/object/tree/mod.rs b/vendor/gix/src/object/tree/mod.rs
index e4dac24f8..a8173fce4 100644
--- a/vendor/gix/src/object/tree/mod.rs
+++ b/vendor/gix/src/object/tree/mod.rs
@@ -1,8 +1,7 @@
use gix_hash::ObjectId;
use gix_macros::momo;
-pub use gix_object::tree::EntryMode;
-use gix_object::{bstr::BStr, TreeRefIter};
-use gix_odb::FindExt;
+pub use gix_object::tree::{EntryKind, EntryMode};
+use gix_object::{bstr::BStr, FindExt, TreeRefIter};
use crate::{object::find, Id, ObjectDetached, Tree};
diff --git a/vendor/gix/src/object/tree/traverse.rs b/vendor/gix/src/object/tree/traverse.rs
index 974df6b0d..f2f3ff817 100644
--- a/vendor/gix/src/object/tree/traverse.rs
+++ b/vendor/gix/src/object/tree/traverse.rs
@@ -1,5 +1,3 @@
-use gix_odb::FindExt;
-
use crate::Tree;
/// Traversal
@@ -52,11 +50,6 @@ impl<'a, 'repo> Platform<'a, 'repo> {
{
let root = gix_object::TreeRefIter::from_bytes(&self.root.data);
let state = gix_traverse::tree::breadthfirst::State::default();
- gix_traverse::tree::breadthfirst(
- root,
- state,
- |oid, buf| self.root.repo.objects.find_tree_iter(oid, buf).ok(),
- delegate,
- )
+ gix_traverse::tree::breadthfirst(root, state, &self.root.repo.objects, delegate)
}
}
diff --git a/vendor/gix/src/open/repository.rs b/vendor/gix/src/open/repository.rs
index fde647a4e..6c3f07f42 100644
--- a/vendor/gix/src/open/repository.rs
+++ b/vendor/gix/src/open/repository.rs
@@ -8,7 +8,7 @@ use super::{Error, Options};
use crate::{
config,
config::{
- cache::{interpolate_context, util::ApplyLeniency},
+ cache::interpolate_context,
tree::{gitoxide, Core, Key, Safe},
},
open::Permissions,
@@ -237,13 +237,27 @@ impl ThreadSafeRepository {
.resolved
.path_filter("core", None, Core::WORKTREE.name, &mut filter_config_section)
{
+ let wt_clone = wt.clone();
let wt_path = wt
.interpolate(interpolate_context(git_install_dir.as_deref(), home.as_deref()))
- .map_err(config::Error::PathInterpolation)?;
- worktree_dir = {
- gix_path::normalize(git_dir.join(wt_path).into(), current_dir)
- .and_then(|wt| wt.as_ref().is_dir().then(|| wt.into_owned()))
+ .map_err(|err| config::Error::PathInterpolation {
+ path: wt_clone.value.into_owned(),
+ source: err,
+ })?;
+ worktree_dir = gix_path::normalize(git_dir.join(wt_path).into(), current_dir).map(Cow::into_owned);
+ #[allow(unused_variables)]
+ if let Some(worktree_path) = worktree_dir.as_deref().filter(|wtd| !wtd.is_dir()) {
+ gix_trace::warn!("The configured worktree path '{}' is not a directory or doesn't exist - `core.worktree` may be misleading", worktree_path.display());
}
+ } else if !config.lenient_config
+ && config
+ .resolved
+ .boolean_filter("core", None, Core::WORKTREE.name, &mut filter_config_section)
+ .is_some()
+ {
+ return Err(Error::from(config::Error::ConfigTypedString(
+ config::key::GenericErrorWithValue::from(&Core::WORKTREE),
+ )));
}
}
@@ -259,6 +273,7 @@ impl ThreadSafeRepository {
}
refs.write_reflog = config::cache::util::reflog_or_default(config.reflog, worktree_dir.is_some());
+ refs.namespace = config.refs_namespace.clone();
let replacements = replacement_objects_refs_prefix(&config.resolved, lenient_config, filter_config_section)?
.and_then(|prefix| {
let _span = gix_trace::detail!("find replacement objects");
@@ -310,11 +325,7 @@ fn replacement_objects_refs_prefix(
lenient: bool,
mut filter_config_section: fn(&gix_config::file::Metadata) -> bool,
) -> Result<Option<PathBuf>, Error> {
- let is_disabled = config
- .boolean_filter_by_key("core.useReplaceRefs", &mut filter_config_section)
- .map(|b| Core::USE_REPLACE_REFS.enrich_error(b))
- .transpose()
- .with_leniency(lenient)
+ let is_disabled = config::shared::is_replace_refs_enabled(config, lenient, filter_config_section)
.map_err(config::Error::ConfigBoolean)?
.unwrap_or(true);
diff --git a/vendor/gix/src/pathspec.rs b/vendor/gix/src/pathspec.rs
index 235a91d76..a56ad1c32 100644
--- a/vendor/gix/src/pathspec.rs
+++ b/vendor/gix/src/pathspec.rs
@@ -1,6 +1,5 @@
//! Pathspec plumbing and abstractions
use gix_macros::momo;
-use gix_odb::FindExt;
pub use gix_pathspec::*;
use crate::{bstr::BStr, AttributeStack, Pathspec, PathspecDetached, Repository};
@@ -122,9 +121,7 @@ impl<'repo> Pathspec<'repo> {
let stack = self.stack.as_mut().expect("initialized in advance");
stack
.set_case(case)
- .at_entry(relative_path, Some(is_dir), |id, buf| {
- self.repo.objects.find_blob(id, buf)
- })
+ .at_entry(relative_path, Some(is_dir), &self.repo.objects)
.map_or(false, |platform| platform.matching_attributes(out))
},
)
@@ -180,7 +177,7 @@ impl PathspecDetached {
let stack = self.stack.as_mut().expect("initialized in advance");
stack
.set_case(case)
- .at_entry(relative_path, Some(is_dir), |id, buf| self.odb.find_blob(id, buf))
+ .at_entry(relative_path, Some(is_dir), &self.odb)
.map_or(false, |platform| platform.matching_attributes(out))
},
)
diff --git a/vendor/gix/src/prelude.rs b/vendor/gix/src/prelude.rs
index 36fbfc7b1..8a3e01124 100644
--- a/vendor/gix/src/prelude.rs
+++ b/vendor/gix/src/prelude.rs
@@ -1,4 +1,5 @@
pub use gix_features::parallel::reduce::Finalize;
-pub use gix_odb::{Find, FindExt, Header, HeaderExt, Write};
+pub use gix_object::{Find, FindExt};
+pub use gix_odb::{Header, HeaderExt, Write};
pub use crate::ext::*;
diff --git a/vendor/gix/src/reference/edits.rs b/vendor/gix/src/reference/edits.rs
index 208340770..cba652630 100644
--- a/vendor/gix/src/reference/edits.rs
+++ b/vendor/gix/src/reference/edits.rs
@@ -1,9 +1,10 @@
///
pub mod set_target_id {
- use crate::{bstr::BString, Reference};
use gix_macros::momo;
use gix_ref::{transaction::PreviousValue, Target};
+ use crate::{bstr::BString, Reference};
+
mod error {
use gix_ref::FullName;
diff --git a/vendor/gix/src/reference/errors.rs b/vendor/gix/src/reference/errors.rs
index ff3802e94..d5b09f78e 100644
--- a/vendor/gix/src/reference/errors.rs
+++ b/vendor/gix/src/reference/errors.rs
@@ -43,9 +43,7 @@ pub mod head_id {
#[error(transparent)]
Head(#[from] crate::reference::find::existing::Error),
#[error(transparent)]
- PeelToId(#[from] crate::head::peel::Error),
- #[error("Branch '{name}' does not have any commits")]
- Unborn { name: gix_ref::FullName },
+ PeelToId(#[from] crate::head::peel::into_id::Error),
}
}
@@ -69,9 +67,7 @@ pub mod head_tree_id {
#[allow(missing_docs)]
pub enum Error {
#[error(transparent)]
- Head(#[from] crate::reference::find::existing::Error),
- #[error(transparent)]
- PeelToCommit(#[from] crate::head::peel::to_commit::Error),
+ HeadCommit(#[from] crate::reference::head_commit::Error),
#[error(transparent)]
DecodeCommit(#[from] gix_object::decode::Error),
}
diff --git a/vendor/gix/src/reference/iter.rs b/vendor/gix/src/reference/iter.rs
index a79a74743..604a8ac4b 100644
--- a/vendor/gix/src/reference/iter.rs
+++ b/vendor/gix/src/reference/iter.rs
@@ -2,7 +2,6 @@
use std::path::Path;
use gix_macros::momo;
-use gix_odb::pack::Find;
use gix_ref::file::ReferenceExt;
/// A platform to create iterators over references.
@@ -96,15 +95,10 @@ impl<'r> Iterator for Iter<'r> {
res.map_err(|err| Box::new(err) as Box<dyn std::error::Error + Send + Sync + 'static>)
.and_then(|mut r| {
if self.peel {
- let handle = &self.repo;
- r.peel_to_id_in_place(&handle.refs, &mut |oid, buf| {
- handle
- .objects
- .try_find(oid.as_ref(), buf)
- .map(|po| po.map(|(o, _l)| (o.kind, o.data)))
- })
- .map_err(|err| Box::new(err) as Box<dyn std::error::Error + Send + Sync + 'static>)
- .map(|_| r)
+ let repo = &self.repo;
+ r.peel_to_id_in_place(&repo.refs, &repo.objects)
+ .map_err(|err| Box::new(err) as Box<dyn std::error::Error + Send + Sync + 'static>)
+ .map(|_| r)
} else {
Ok(r)
}
diff --git a/vendor/gix/src/reference/mod.rs b/vendor/gix/src/reference/mod.rs
index 2d32f595d..ebdbf66a7 100644
--- a/vendor/gix/src/reference/mod.rs
+++ b/vendor/gix/src/reference/mod.rs
@@ -1,6 +1,5 @@
//!
-use gix_odb::pack::Find;
use gix_ref::file::ReferenceExt;
use crate::{Id, Reference};
@@ -69,13 +68,8 @@ impl<'repo> Reference<'repo> {
///
/// This is useful to learn where this reference is ultimately pointing to.
pub fn peel_to_id_in_place(&mut self) -> Result<Id<'repo>, peel::Error> {
- let repo = &self.repo;
- let oid = self.inner.peel_to_id_in_place(&repo.refs, &mut |oid, buf| {
- repo.objects
- .try_find(&oid, buf)
- .map(|po| po.map(|(o, _l)| (o.kind, o.data)))
- })?;
- Ok(Id::from_id(oid, repo))
+ let oid = self.inner.peel_to_id_in_place(&self.repo.refs, &self.repo.objects)?;
+ Ok(Id::from_id(oid, self.repo))
}
/// Similar to [`peel_to_id_in_place()`][Reference::peel_to_id_in_place()], but consumes this instance.
diff --git a/vendor/gix/src/remote/connect.rs b/vendor/gix/src/remote/connect.rs
index 6acc9f67f..df2b36230 100644
--- a/vendor/gix/src/remote/connect.rs
+++ b/vendor/gix/src/remote/connect.rs
@@ -1,8 +1,9 @@
#![allow(clippy::result_large_err)]
-use gix_protocol::transport::client::Transport;
use std::borrow::Cow;
+use gix_protocol::transport::client::Transport;
+
use crate::{remote::Connection, Remote};
mod error {
@@ -57,11 +58,13 @@ impl<'repo> Remote<'repo> {
where
T: Transport,
{
+ let trace = self.repo.config.trace_packet();
Connection {
remote: self,
authenticate: None,
transport_options: None,
transport,
+ trace,
}
}
@@ -91,6 +94,7 @@ impl<'repo> Remote<'repo> {
.then(|| self.repo.ssh_connect_options())
.transpose()?
.unwrap_or_default(),
+ trace: self.repo.config.trace_packet(),
},
)
.await?;
diff --git a/vendor/gix/src/remote/connection/fetch/mod.rs b/vendor/gix/src/remote/connection/fetch/mod.rs
index 8327d5abc..d4afd1023 100644
--- a/vendor/gix/src/remote/connection/fetch/mod.rs
+++ b/vendor/gix/src/remote/connection/fetch/mod.rs
@@ -281,12 +281,13 @@ where
// connection in an async context.
gix_protocol::futures_lite::future::block_on(gix_protocol::indicate_end_of_interaction(
&mut con.transport,
+ con.trace,
))
.ok();
}
#[cfg(not(feature = "async-network-client"))]
{
- gix_protocol::indicate_end_of_interaction(&mut con.transport).ok();
+ gix_protocol::indicate_end_of_interaction(&mut con.transport, con.trace).ok();
}
}
}
diff --git a/vendor/gix/src/remote/connection/fetch/negotiate.rs b/vendor/gix/src/remote/connection/fetch/negotiate.rs
index 92a141f6f..f5b6a031c 100644
--- a/vendor/gix/src/remote/connection/fetch/negotiate.rs
+++ b/vendor/gix/src/remote/connection/fetch/negotiate.rs
@@ -16,7 +16,7 @@ pub enum Error {
#[error("We were unable to figure out what objects the server should send after {rounds} round(s)")]
NegotiationFailed { rounds: usize },
#[error(transparent)]
- LookupCommitInGraph(#[from] gix_revwalk::graph::lookup::commit::Error),
+ LookupCommitInGraph(#[from] gix_revwalk::graph::try_lookup_or_insert_default::Error),
#[error(transparent)]
InitRefsIterator(#[from] crate::reference::iter::init::Error),
#[error(transparent)]
diff --git a/vendor/gix/src/remote/connection/fetch/receive_pack.rs b/vendor/gix/src/remote/connection/fetch/receive_pack.rs
index 18e5ac159..7634b34cf 100644
--- a/vendor/gix/src/remote/connection/fetch/receive_pack.rs
+++ b/vendor/gix/src/remote/connection/fetch/receive_pack.rs
@@ -3,7 +3,7 @@ use std::{
sync::atomic::{AtomicBool, Ordering},
};
-use gix_odb::{store::RefreshMode, FindExt};
+use gix_odb::store::RefreshMode;
use gix_protocol::{
fetch::Arguments,
transport::{client::Transport, packetline::read::ProgressAction},
@@ -104,7 +104,7 @@ where
gix_protocol::fetch::Response::check_required_features(protocol_version, &fetch_features)?;
let sideband_all = fetch_features.iter().any(|(n, _)| *n == "sideband-all");
- let mut arguments = gix_protocol::fetch::Arguments::new(protocol_version, fetch_features);
+ let mut arguments = gix_protocol::fetch::Arguments::new(protocol_version, fetch_features, con.trace);
if matches!(con.remote.fetch_tags, crate::remote::fetch::Tags::Included) {
if !arguments.can_use_include_tag() {
return Err(Error::MissingServerFeature {
@@ -125,7 +125,10 @@ where
});
}
- let negotiate_span = gix_trace::detail!("negotiate");
+ let negotiate_span = gix_trace::detail!(
+ "negotiate",
+ protocol_version = self.ref_map.handshake.server_protocol_version as usize
+ );
let mut negotiator = repo
.config
.resolved
@@ -155,7 +158,9 @@ where
let mut previous_response = None::<gix_protocol::fetch::Response>;
let (mut write_pack_bundle, negotiate) = match &action {
negotiate::Action::NoChange | negotiate::Action::SkipToRefUpdate => {
- gix_protocol::indicate_end_of_interaction(&mut con.transport).await.ok();
+ gix_protocol::indicate_end_of_interaction(&mut con.transport, con.trace)
+ .await
+ .ok();
(None, None)
}
negotiate::Action::MustNegotiate {
@@ -206,7 +211,9 @@ where
is_done
}
Err(err) => {
- gix_protocol::indicate_end_of_interaction(&mut con.transport).await.ok();
+ gix_protocol::indicate_end_of_interaction(&mut con.transport, con.trace)
+ .await
+ .ok();
return Err(err.into());
}
};
@@ -214,8 +221,13 @@ where
if sideband_all {
setup_remote_progress(progress, &mut reader, should_interrupt);
}
- let response =
- gix_protocol::fetch::Response::from_line_reader(protocol_version, &mut reader, is_done).await?;
+ let response = gix_protocol::fetch::Response::from_line_reader(
+ protocol_version,
+ &mut reader,
+ is_done,
+ !is_done,
+ )
+ .await?;
let has_pack = response.has_pack();
previous_response = Some(response);
if has_pack {
@@ -265,14 +277,23 @@ where
should_interrupt,
Some(Box::new({
let repo = repo.clone();
- move |oid, buf| repo.objects.find(&oid, buf).ok()
+ repo.objects
})),
options,
)?;
+ // Assure the final flush packet is consumed.
+ #[cfg(feature = "async-network-client")]
+ let has_read_to_end = { rd.get_ref().stopped_at().is_some() };
+ #[cfg(not(feature = "async-network-client"))]
+ let has_read_to_end = { rd.stopped_at().is_some() };
+ if !has_read_to_end {
+ std::io::copy(&mut rd, &mut std::io::sink()).unwrap();
+ }
#[cfg(feature = "async-network-client")]
{
reader = rd.into_inner();
}
+
#[cfg(not(feature = "async-network-client"))]
{
reader = rd;
@@ -284,7 +305,9 @@ where
drop(reader);
if matches!(protocol_version, gix_protocol::transport::Protocol::V2) {
- gix_protocol::indicate_end_of_interaction(&mut con.transport).await.ok();
+ gix_protocol::indicate_end_of_interaction(&mut con.transport, con.trace)
+ .await
+ .ok();
}
if let Some(shallow_lock) = shallow_lock {
@@ -387,24 +410,14 @@ fn add_shallow_args(
Ok((shallow_commits, shallow_lock))
}
-fn setup_remote_progress(
+fn setup_remote_progress<'a>(
progress: &mut dyn crate::DynNestedProgress,
- reader: &mut Box<dyn gix_protocol::transport::client::ExtendedBufRead + Unpin + '_>,
- should_interrupt: &AtomicBool,
+ reader: &mut Box<dyn gix_protocol::transport::client::ExtendedBufRead<'a> + Unpin + 'a>,
+ should_interrupt: &'a AtomicBool,
) {
use gix_protocol::transport::client::ExtendedBufRead;
reader.set_progress_handler(Some(Box::new({
let mut remote_progress = progress.add_child_with_id("remote".to_string(), ProgressId::RemoteProgress.into());
- // SAFETY: Ugh, so, with current Rust I can't declare lifetimes in the involved traits the way they need to
- // be and I also can't use scoped threads to pump from local scopes to an Arc version that could be
- // used here due to the this being called from sync AND async code (and the async version doesn't work
- // with a surrounding `std::thread::scope()`.
- // Thus there is only claiming this is 'static which we know works for *our* implementations of ExtendedBufRead
- // and typical implementations, but of course it's possible for user code to come along and actually move this
- // handler into a context where it can outlive the current function. Is this going to happen? Probably not unless
- // somebody really wants to break it. So, with standard usage this value is never used past its actual lifetime.
- #[allow(unsafe_code)]
- let should_interrupt: &'static AtomicBool = unsafe { std::mem::transmute(should_interrupt) };
move |is_err: bool, data: &[u8]| {
gix_protocol::RemoteProgress::translate_to_progress(is_err, data, &mut remote_progress);
if should_interrupt.load(Ordering::Relaxed) {
@@ -413,5 +426,5 @@ fn setup_remote_progress(
ProgressAction::Continue
}
}
- }) as gix_protocol::transport::client::HandleProgress));
+ }) as gix_protocol::transport::client::HandleProgress<'a>));
}
diff --git a/vendor/gix/src/remote/connection/fetch/update_refs/mod.rs b/vendor/gix/src/remote/connection/fetch/update_refs/mod.rs
index 3d6fb18bd..c487e7f5c 100644
--- a/vendor/gix/src/remote/connection/fetch/update_refs/mod.rs
+++ b/vendor/gix/src/remote/connection/fetch/update_refs/mod.rs
@@ -1,7 +1,7 @@
#![allow(clippy::result_large_err)]
use std::{collections::BTreeMap, convert::TryInto, path::PathBuf};
-use gix_odb::{Find, FindExt};
+use gix_object::Exists;
use gix_ref::{
transaction::{Change, LogChange, PreviousValue, RefEdit, RefLog},
Target, TargetRef,
@@ -96,8 +96,8 @@ pub(crate) fn update(
) {
// `None` only if unborn.
let remote_id = remote.as_id();
- if matches!(dry_run, fetch::DryRun::No) && !remote_id.map_or(true, |id| repo.objects.contains(id)) {
- if let Some(remote_id) = remote_id.filter(|id| !repo.objects.contains(id)) {
+ if matches!(dry_run, fetch::DryRun::No) && !remote_id.map_or(true, |id| repo.objects.exists(id)) {
+ if let Some(remote_id) = remote_id.filter(|id| !repo.objects.exists(id)) {
let update = if is_implicit_tag {
Mode::ImplicitTagNotSentByRemote.into()
} else {
@@ -159,7 +159,7 @@ pub(crate) fn update(
}).and_then(|local_commit_time|
remote_id
.to_owned()
- .ancestors(|id, buf| repo.objects.find_commit_iter(id, buf))
+ .ancestors(&repo.objects)
.sorting(
gix_traverse::commit::Sorting::ByCommitTimeNewestFirstCutoffOlderThan {
seconds: local_commit_time
@@ -325,11 +325,7 @@ pub(crate) fn update(
.packed_refs(
match write_packed_refs {
fetch::WritePackedRefs::Only => {
- gix_ref::file::transaction::PackedRefs::DeletionsAndNonSymbolicUpdatesRemoveLooseSourceReference(Box::new(|oid, buf| {
- repo.objects
- .try_find(&oid, buf)
- .map(|obj| obj.map(|obj| obj.kind))
- }))},
+ gix_ref::file::transaction::PackedRefs::DeletionsAndNonSymbolicUpdatesRemoveLooseSourceReference(Box::new(&repo.objects))},
fetch::WritePackedRefs::Never => gix_ref::file::transaction::PackedRefs::DeletionsOnly
}
)
diff --git a/vendor/gix/src/remote/connection/fetch/update_refs/tests.rs b/vendor/gix/src/remote/connection/fetch/update_refs/tests.rs
index 0b29f14f4..27501720d 100644
--- a/vendor/gix/src/remote/connection/fetch/update_refs/tests.rs
+++ b/vendor/gix/src/remote/connection/fetch/update_refs/tests.rs
@@ -191,7 +191,7 @@ mod update {
#[test]
fn checked_out_branches_in_worktrees_are_rejected_with_additional_information() -> Result {
- let root = gix_path::realpath(&gix_testtools::scripted_fixture_read_only_with_args(
+ let root = gix_path::realpath(gix_testtools::scripted_fixture_read_only_with_args(
"make_fetch_repos.sh",
[base_repo_path()],
)?)?;
diff --git a/vendor/gix/src/remote/connection/mod.rs b/vendor/gix/src/remote/connection/mod.rs
index 02a09926a..f9b8aa7e6 100644
--- a/vendor/gix/src/remote/connection/mod.rs
+++ b/vendor/gix/src/remote/connection/mod.rs
@@ -17,6 +17,7 @@ pub struct Connection<'a, 'repo, T> {
pub(crate) authenticate: Option<AuthenticateFn<'a>>,
pub(crate) transport_options: Option<Box<dyn std::any::Any>>,
pub(crate) transport: T,
+ pub(crate) trace: bool,
}
mod access;
diff --git a/vendor/gix/src/remote/connection/ref_map.rs b/vendor/gix/src/remote/connection/ref_map.rs
index f1b40d56e..bf53cf35f 100644
--- a/vendor/gix/src/remote/connection/ref_map.rs
+++ b/vendor/gix/src/remote/connection/ref_map.rs
@@ -95,7 +95,7 @@ where
#[gix_protocol::maybe_async::maybe_async]
pub async fn ref_map(mut self, progress: impl Progress, options: Options) -> Result<fetch::RefMap, Error> {
let res = self.ref_map_inner(progress, options).await;
- gix_protocol::indicate_end_of_interaction(&mut self.transport)
+ gix_protocol::indicate_end_of_interaction(&mut self.transport, self.trace)
.await
.ok();
res
@@ -112,6 +112,7 @@ where
mut extra_refspecs,
}: Options,
) -> Result<fetch::RefMap, Error> {
+ let _span = gix_trace::coarse!("remote::Connection::ref_map()");
let null = gix_hash::ObjectId::null(gix_hash::Kind::Sha1); // OK to hardcode Sha1, it's not supposed to match, ever.
if let Some(tag_spec) = self.remote.fetch_tags.to_refspec().map(|spec| spec.to_owned()) {
@@ -186,6 +187,7 @@ where
refspecs: &[gix_refspec::RefSpec],
mut progress: impl Progress,
) -> Result<HandshakeWithRefs, Error> {
+ let _span = gix_trace::coarse!("remote::Connection::fetch_refs()");
let mut credentials_storage;
let url = self.transport.to_url();
let authenticate = match self.authenticate.as_mut() {
@@ -241,6 +243,7 @@ where
Ok(gix_protocol::ls_refs::Action::Continue)
},
&mut progress,
+ self.trace,
)
.await?
}
diff --git a/vendor/gix/src/repository/config/mod.rs b/vendor/gix/src/repository/config/mod.rs
index 618ccf0f6..6966e1276 100644
--- a/vendor/gix/src/repository/config/mod.rs
+++ b/vendor/gix/src/repository/config/mod.rs
@@ -79,6 +79,52 @@ impl crate::Repository {
Ok(opts)
}
+ /// Return the context to be passed to any spawned program that is supposed to interact with the repository, like
+ /// hooks or filters.
+ #[cfg(feature = "attributes")]
+ pub fn command_context(&self) -> Result<gix_command::Context, config::command_context::Error> {
+ use crate::config::{
+ cache::util::ApplyLeniency,
+ tree::{gitoxide, Key},
+ };
+
+ let pathspec_boolean = |key: &'static config::tree::keys::Boolean| {
+ self.config
+ .resolved
+ .boolean("gitoxide", Some("pathspec".into()), key.name())
+ .map(|value| key.enrich_error(value))
+ .transpose()
+ .with_leniency(self.config.lenient_config)
+ };
+
+ Ok(gix_command::Context {
+ stderr: {
+ let key = &gitoxide::Core::EXTERNAL_COMMAND_STDERR;
+ self.config
+ .resolved
+ .boolean("gitoxide", Some("core".into()), key.name())
+ .map(|value| key.enrich_error(value))
+ .transpose()
+ .with_leniency(self.config.lenient_config)?
+ .unwrap_or(true)
+ .into()
+ },
+ git_dir: self.git_dir().to_owned().into(),
+ worktree_dir: self.work_dir().map(ToOwned::to_owned),
+ no_replace_objects: config::shared::is_replace_refs_enabled(
+ &self.config.resolved,
+ self.config.lenient_config,
+ self.filter_config_section(),
+ )?
+ .map(|enabled| !enabled),
+ ref_namespace: self.refs.namespace.as_ref().map(|ns| ns.as_bstr().to_owned()),
+ literal_pathspecs: pathspec_boolean(&gitoxide::Pathspec::LITERAL)?,
+ glob_pathspecs: pathspec_boolean(&gitoxide::Pathspec::GLOB)?
+ .or(pathspec_boolean(&gitoxide::Pathspec::NOGLOB)?),
+ icase_pathspecs: pathspec_boolean(&gitoxide::Pathspec::ICASE)?,
+ })
+ }
+
/// The kind of object hash the repository is configured to use.
pub fn object_hash(&self) -> gix_hash::Kind {
self.config.object_hash
diff --git a/vendor/gix/src/repository/config/transport.rs b/vendor/gix/src/repository/config/transport.rs
index 99b5a7f47..907e2a4fb 100644
--- a/vendor/gix/src/repository/config/transport.rs
+++ b/vendor/gix/src/repository/config/transport.rs
@@ -405,6 +405,30 @@ impl crate::Repository {
}
}
+ {
+ let key = "gitoxide.http.sslNoVerify";
+ let ssl_no_verify = config
+ .boolean_filter_by_key(key, &mut trusted_only)
+ .map(|value| config::tree::gitoxide::Http::SSL_NO_VERIFY.enrich_error(value))
+ .transpose()
+ .with_leniency(lenient)
+ .map_err(config::transport::http::Error::from)?
+ .unwrap_or_default();
+
+ if ssl_no_verify {
+ opts.ssl_verify = false;
+ } else {
+ let key = "http.sslVerify";
+ opts.ssl_verify = config
+ .boolean_filter_by_key(key, &mut trusted_only)
+ .map(|value| config::tree::Http::SSL_VERIFY.enrich_error(value))
+ .transpose()
+ .with_leniency(lenient)
+ .map_err(config::transport::http::Error::from)?
+ .unwrap_or(true);
+ }
+ }
+
#[cfg(feature = "blocking-http-transport-curl")]
{
let key = "http.schannelCheckRevoke";
diff --git a/vendor/gix/src/repository/diff.rs b/vendor/gix/src/repository/diff.rs
new file mode 100644
index 000000000..cb1d070a2
--- /dev/null
+++ b/vendor/gix/src/repository/diff.rs
@@ -0,0 +1,45 @@
+use crate::Repository;
+
+///
+pub mod resource_cache {
+ /// The error returned by [Repository::diff_resource_cache()](super::Repository::diff_resource_cache()).
+ #[derive(Debug, thiserror::Error)]
+ #[allow(missing_docs)]
+ pub enum Error {
+ #[error("Could not obtain resource cache for diffing")]
+ ResourceCache(#[from] crate::diff::resource_cache::Error),
+ #[error(transparent)]
+ Index(#[from] crate::repository::index_or_load_from_head::Error),
+ }
+}
+
+/// Diff-utilities
+impl Repository {
+ /// Create a resource cache for diffable objects, and configured with everything it needs to know to perform diffs
+ /// faithfully just like `git` would.
+ /// `mode` controls what version of a resource should be diffed.
+ /// `worktree_roots` determine if files can be read from the worktree, where each side of the diff operation can
+ /// be represented by its own worktree root. `.gitattributes` are automatically read from the worktree if at least
+ /// one worktree is present.
+ ///
+ /// Note that attributes will always be obtained from the current `HEAD` index even if the resources being diffed
+ /// might live in another tree. Further, if one of the `worktree_roots` are set, attributes will also be read from
+ /// the worktree. Otherwise, it will be skipped and attributes are read from the index tree instead.
+ pub fn diff_resource_cache(
+ &self,
+ mode: gix_diff::blob::pipeline::Mode,
+ worktree_roots: gix_diff::blob::pipeline::WorktreeRoots,
+ ) -> Result<gix_diff::blob::Platform, resource_cache::Error> {
+ Ok(crate::diff::resource_cache(
+ self,
+ &*self.index_or_load_from_head()?,
+ mode,
+ if worktree_roots.new_root.is_some() || worktree_roots.old_root.is_some() {
+ gix_worktree::stack::state::attributes::Source::WorktreeThenIdMapping
+ } else {
+ gix_worktree::stack::state::attributes::Source::IdMapping
+ },
+ worktree_roots,
+ )?)
+ }
+}
diff --git a/vendor/gix/src/repository/filter.rs b/vendor/gix/src/repository/filter.rs
index 3aacb1a3d..68644ca98 100644
--- a/vendor/gix/src/repository/filter.rs
+++ b/vendor/gix/src/repository/filter.rs
@@ -2,7 +2,7 @@ use crate::{filter, repository::IndexPersistedOrInMemory, Id, Repository};
///
pub mod pipeline {
- /// The error returned by [Repository::filter_pipeline()][super::Repository::filter_pipeline()].
+ /// The error returned by [Repository::filter_pipeline()](super::Repository::filter_pipeline()).
#[derive(Debug, thiserror::Error)]
#[allow(missing_docs)]
pub enum Error {
@@ -24,7 +24,7 @@ pub mod pipeline {
impl Repository {
/// Configure a pipeline for converting byte buffers to the worktree representation, and byte streams to the git-internal
/// representation. Also return the index that was used when initializing the pipeline as it may be useful when calling
- /// [convert_to_git()][filter::Pipeline::convert_to_git()].
+ /// [convert_to_git()](filter::Pipeline::convert_to_git()).
/// Bare repositories will either use `HEAD^{tree}` for accessing all relevant worktree files or the given `tree_if_bare`.
///
/// Note that this is considered a primitive as it operates on data directly and will not have permanent effects.
diff --git a/vendor/gix/src/repository/graph.rs b/vendor/gix/src/repository/graph.rs
index f4f2b18cc..7d59589ed 100644
--- a/vendor/gix/src/repository/graph.rs
+++ b/vendor/gix/src/repository/graph.rs
@@ -1,5 +1,3 @@
-use gix_odb::Find;
-
impl crate::Repository {
/// Create a graph data-structure capable of accelerating graph traversals and storing state of type `T` with each commit
/// it encountered.
@@ -16,11 +14,7 @@ impl crate::Repository {
/// of the commit walk.
pub fn revision_graph<T>(&self) -> gix_revwalk::Graph<'_, T> {
gix_revwalk::Graph::new(
- |id, buf| {
- self.objects
- .try_find(id, buf)
- .map(|r| r.and_then(gix_object::Data::try_into_commit_iter))
- },
+ &self.objects,
self.config
.may_use_commit_graph()
.unwrap_or(true)
diff --git a/vendor/gix/src/repository/index.rs b/vendor/gix/src/repository/index.rs
index 59666fc5f..85a1a664b 100644
--- a/vendor/gix/src/repository/index.rs
+++ b/vendor/gix/src/repository/index.rs
@@ -1,5 +1,3 @@
-use gix_odb::FindExt;
-
use crate::{config::cache::util::ApplyLeniencyDefault, repository::IndexPersistedOrInMemory, worktree};
/// Index access
@@ -113,7 +111,7 @@ impl crate::Repository {
tree: &gix_hash::oid,
) -> Result<gix_index::File, gix_traverse::tree::breadthfirst::Error> {
Ok(gix_index::File::from_state(
- gix_index::State::from_tree(tree, |oid, buf| self.objects.find_tree_iter(oid, buf).ok())?,
+ gix_index::State::from_tree(tree, &self.objects)?,
self.git_dir().join("index"),
))
}
diff --git a/vendor/gix/src/repository/kind.rs b/vendor/gix/src/repository/kind.rs
index 88779e0cc..a9af07e23 100644
--- a/vendor/gix/src/repository/kind.rs
+++ b/vendor/gix/src/repository/kind.rs
@@ -13,7 +13,7 @@ impl From<gix_discover::repository::Kind> for Kind {
gix_discover::repository::Kind::Submodule { .. } | gix_discover::repository::Kind::SubmoduleGitDir => {
Kind::WorkTree { is_linked: false }
}
- gix_discover::repository::Kind::Bare => Kind::Bare,
+ gix_discover::repository::Kind::PossiblyBare => Kind::Bare,
gix_discover::repository::Kind::WorkTreeGitDir { .. } => Kind::WorkTree { is_linked: true },
gix_discover::repository::Kind::WorkTree { linked_git_dir } => Kind::WorkTree {
is_linked: linked_git_dir.is_some(),
diff --git a/vendor/gix/src/repository/mod.rs b/vendor/gix/src/repository/mod.rs
index e3742894b..28aa5aa8e 100644
--- a/vendor/gix/src/repository/mod.rs
+++ b/vendor/gix/src/repository/mod.rs
@@ -40,6 +40,9 @@ pub mod attributes;
mod cache;
mod config;
///
+#[cfg(feature = "blob-diff")]
+pub mod diff;
+///
#[cfg(feature = "attributes")]
pub mod filter;
mod graph;
@@ -124,6 +127,8 @@ pub mod worktree_stream {
AttributesCache(#[from] crate::config::attribute_stack::Error),
#[error(transparent)]
FilterPipeline(#[from] crate::filter::pipeline::options::Error),
+ #[error(transparent)]
+ CommandContext(#[from] crate::config::command_context::Error),
#[error("Needed {id} to be a tree to turn into a workspace stream, got {actual}")]
NotATree {
id: gix_hash::ObjectId,
diff --git a/vendor/gix/src/repository/object.rs b/vendor/gix/src/repository/object.rs
index 0b894939f..77f188bad 100644
--- a/vendor/gix/src/repository/object.rs
+++ b/vendor/gix/src/repository/object.rs
@@ -3,7 +3,8 @@ use std::{convert::TryInto, ops::DerefMut};
use gix_hash::ObjectId;
use gix_macros::momo;
-use gix_odb::{Find, FindExt, Header, HeaderExt, Write};
+use gix_object::{Exists, Find, FindExt};
+use gix_odb::{Header, HeaderExt, Write};
use gix_ref::{
transaction::{LogChange, PreviousValue, RefLog},
FullName,
@@ -70,7 +71,7 @@ impl crate::Repository {
if id == ObjectId::empty_tree(self.object_hash()) {
true
} else {
- self.objects.contains(id)
+ self.objects.exists(id)
}
}
@@ -140,7 +141,7 @@ impl crate::Repository {
fn write_object_inner(&self, buf: &[u8], kind: gix_object::Kind) -> Result<Id<'_>, object::write::Error> {
let oid = gix_object::compute_hash(self.object_hash(), kind, buf);
- if self.objects.contains(&oid) {
+ if self.objects.exists(&oid) {
return Ok(oid.attach(self));
}
@@ -158,7 +159,7 @@ impl crate::Repository {
pub fn write_blob(&self, bytes: impl AsRef<[u8]>) -> Result<Id<'_>, object::write::Error> {
let bytes = bytes.as_ref();
let oid = gix_object::compute_hash(self.object_hash(), gix_object::Kind::Blob, bytes);
- if self.objects.contains(&oid) {
+ if self.objects.exists(&oid) {
return Ok(oid.attach(self));
}
self.objects
@@ -185,7 +186,7 @@ impl crate::Repository {
fn write_blob_stream_inner(&self, buf: &[u8]) -> Result<Id<'_>, object::write::Error> {
let oid = gix_object::compute_hash(self.object_hash(), gix_object::Kind::Blob, buf);
- if self.objects.contains(&oid) {
+ if self.objects.exists(&oid) {
return Ok(oid.attach(self));
}
diff --git a/vendor/gix/src/repository/reference.rs b/vendor/gix/src/repository/reference.rs
index e57ca63c0..b977c6ea8 100644
--- a/vendor/gix/src/repository/reference.rs
+++ b/vendor/gix/src/repository/reference.rs
@@ -174,7 +174,8 @@ impl crate::Repository {
.attach(self))
}
- /// Resolve the `HEAD` reference, follow and peel its target and obtain its object id.
+ /// Resolve the `HEAD` reference, follow and peel its target and obtain its object id,
+ /// following symbolic references and tags until a commit is found.
///
/// Note that this may fail for various reasons, most notably because the repository
/// is freshly initialized and doesn't have any commits yet.
@@ -182,12 +183,7 @@ impl crate::Repository {
/// Also note that the returned id is likely to point to a commit, but could also
/// point to a tree or blob. It won't, however, point to a tag as these are always peeled.
pub fn head_id(&self) -> Result<crate::Id<'_>, reference::head_id::Error> {
- let mut head = self.head()?;
- head.peel_to_id_in_place()
- .ok_or_else(|| reference::head_id::Error::Unborn {
- name: head.referent_name().expect("unborn").to_owned(),
- })?
- .map_err(Into::into)
+ Ok(self.head()?.into_peeled_id()?)
}
/// Return the name to the symbolic reference `HEAD` points to, or `None` if the head is detached.
@@ -203,7 +199,8 @@ impl crate::Repository {
Ok(self.head()?.try_into_referent())
}
- /// Return the commit object the `HEAD` reference currently points to after peeling it fully.
+ /// Return the commit object the `HEAD` reference currently points to after peeling it fully,
+ /// following symbolic references and tags until a commit is found.
///
/// Note that this may fail for various reasons, most notably because the repository
/// is freshly initialized and doesn't have any commits yet. It could also fail if the
@@ -212,13 +209,14 @@ impl crate::Repository {
Ok(self.head()?.peel_to_commit_in_place()?)
}
- /// Return the tree id the `HEAD` reference currently points to after peeling it fully.
+ /// Return the tree id the `HEAD` reference currently points to after peeling it fully,
+ /// following symbolic references and tags until a commit is found.
///
/// Note that this may fail for various reasons, most notably because the repository
/// is freshly initialized and doesn't have any commits yet. It could also fail if the
/// head does not point to a commit.
pub fn head_tree_id(&self) -> Result<crate::Id<'_>, reference::head_tree_id::Error> {
- Ok(self.head()?.peel_to_commit_in_place()?.tree_id()?)
+ Ok(self.head_commit()?.tree_id()?)
}
/// Find the reference with the given partial or full `name`, like `main`, `HEAD`, `heads/branch` or `origin/other`,
diff --git a/vendor/gix/src/repository/revision.rs b/vendor/gix/src/repository/revision.rs
index bb9b56d57..b59a3a94d 100644
--- a/vendor/gix/src/repository/revision.rs
+++ b/vendor/gix/src/repository/revision.rs
@@ -1,6 +1,7 @@
-use crate::{bstr::BStr, revision, Id};
use gix_macros::momo;
+use crate::{bstr::BStr, revision, Id};
+
/// Methods for resolving revisions by spec or working with the commit graph.
impl crate::Repository {
/// Parse a revision specification and turn it into the object(s) it describes, similar to `git rev-parse`.
diff --git a/vendor/gix/src/repository/worktree.rs b/vendor/gix/src/repository/worktree.rs
index cc6f0bf73..529243896 100644
--- a/vendor/gix/src/repository/worktree.rs
+++ b/vendor/gix/src/repository/worktree.rs
@@ -62,7 +62,7 @@ impl crate::Repository {
&self,
id: impl Into<gix_hash::ObjectId>,
) -> Result<(gix_worktree_stream::Stream, gix_index::File), crate::repository::worktree_stream::Error> {
- use gix_odb::{FindExt, HeaderExt};
+ use gix_odb::HeaderExt;
let id = id.into();
let header = self.objects.header(id)?;
if !header.kind().is_tree() {
@@ -79,18 +79,14 @@ impl crate::Repository {
let mut cache = self
.attributes_only(&index, gix_worktree::stack::state::attributes::Source::IdMapping)?
.detach();
- let pipeline =
- gix_filter::Pipeline::new(cache.attributes_collection(), crate::filter::Pipeline::options(self)?);
+ let pipeline = gix_filter::Pipeline::new(self.command_context()?, crate::filter::Pipeline::options(self)?);
let objects = self.objects.clone().into_arc().expect("TBD error handling");
let stream = gix_worktree_stream::from_tree(
id,
- {
- let objects = objects.clone();
- move |id, buf| objects.find(id, buf)
- },
+ objects.clone(),
pipeline,
move |path, mode, attrs| -> std::io::Result<()> {
- let entry = cache.at_entry(path, Some(mode.is_tree()), |id, buf| objects.find_blob(id, buf))?;
+ let entry = cache.at_entry(path, Some(mode.is_tree()), &objects)?;
entry.matching_attributes(attrs);
Ok(())
},
diff --git a/vendor/gix/src/revision/mod.rs b/vendor/gix/src/revision/mod.rs
index 3de528ecd..62fe72dd3 100644
--- a/vendor/gix/src/revision/mod.rs
+++ b/vendor/gix/src/revision/mod.rs
@@ -7,6 +7,7 @@ pub use gix_revision as plumbing;
///
pub mod walk;
+use crate::bstr::BString;
pub use walk::iter::Walk;
///
@@ -22,6 +23,8 @@ pub mod spec;
#[cfg(feature = "revision")]
pub struct Spec<'repo> {
pub(crate) inner: gix_revision::Spec,
+ /// The path we encountered in the revspec, like `@:<path>` or `@..@~1:<path>`.
+ pub(crate) path: Option<(BString, gix_object::tree::EntryMode)>,
/// The first name of a reference as seen while parsing a `RevSpec`, for completeness.
pub(crate) first_ref: Option<gix_ref::Reference>,
/// The second name of a reference as seen while parsing a `RevSpec`, for completeness.
diff --git a/vendor/gix/src/revision/spec/mod.rs b/vendor/gix/src/revision/spec/mod.rs
index a6a6eb739..af58ecdff 100644
--- a/vendor/gix/src/revision/spec/mod.rs
+++ b/vendor/gix/src/revision/spec/mod.rs
@@ -1,3 +1,4 @@
+use crate::bstr::BStr;
use crate::{ext::ReferenceExt, revision::Spec, Id, Reference};
///
@@ -37,6 +38,7 @@ impl<'repo> Spec<'repo> {
pub fn from_id(id: Id<'repo>) -> Self {
Spec {
inner: gix_revision::Spec::Include(id.inner),
+ path: None,
repo: id.repo,
first_ref: None,
second_ref: None,
@@ -62,6 +64,13 @@ impl<'repo> Spec<'repo> {
)
}
+ /// Return the path encountered in specs like `@:<path>` or `:<path>`, along with the kind of object it represents.
+ ///
+ /// Note that there can only be one as paths always terminates further revspec parsing.
+ pub fn path_and_mode(&self) -> Option<(&BStr, gix_object::tree::EntryMode)> {
+ self.path.as_ref().map(|(p, mode)| (p.as_ref(), *mode))
+ }
+
/// Return the name of the first reference we encountered while resolving the rev-spec, or `None` if a short hash
/// was used. For example, `@` might yield `Some(HEAD)`, but `abcd` yields `None`.
pub fn first_reference(&self) -> Option<&gix_ref::Reference> {
diff --git a/vendor/gix/src/revision/spec/parse/delegate/mod.rs b/vendor/gix/src/revision/spec/parse/delegate/mod.rs
index eaf7f5fd6..374906eaf 100644
--- a/vendor/gix/src/revision/spec/parse/delegate/mod.rs
+++ b/vendor/gix/src/revision/spec/parse/delegate/mod.rs
@@ -17,6 +17,7 @@ impl<'repo> Delegate<'repo> {
Delegate {
refs: Default::default(),
objs: Default::default(),
+ paths: Default::default(),
ambiguous_objects: Default::default(),
idx: 0,
kind: None,
@@ -100,6 +101,7 @@ impl<'repo> Delegate<'repo> {
let range = zero_or_one_objects_or_ambiguity_err(self.objs, self.prefix, self.err, self.repo)?;
Ok(crate::revision::Spec {
+ path: self.paths[0].take().or(self.paths[1].take()),
first_ref: self.refs[0].take(),
second_ref: self.refs[1].take(),
inner: kind_to_spec(self.kind, range)?,
diff --git a/vendor/gix/src/revision/spec/parse/delegate/navigate.rs b/vendor/gix/src/revision/spec/parse/delegate/navigate.rs
index 51feb1d76..731a24136 100644
--- a/vendor/gix/src/revision/spec/parse/delegate/navigate.rs
+++ b/vendor/gix/src/revision/spec/parse/delegate/navigate.rs
@@ -121,7 +121,7 @@ impl<'repo> delegate::Navigate for Delegate<'repo> {
let lookup_path = |obj: &ObjectId| {
let tree_id = peel(repo, obj, gix_object::Kind::Tree)?;
if path.is_empty() {
- return Ok(tree_id);
+ return Ok((tree_id, gix_object::tree::EntryKind::Tree.into()));
}
let mut tree = repo.find_object(tree_id)?.into_tree();
let entry =
@@ -131,11 +131,17 @@ impl<'repo> delegate::Navigate for Delegate<'repo> {
object: obj.attach(repo).shorten_or_id(),
tree: tree_id.attach(repo).shorten_or_id(),
})?;
- Ok(entry.object_id())
+ Ok((entry.object_id(), entry.mode()))
};
for obj in objs.iter() {
match lookup_path(obj) {
- Ok(replace) => replacements.push((*obj, replace)),
+ Ok((replace, mode)) => {
+ if !path.is_empty() {
+ // Technically this is letting the last one win, but so be it.
+ self.paths[self.idx] = Some((path.to_owned(), mode));
+ }
+ replacements.push((*obj, replace))
+ }
Err(err) => errors.push((*obj, err)),
}
}
@@ -306,6 +312,14 @@ impl<'repo> delegate::Navigate for Delegate<'repo> {
self.objs[self.idx]
.get_or_insert_with(HashSet::default)
.insert(entry.id);
+
+ self.paths[self.idx] = Some((
+ path.to_owned(),
+ entry
+ .mode
+ .to_tree_entry_mode()
+ .unwrap_or(gix_object::tree::EntryKind::Blob.into()),
+ ));
Some(())
}
None => {
diff --git a/vendor/gix/src/revision/spec/parse/mod.rs b/vendor/gix/src/revision/spec/parse/mod.rs
index 950dfa004..e45847763 100644
--- a/vendor/gix/src/revision/spec/parse/mod.rs
+++ b/vendor/gix/src/revision/spec/parse/mod.rs
@@ -7,6 +7,7 @@ use gix_revision::spec::parse;
use crate::{bstr::BStr, revision::Spec, Repository};
mod types;
+use crate::bstr::BString;
pub use types::{Error, ObjectKindHint, Options, RefsHint};
///
@@ -45,6 +46,9 @@ impl<'repo> Spec<'repo> {
struct Delegate<'repo> {
refs: [Option<gix_ref::Reference>; 2],
objs: [Option<HashSet<ObjectId>>; 2],
+ /// Path specified like `@:<path>` or `:<path>` for later use when looking up specs.
+ /// Note that it terminates spec parsing, so it's either `0` or `1`, never both.
+ paths: [Option<(BString, gix_object::tree::EntryMode)>; 2],
/// The originally encountered ambiguous objects for potential later use in errors.
ambiguous_objects: [Option<HashSet<ObjectId>>; 2],
idx: usize,
diff --git a/vendor/gix/src/revision/walk.rs b/vendor/gix/src/revision/walk.rs
index 5e76ad898..19d15d569 100644
--- a/vendor/gix/src/revision/walk.rs
+++ b/vendor/gix/src/revision/walk.rs
@@ -1,5 +1,5 @@
use gix_hash::ObjectId;
-use gix_odb::FindExt;
+use gix_object::FindExt;
use crate::{ext::ObjectIdExt, revision, Repository};
@@ -169,7 +169,7 @@ impl<'repo> Platform<'repo> {
gix_traverse::commit::Ancestors::filtered(
tips,
gix_traverse::commit::ancestors::State::default(),
- move |oid, buf| repo.objects.find_commit_iter(oid, buf),
+ &repo.objects,
{
// Note that specific shallow handling for commit-graphs isn't needed as these contain
// all information there is, and exclude shallow parents to be structurally consistent.
diff --git a/vendor/gix/src/submodule/mod.rs b/vendor/gix/src/submodule/mod.rs
index 52c5938fc..fcfffd26f 100644
--- a/vendor/gix/src/submodule/mod.rs
+++ b/vendor/gix/src/submodule/mod.rs
@@ -7,7 +7,6 @@ use std::{
path::PathBuf,
};
-use gix_odb::FindExt;
pub use gix_submodule::*;
use crate::{bstr::BStr, repository::IndexPersistedOrInMemory, Repository, Submodule};
@@ -147,9 +146,7 @@ impl<'repo> Submodule<'repo> {
&mut |relative_path, case, is_dir, out| {
attributes
.set_case(case)
- .at_entry(relative_path, Some(is_dir), |id, buf| {
- self.state.repo.objects.find_blob(id, buf)
- })
+ .at_entry(relative_path, Some(is_dir), &self.state.repo.objects)
.map_or(false, |platform| platform.matching_attributes(out))
}
})?;
@@ -184,7 +181,7 @@ impl<'repo> Submodule<'repo> {
.head_commit()?
.tree()?
.peel_to_entry_by_path(gix_path::from_bstr(path.as_ref()))?
- .and_then(|entry| (entry.mode() == gix_object::tree::EntryMode::Commit).then_some(entry.inner.oid)))
+ .and_then(|entry| (entry.mode().is_commit()).then_some(entry.inner.oid)))
}
/// Return the path at which the repository of the submodule should be located.