diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-19 09:26:03 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-19 09:26:03 +0000 |
commit | 9918693037dce8aa4bb6f08741b6812923486c18 (patch) | |
tree | 21d2b40bec7e6a7ea664acee056eb3d08e15a1cf /vendor/gix | |
parent | Releasing progress-linux version 1.75.0+dfsg1-5~progress7.99u1. (diff) | |
download | rustc-9918693037dce8aa4bb6f08741b6812923486c18.tar.xz rustc-9918693037dce8aa4bb6f08741b6812923486c18.zip |
Merging upstream version 1.76.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/gix')
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. |