summaryrefslogtreecommitdiffstats
path: root/vendor/gix
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/gix')
-rw-r--r--vendor/gix/.cargo-checksum.json2
-rw-r--r--vendor/gix/CHANGELOG.md123
-rw-r--r--vendor/gix/Cargo.lock196
-rw-r--r--vendor/gix/Cargo.toml86
-rw-r--r--vendor/gix/LICENSE-APACHE191
-rw-r--r--vendor/gix/LICENSE-MIT21
-rw-r--r--vendor/gix/src/clone/access.rs6
-rw-r--r--vendor/gix/src/clone/fetch/mod.rs30
-rw-r--r--vendor/gix/src/clone/fetch/util.rs2
-rw-r--r--vendor/gix/src/clone/mod.rs2
-rw-r--r--vendor/gix/src/commit.rs23
-rw-r--r--vendor/gix/src/config/cache/access.rs3
-rw-r--r--vendor/gix/src/config/cache/init.rs18
-rw-r--r--vendor/gix/src/config/cache/util.rs12
-rw-r--r--vendor/gix/src/config/mod.rs4
-rw-r--r--vendor/gix/src/config/overrides.rs2
-rw-r--r--vendor/gix/src/config/snapshot/credential_helpers.rs2
-rw-r--r--vendor/gix/src/config/tree/keys.rs7
-rw-r--r--vendor/gix/src/config/tree/mod.rs13
-rw-r--r--vendor/gix/src/config/tree/sections/core.rs6
-rw-r--r--vendor/gix/src/config/tree/sections/fetch.rs68
-rw-r--r--vendor/gix/src/config/tree/sections/gitoxide.rs17
-rw-r--r--vendor/gix/src/config/tree/sections/index.rs10
-rw-r--r--vendor/gix/src/config/tree/sections/mod.rs5
-rw-r--r--vendor/gix/src/config/tree/sections/protocol.rs54
-rw-r--r--vendor/gix/src/env.rs5
-rw-r--r--vendor/gix/src/head/peel.rs4
-rw-r--r--vendor/gix/src/id.rs2
-rw-r--r--vendor/gix/src/lib.rs27
-rw-r--r--vendor/gix/src/object/tree/diff/for_each.rs10
-rw-r--r--vendor/gix/src/object/tree/diff/rewrites.rs2
-rw-r--r--vendor/gix/src/object/tree/diff/tracked.rs5
-rw-r--r--vendor/gix/src/open/permissions.rs3
-rw-r--r--vendor/gix/src/open/repository.rs6
-rw-r--r--vendor/gix/src/reference/edits.rs2
-rw-r--r--vendor/gix/src/reference/errors.rs14
-rw-r--r--vendor/gix/src/reference/remote.rs2
-rw-r--r--vendor/gix/src/remote/connect.rs26
-rw-r--r--vendor/gix/src/remote/connection/access.rs2
-rw-r--r--vendor/gix/src/remote/connection/fetch/error.rs2
-rw-r--r--vendor/gix/src/remote/connection/fetch/mod.rs11
-rw-r--r--vendor/gix/src/remote/connection/fetch/negotiate.rs392
-rw-r--r--vendor/gix/src/remote/connection/fetch/receive_pack.rs296
-rw-r--r--vendor/gix/src/remote/connection/fetch/update_refs/tests.rs14
-rw-r--r--vendor/gix/src/remote/connection/ref_map.rs19
-rw-r--r--vendor/gix/src/remote/fetch.rs35
-rw-r--r--vendor/gix/src/repository/config/mod.rs2
-rw-r--r--vendor/gix/src/repository/graph.rs24
-rw-r--r--vendor/gix/src/repository/init.rs7
-rw-r--r--vendor/gix/src/repository/kind.rs (renamed from vendor/gix/src/kind.rs)2
-rw-r--r--vendor/gix/src/repository/location.rs8
-rw-r--r--vendor/gix/src/repository/mod.rs16
-rw-r--r--vendor/gix/src/repository/object.rs3
-rw-r--r--vendor/gix/src/repository/remote.rs4
-rw-r--r--vendor/gix/src/repository/snapshots.rs2
-rw-r--r--vendor/gix/src/repository/thread_safe.rs12
-rw-r--r--vendor/gix/src/repository/worktree.rs3
-rw-r--r--vendor/gix/src/revision/spec/parse/delegate/navigate.rs3
-rw-r--r--vendor/gix/src/types.rs16
59 files changed, 1383 insertions, 501 deletions
diff --git a/vendor/gix/.cargo-checksum.json b/vendor/gix/.cargo-checksum.json
index 132a163c0..2450144e5 100644
--- a/vendor/gix/.cargo-checksum.json
+++ b/vendor/gix/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"CHANGELOG.md":"837f91e546ec4ce70d2f08e7d564b6a49b7ce7bf6cc8621c3d19028e8199e2aa","Cargo.lock":"0bdec0596a9b90e766d89b9015d9c840c22b6e49db3c3ded74d55614e360b128","Cargo.toml":"5034fd9daf9cb689f13dde47c4303166881c7f454c4c288adb28a1d0f637f960","src/assets/baseline-init/HEAD":"28d25bf82af4c0e2b72f50959b2beb859e3e60b9630a5e8c603dad4ddb2b6e80","src/assets/baseline-init/description":"85ab6c163d43a17ea9cf7788308bca1466f1b0a8d1cc92e26e9bf63da4062aee","src/assets/baseline-init/hooks/applypatch-msg.sample":"64b47216779d705b5270e94970aa0bc7b96fd256af0a624e936f6b1b85a014db","src/assets/baseline-init/hooks/commit-msg.sample":"1f74d5e9292979b573ebd59741d46cb93ff391acdd083d340b94370753d92437","src/assets/baseline-init/hooks/fsmonitor-watchman.sample":"f3c0228d8e827f1c5260ac59fdd92c3d425c46e54711ef713c5a54ae0a4db2b4","src/assets/baseline-init/hooks/post-update.sample":"81765af2daef323061dcbc5e61fc16481cb74b3bac9ad8a174b186523586f6c5","src/assets/baseline-init/hooks/pre-applypatch.sample":"e99aee3f6ff6a07f775cab64af1c6507d46d20afa4a5a87fd3402d22b1de2797","src/assets/baseline-init/hooks/pre-commit.sample":"f9af7d95eb1231ecf2eba9770fedfa8d4797a12b02d7240e98d568201251244a","src/assets/baseline-init/hooks/pre-merge-commit.sample":"d3825a70337940ebbd0a5c072984e13245920cdf8898bd225c8d27a6dfc9cb53","src/assets/baseline-init/hooks/pre-push.sample":"4b1119e1e13a212571976f4aee77847cdbd40978546d6273a557e238981a40d1","src/assets/baseline-init/hooks/pre-rebase.sample":"3ac3a30cffe859b71a27d77a7fc1635d35ff5d5aaecc896bba11bd01e1b307ce","src/assets/baseline-init/hooks/pre-receive.sample":"a4c3d2b9c7bb3fd8d1441c31bd4ee71a595d66b44fcf49ddb310252320169989","src/assets/baseline-init/hooks/prepare-commit-msg.sample":"e9ddcaa4189fddd25ed97fc8c789eca7b6ca16390b2392ae3276f0c8e1aa4619","src/assets/baseline-init/hooks/update.sample":"978235ae8b913ab4d0f906a8af621a0bfe7c314d84b715f4f64ee9b1aa3cce2d","src/assets/baseline-init/info/exclude":"6671fe83b7a07c8932ee89164d1f2793b2318058eb8b98dc5c06ee0a5a3b0ec1","src/attributes.rs":"af39ccaf9438b1b832808e7758610876cabda0c137d1e8cb6d1ecb7ef3121ce0","src/clone/access.rs":"18b922c8df27095570109df5a64f2f348a549a50e362c243d3f4f9b74cd60a9d","src/clone/checkout.rs":"82ebd7de88815b5975e00f4740114f77ed78441c31eb42a74b6213eb5acf0798","src/clone/fetch/mod.rs":"8678c4aa399b3c51e36e45e4c5a3205c00811064bb9c2927ef681c252cad3951","src/clone/fetch/util.rs":"fa8f750881e6a8b5838b7fa3899d91ad4d68c8027f14901003e76274190374ad","src/clone/mod.rs":"074d261755c56b082d3f4c000ff459b05fdf472cb749f48b9c13b6a74bb1ef10","src/commit.rs":"0e28a1dd18cee6088b8a031b070139db21ee7807109953e735bb75de11c56311","src/config/cache/access.rs":"e8a66d9c038e5401e49ffad7119448d18195bacdc8a14aaadda5d9f9c38df805","src/config/cache/incubate.rs":"babac6fef1f7ecec4bc5549a29db82857621de8e81e209ea0efd342783d3d88d","src/config/cache/init.rs":"9e459edc90432f82ffd89c9bfbf6978b9273e95935c0f173ba8ac8c2d4b4053c","src/config/cache/mod.rs":"3cce2cf0fafbc4f828870b85fef411a826ad6d1fe3ac5b6cbd2f5e049331aebf","src/config/cache/util.rs":"b10aa70d3523cfcc0cfe1e7814427c04c16117b0e96446cf9e26b9151c8f0640","src/config/mod.rs":"c69a09b43c4e8f4d52ef016ad9b7f940be385dfc9b05f5671b6f6b00b047a862","src/config/overrides.rs":"f9bd9b673ad78b9db98b169a05cd04d3aa6735e6e4a5bd621a2d4669fe2e8c58","src/config/snapshot/_impls.rs":"edae9b731c69828effbdfe01d32b7caa8c536df81d33de1cb67b88ece01a7218","src/config/snapshot/access.rs":"fc9b5df53f74627cb0d4f0bbcdb933ae9086394678929623dccb23f957fcfe91","src/config/snapshot/credential_helpers.rs":"690640166406598b0df5cc0dfa8c6a6d0051a897911e9fd5af56820dee7949a5","src/config/snapshot/mod.rs":"5377723de24b00ccb58e15df119831d7c0d9f2695f4499621db37546a5fccaff","src/config/tree/keys.rs":"11990d4d9581a2d182b40cbf7ef2cecd3694f3c127e996578b724c7981fe45d9","src/config/tree/mod.rs":"af0255337243ffd45613967d74d234215750cfc9abb94d2e02360385f6aef268","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":"98e06197a143fd06a014887dcc64279592cca5a138e285ec8f6a08d16a3b4787","src/config/tree/sections/credential.rs":"e1ce72dc24b9d2f06827b9fc6e8c963f888844ab5a4b48f6d867ad8542909b94","src/config/tree/sections/diff.rs":"b2bdfba61b34bc08c81d84b6b9e7ba009f8e0277f71e79393020d26c4112cde6","src/config/tree/sections/extensions.rs":"f73c444f2e2c8fbc8d1b1991c0d63532c792362e42833f3ae06059c07387cf66","src/config/tree/sections/gitoxide.rs":"e8104152d0c70c7f266c14cd8cda865bcaff77ba192b82202329c69b4d6177a3","src/config/tree/sections/http.rs":"58c9a9b8abcee4066eb4e20f9679dbbf888c04c21f4dbfff0d2ad7f0a18d4fcd","src/config/tree/sections/index.rs":"e54978e4c34a8c50345950f0b5adbfc8856ac636dc22cd1702bc4891322af8ca","src/config/tree/sections/init.rs":"e87e33ac5091797bde302f78c8fb7cefce0fb1752610409c1db53c3f7b4179af","src/config/tree/sections/mod.rs":"80fe0f8889922ce0e6481c4445c92f4fcd3675eef4328288b1bfeb4c54b15566","src/config/tree/sections/pack.rs":"0a6dcdc7603b0d7a84159a70789b63b6c26d539f98808c520a8e644fc9dbd2f3","src/config/tree/sections/protocol.rs":"835f757720767099c5b9993c8c3962dfe93338155d6d0f6b7db12960df5e25de","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":"0cba6d6381cd75482d28b3be5e008513197eb3d8565f540330f2458dd3ade472","src/diff.rs":"52bc752a2a8decff56b7a41d1ae97b90c0f3422332f999ced67fc884d6b25d18","src/discover.rs":"d1ff7f43fb4c2b5303fc6c045bb65f68bb394a5c20e2bf36d8378c7a053ce785","src/env.rs":"57fb7c22af1eb6c719bb4651272793abf87400d3a24ae8b0a212f9e044e74cee","src/ext/mod.rs":"3c96daa11ca8321dedc9b968176e31f6e3626e4cd60f308ad46e2ec7fe586bde","src/ext/object_id.rs":"a70afd79c84731df0023d738332b3688a2adbcbdda802f8ee70297fc8fe0ca38","src/ext/reference.rs":"a51fe4f63e5708afa4fbabd13638b88c34845a64263db77308cd1b974a0f325f","src/ext/rev_spec.rs":"c196f21a3981b7ad84e9385ba3924a554accf9c7a3b4f8e2bba13cb74f108ec8","src/ext/tree.rs":"c4446627523e22c032c0e322e5daa35b3105bf68f6eaa45da84c590edb76420e","src/head/log.rs":"0de9d5f834b633756001bdd246e98266084d521d7f775537e6e6ead5ed93d7e4","src/head/mod.rs":"443c8f5129d2e92d893f53d4d6babc1ae1a79c88c1474738d35f2cc8aac98465","src/head/peel.rs":"039473b0ba6b77414b330115d855452a03ee9bc1c8b447ff2e310cbb45636cb9","src/id.rs":"32ceeb77b52f47b4cc114789cadf78b4700121d10909a9e5be7f6ea021ccbd94","src/init.rs":"84d97d8ca3f61cb87dfc99be1ee56ee53c6bdac75a741bd5c7bf995f7d5cb137","src/interrupt.rs":"f6aaa74d277900528f5628e483bddc9c821199ea06db39630e3f55ef93dc31e9","src/kind.rs":"84485be9dd514b8b91e104ee3e72944e062eaabf393291a1ac7e6a090104dbe8","src/lib.rs":"e8d1aef0cd6aa2af2ba119c152e6ec4c8a803ba0b80f8aa99c609d5bb235d89e","src/mailmap.rs":"415301bdcb3d6991675c7ea86a92eea152cf65df7b2d14da4b58b3b605039e4e","src/object/blob.rs":"ae504ea412a4b0df0bb1d4e61655ed1d9f5654e1e586eedcf0d72fa1d20f7866","src/object/commit.rs":"d969468a537f8c509b708e9d2403da33ca1ac1442543589e683d080cefe66237","src/object/errors.rs":"f1b322fbff0e400dfb153e67e7f6de1839ec488b53e552ac968545131a79ac74","src/object/impls.rs":"6b9f76d332da496148adaa9b5b5de5dcf98c3fd92deba245dd2e6c2a3895eb77","src/object/mod.rs":"158263fe6f6a8db6ecebc741dac012a517508d5041e70909228e1c0ae9cee1c7","src/object/peel.rs":"c23ac9baac1216d9320c71926f56548d18f7f3964bdbcccd8ca81f6b756f7ad9","src/object/tag.rs":"b40e2b908de9dd500d297f1bcbd969facfe7beadcf62cc6a7cb975169f2da8be","src/object/tree/diff/change.rs":"95df7e1fb3b58fa2a0086f205c39940fb590ccdac92aee53a6cff5f29181f30c","src/object/tree/diff/for_each.rs":"419e83b0dfc6b2c9ee7e14489513f1979a3a6d46fa4e03e212f57d8aa90af60f","src/object/tree/diff/mod.rs":"980ec8425e9783a445d06d1a81b7a7f0cd05798a84a9ce2c7d7506e9c5912259","src/object/tree/diff/rewrites.rs":"582c5de23ce61dfe5b7bd76ac495d71a1f46b0831c5cffc1fe5c52be704217af","src/object/tree/diff/tracked.rs":"4dd20f5e2c3c577a1f51a0fd9cdcb4d40c8824f943439402bdeaef34fd0b00a6","src/object/tree/iter.rs":"4e54d72fce5a5bc9299ea36147dd2d95d3d25d34d97dd5d663e7ce0eb87b1f13","src/object/tree/mod.rs":"9d09e9fa8ad9a41b969b8f682447a5ad889a5ff713b53492e05302007ae2b252","src/object/tree/traverse.rs":"ae0342857d42b6afb82167423dfdac9611ce1b7281b6b9b542e230960c564c0f","src/open/mod.rs":"d25c11246536e7d57172b375569bd8545b8060f13bbfbc49cbf0f85636627076","src/open/options.rs":"697287cb2715d4a27353dbf7745ff381edd19f062ddd73e14b54f5e11c36d022","src/open/permissions.rs":"9f7f41fd250d043cea7ee6ff0cdc315838dbb6226bde3dca2a7666f01d648090","src/open/repository.rs":"82ff400bf75515f2f0c3ff33e5213e8020167bbaec86f8e2d97f239b2924d233","src/path.rs":"3cd4c92a626384f8f4db89b2f7594923b922d7b841681c167748a01abc7dc3f7","src/prelude.rs":"8dc6fa25bb01fbc1e012364949982e406b17ab22bde464e154f12286fba293cf","src/progress.rs":"a9ba8ec6cc21eea78121b02d1feaba8f6aab04be441bfe8be9f3dffe4c5e0ba5","src/reference/edits.rs":"df762921fa815470a23bd884e0b1677b5f4705d2b2aaef8f59c0ed759c1ce6cb","src/reference/errors.rs":"6c7e624031b8c09f2011ca30afa487c20487218e4ece6cf34892e8f693f22901","src/reference/iter.rs":"645ebf083877a73c05202e8b79489e19fad290e1e6e41b7d817e08307e2822c3","src/reference/log.rs":"95b3e85dde8ca06251c15756ad3b54eeb48804ac6718ec4634f367091bd42b80","src/reference/mod.rs":"e0cad649928296e68df1b89119a35814ac4c6887957f7cdf644113b59fd74645","src/reference/remote.rs":"a739c6e1c9b8fd61607fdcd3cb25a1d6c80bb81930e2258d1ba4f92d79bf3e66","src/remote/access.rs":"76e75baca0155710c2eea0e439df0774ecb0cd6c7e6b950876dd9e6e75be5e9f","src/remote/build.rs":"773a10e61826a4976b872ae2922f723c55174e0ed4c0b941ab8034bc33b314cc","src/remote/connect.rs":"af2e24be8d7849b9b6e465a5b316839007e32a4b5fb5f4e5d8beddd778f76bfe","src/remote/connection/access.rs":"eed8a3f17a964cf7e4aff8b4b1fae950c6cf83e1843e23e70a4bdb0acdd53ed7","src/remote/connection/fetch/config.rs":"93b1392fdc409dba073e96272f13ad7ab996522d59df819edc800431ee36975b","src/remote/connection/fetch/error.rs":"976dc4466b84235e3e089bf404b28700d4b1f877981b2506706fbf60ad0db326","src/remote/connection/fetch/mod.rs":"68233e0bf563d4fa8ea8edd5e4ef06491af96a1b5d7a51e74971dd3621fef738","src/remote/connection/fetch/negotiate.rs":"ff6b7e450bf8904ec65beee763d69a695e8244e97b340148e43af79334275b4c","src/remote/connection/fetch/receive_pack.rs":"de750ecb330553cb3ed4d84675d09949165b79debc9a6b91f12da857cb5decdd","src/remote/connection/fetch/update_refs/mod.rs":"a1e93355795ee0b4ca28946fc464dcd29af460b3f37b4376b7e31760050805af","src/remote/connection/fetch/update_refs/tests.rs":"f9c197bf7ba8528c888d486bdc9d43c42181e3087f15bb0416514a38a5ec8dbe","src/remote/connection/fetch/update_refs/update.rs":"069156a6fcebd0eab64d1f816eae6612bc5d0523f3dae05e69ece40a23c00a95","src/remote/connection/mod.rs":"863f4a7f2476f5b5d8622959d5069424decea29ba7f66619f679344e6fb5a5d1","src/remote/connection/ref_map.rs":"2721c1dfaa3e00582de03adc98216a90e5d5e67a142c673971b9a5a6dd92a0aa","src/remote/errors.rs":"148318b54894fddf1eee58bbb622861122fcd5d6b6a9470083779945f75c3257","src/remote/fetch.rs":"12843f5bc136d04685cae253defbedbb78ac5ae687e92b633d3c130baaa7f21b","src/remote/init.rs":"519adc4da7ca2739697bd4e48d0100458a146c8cb71069b8a6a721198199d3d9","src/remote/mod.rs":"14a1532470cc76cf3b727657439923f3515dd781ebfc7030d9481056c6bbf162","src/remote/name.rs":"9fa7e81a157375ecb40ddfba5da850fef7513296a68014a50f5148d57f40b8b7","src/remote/save.rs":"3c42980bd6632a1763bbd3b34d488f0c9eeec9ebcefae2e727d20bafd42508a5","src/remote/url/mod.rs":"a3279f5330fc83193e583f2b839ab08006c293b0040db6cc74969d50813fbbaa","src/remote/url/rewrite.rs":"4d43167909020458abc5e3e7310e3efaddb9fc7c783581fbc9422fa8b057d95d","src/remote/url/scheme_permission.rs":"4f6e528260c67af54171477d97707050f048c0c35e77f088f8ddc4ae135e6386","src/repository/attributes.rs":"2d727b5be3b13446415dc7fea5848c409c56b759e8a21eeeaca4649a6b4c8739","src/repository/cache.rs":"72d41c8f90d2e49c10b884582613fa5941ea0e1d15cc7d0a4d0d7be0b0243d4d","src/repository/config/mod.rs":"02d1a3d68c6a21b0fb7e199f69d7e7641645afa5710e9843a922a040d9422d27","src/repository/config/transport.rs":"cb163133228cb4d75c140b747fdc132b4512bd5b86b10f70bd8cd8f9a432859f","src/repository/excludes.rs":"408693ed4ac09d47354b3a9bf90c278252435eada4dfb0bb104f57395c2acca1","src/repository/identity.rs":"81d368f2b7d65800bf93d623f130ddb44a8d9e965cdd9757455733d31f92d483","src/repository/impls.rs":"7af7dd5ef7b7c1ff28e957175b4a2fea39574668d2768d20561ded5a48460a39","src/repository/init.rs":"96da087c036d751914f0a79ff1d942e53f668ff3fe74275edfa2baa1f400b3c2","src/repository/location.rs":"a5d30567442837259cf718e9f8f26633a17c997476669e15e5d3cd410b3b9971","src/repository/mod.rs":"8122e49e0c1c7820f10aae4b94298a56372a16f3e8b918267fa163cfc06b3023","src/repository/object.rs":"ae535bc6adc80043c5dcea243339445a91c957004ebfed8b9fc33f30a5a1ac7b","src/repository/permissions.rs":"9f7f41fd250d043cea7ee6ff0cdc315838dbb6226bde3dca2a7666f01d648090","src/repository/reference.rs":"c37e556966dd4308bc8b5784484612d9d62a438a443d1d667374ed604b238f5e","src/repository/remote.rs":"936f6a5e4b7d7a7bfe974c287e1f8fff4a2935d4020c6156bc469b74e84bd861","src/repository/revision.rs":"66126940c3a94776d94b901c14078d5b749723c3c0ed8500639edfe37aaa97da","src/repository/shallow.rs":"ce0b3358ed0ccca6ac52a985555793013f7c2d5de83291cd9810181ac22e714a","src/repository/snapshots.rs":"f99ca2e7d1bb3d1fff9d3df2d36b979c57197fcbbb633090edb0319d43873fa2","src/repository/state.rs":"040cca4a26463211aef85e4539d084969240f30d985c1bd3ae9bb3cd01009d1d","src/repository/thread_safe.rs":"ea2f5d07958d3fad08cba5028d18901a99088d3c1fc56934e3e01b0c4ea37c39","src/repository/worktree.rs":"48e44cb8cd798e6683a078fdc21bdfc62a52aa1c857a0dc17ee08ac411fc8914","src/revision/mod.rs":"a466315d4aea646ddba99c54f9ae118431b56dafbca6d0462ebabca3695d027d","src/revision/spec/mod.rs":"aa1516ed667a49bfa0db55fdea0bfbcc3227411be105496f0867bd7efb5d5dda","src/revision/spec/parse/delegate/mod.rs":"bfe787c5c881b5e4acf4bbcb79d966b8a92e56e8b2d20525bf0c0cd6ba0a0b8d","src/revision/spec/parse/delegate/navigate.rs":"b182bca82031b4ecfd4c36bcc48599a67a247b4e785591e85933eef50e428ff2","src/revision/spec/parse/delegate/revision.rs":"51ff36007b7376305cfcf8acbacc53ddb72796aceec8b761f4d1f1843554487c","src/revision/spec/parse/error.rs":"48c0c2e7dcffe80aac5563094787e0502c4275619fc35467a2687499bbad0fef","src/revision/spec/parse/mod.rs":"141e591acacfce8cc8d11c5b72d18c8d05baad1b21dead0d8e7242f4963410b7","src/revision/spec/parse/types.rs":"0713678daae38786c8828bf04a9608b75adf3751803e20711ed5d265998a3b8b","src/revision/walk.rs":"f96694a47f85b0e2dbf75871950dc6d8b2f02143e67981c473753d09d36399d4","src/shallow.rs":"4296fb5298ef71eb1d78aae21d11bfb129a4f5a5f3cf43bf6d5256fec40f8dc3","src/state.rs":"1e3c5e1df4016e8b3e60028def84b0f706c4fcffaba11b1152d9240e144f21e8","src/tag.rs":"f60043aaa7afb54652ab6cf64765ebd61607f19a83dd5960abf8077d2cb91d44","src/types.rs":"449feaa87a95a057c26b795b1d72911594eddf66248d1d984376599224b91b55","src/worktree/mod.rs":"7f09a39827ed42c66fc688752ed87ae2abc6605991bdf214e60c725766b044ea","src/worktree/proxy.rs":"07ff3cfc6a8f326fb7d62f6762f682498e9e5f131ece935acfd26b5223a338f1"},"package":"6bf41b61f7df395284f7a579c0fa1a7e012c5aede655174d4e91299ef1cac643"} \ No newline at end of file
+{"files":{"CHANGELOG.md":"2798efe9ba9ba30789fb2b006f6a88e43cf8dccf84ca51780b720387ff4fd716","Cargo.lock":"463fe594d84c3f623a3e23e40bc754765e9b3ba3df47af1fc8d237e518175fb3","Cargo.toml":"f67af22736fe7da071886f81faf421116d925593d70683e5bdb34cdfa52ba6e3","LICENSE-APACHE":"cb4780590812826851ba250f90bed0ed19506ec98f6865a0e2e20bbf62391ff9","LICENSE-MIT":"49df47913ab2beafe8dc45607877ae64198bf0eee64aaad3e82ed9e4d27424e8","src/assets/baseline-init/HEAD":"28d25bf82af4c0e2b72f50959b2beb859e3e60b9630a5e8c603dad4ddb2b6e80","src/assets/baseline-init/description":"85ab6c163d43a17ea9cf7788308bca1466f1b0a8d1cc92e26e9bf63da4062aee","src/assets/baseline-init/hooks/applypatch-msg.sample":"64b47216779d705b5270e94970aa0bc7b96fd256af0a624e936f6b1b85a014db","src/assets/baseline-init/hooks/commit-msg.sample":"1f74d5e9292979b573ebd59741d46cb93ff391acdd083d340b94370753d92437","src/assets/baseline-init/hooks/fsmonitor-watchman.sample":"f3c0228d8e827f1c5260ac59fdd92c3d425c46e54711ef713c5a54ae0a4db2b4","src/assets/baseline-init/hooks/post-update.sample":"81765af2daef323061dcbc5e61fc16481cb74b3bac9ad8a174b186523586f6c5","src/assets/baseline-init/hooks/pre-applypatch.sample":"e99aee3f6ff6a07f775cab64af1c6507d46d20afa4a5a87fd3402d22b1de2797","src/assets/baseline-init/hooks/pre-commit.sample":"f9af7d95eb1231ecf2eba9770fedfa8d4797a12b02d7240e98d568201251244a","src/assets/baseline-init/hooks/pre-merge-commit.sample":"d3825a70337940ebbd0a5c072984e13245920cdf8898bd225c8d27a6dfc9cb53","src/assets/baseline-init/hooks/pre-push.sample":"4b1119e1e13a212571976f4aee77847cdbd40978546d6273a557e238981a40d1","src/assets/baseline-init/hooks/pre-rebase.sample":"3ac3a30cffe859b71a27d77a7fc1635d35ff5d5aaecc896bba11bd01e1b307ce","src/assets/baseline-init/hooks/pre-receive.sample":"a4c3d2b9c7bb3fd8d1441c31bd4ee71a595d66b44fcf49ddb310252320169989","src/assets/baseline-init/hooks/prepare-commit-msg.sample":"e9ddcaa4189fddd25ed97fc8c789eca7b6ca16390b2392ae3276f0c8e1aa4619","src/assets/baseline-init/hooks/update.sample":"978235ae8b913ab4d0f906a8af621a0bfe7c314d84b715f4f64ee9b1aa3cce2d","src/assets/baseline-init/info/exclude":"6671fe83b7a07c8932ee89164d1f2793b2318058eb8b98dc5c06ee0a5a3b0ec1","src/attributes.rs":"af39ccaf9438b1b832808e7758610876cabda0c137d1e8cb6d1ecb7ef3121ce0","src/clone/access.rs":"285795cc8f32a66cfb7a98ad7458dad29415ef8331eff995ca0b87a63aa39410","src/clone/checkout.rs":"82ebd7de88815b5975e00f4740114f77ed78441c31eb42a74b6213eb5acf0798","src/clone/fetch/mod.rs":"fa55696e8e57abab3f8078da7a3ffe5a78006c120a0f78acc9d88dd32d4d856f","src/clone/fetch/util.rs":"6d97f3013f4e9d40f1a527e6a9cbd5b99873dc895e89d3e987c31e6331db9d29","src/clone/mod.rs":"2bfb9a6d352aefa0f4575ce318f9e65eb5879c0a6ca1e92d19f073087bc4d89f","src/commit.rs":"26b1d03ecefa10113713b1f1d2b4c700c187692db29d28d07d7a64e0abd92961","src/config/cache/access.rs":"72253ec261e949e81ed020fc0cf7fb4323738a492db8aafa1918855fa68b8a5e","src/config/cache/incubate.rs":"babac6fef1f7ecec4bc5549a29db82857621de8e81e209ea0efd342783d3d88d","src/config/cache/init.rs":"e993fb7f764432fd0dc6cd4d763abceb13109897d7c512bbdefa1c46dc925e2a","src/config/cache/mod.rs":"3cce2cf0fafbc4f828870b85fef411a826ad6d1fe3ac5b6cbd2f5e049331aebf","src/config/cache/util.rs":"672dd1dcc9a5b66187f99a469005bd2d9df5e0467793dfe9360d9e7b024f2ebe","src/config/mod.rs":"b723aa6946443b50799598ddf3e5b1b63b9bede315591e6671a56397f21ae34c","src/config/overrides.rs":"f7efe80641d6ef181139881ef9a066133d0ebd31570a029649ec685c0916fd6a","src/config/snapshot/_impls.rs":"edae9b731c69828effbdfe01d32b7caa8c536df81d33de1cb67b88ece01a7218","src/config/snapshot/access.rs":"fc9b5df53f74627cb0d4f0bbcdb933ae9086394678929623dccb23f957fcfe91","src/config/snapshot/credential_helpers.rs":"28a821ed2921d433c9c5ae40baed7762514ed3e187aa8c7a4ea1c8997da9d275","src/config/snapshot/mod.rs":"5377723de24b00ccb58e15df119831d7c0d9f2695f4499621db37546a5fccaff","src/config/tree/keys.rs":"3dfbd42ecb2c278dbcf08d0f2f30d5e5c1430fda08508628e1e83ed5c1812224","src/config/tree/mod.rs":"8a2b308e1001f92d0751d137cfe1c276a1b9758be199a3754ba8c863cdf3f321","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":"83ee8ed46b2ba6a6a2d4cbde071013f071167253fb39b6b0beb52c542ae78c4d","src/config/tree/sections/credential.rs":"e1ce72dc24b9d2f06827b9fc6e8c963f888844ab5a4b48f6d867ad8542909b94","src/config/tree/sections/diff.rs":"b2bdfba61b34bc08c81d84b6b9e7ba009f8e0277f71e79393020d26c4112cde6","src/config/tree/sections/extensions.rs":"f73c444f2e2c8fbc8d1b1991c0d63532c792362e42833f3ae06059c07387cf66","src/config/tree/sections/fetch.rs":"3f5e49203f2ace0f9d7febc41d61212779afc008717a1fc46c4e1fc1ce7655ac","src/config/tree/sections/gitoxide.rs":"3bc1cc8f907c74a65f5cda6053d9bf466ef09d244d8af607f843da6d5d65cde7","src/config/tree/sections/http.rs":"58c9a9b8abcee4066eb4e20f9679dbbf888c04c21f4dbfff0d2ad7f0a18d4fcd","src/config/tree/sections/index.rs":"01e6abb77443f65aa413059256c6b412dd4f258f3fcc68da1710bc42990326a8","src/config/tree/sections/init.rs":"e87e33ac5091797bde302f78c8fb7cefce0fb1752610409c1db53c3f7b4179af","src/config/tree/sections/mod.rs":"6706dee32dd931300273835ab01de664bba355cf1fcb750b2454188878915591","src/config/tree/sections/pack.rs":"0a6dcdc7603b0d7a84159a70789b63b6c26d539f98808c520a8e644fc9dbd2f3","src/config/tree/sections/protocol.rs":"6b9eed6bd37c4c1e9eae1449563ca430f65f81226cd675282810bf7873bd0e05","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":"0cba6d6381cd75482d28b3be5e008513197eb3d8565f540330f2458dd3ade472","src/diff.rs":"52bc752a2a8decff56b7a41d1ae97b90c0f3422332f999ced67fc884d6b25d18","src/discover.rs":"d1ff7f43fb4c2b5303fc6c045bb65f68bb394a5c20e2bf36d8378c7a053ce785","src/env.rs":"1446448d4bf1ba89eefd13a3b4080874456669e889efc1e8df48b866e659d029","src/ext/mod.rs":"3c96daa11ca8321dedc9b968176e31f6e3626e4cd60f308ad46e2ec7fe586bde","src/ext/object_id.rs":"a70afd79c84731df0023d738332b3688a2adbcbdda802f8ee70297fc8fe0ca38","src/ext/reference.rs":"a51fe4f63e5708afa4fbabd13638b88c34845a64263db77308cd1b974a0f325f","src/ext/rev_spec.rs":"c196f21a3981b7ad84e9385ba3924a554accf9c7a3b4f8e2bba13cb74f108ec8","src/ext/tree.rs":"c4446627523e22c032c0e322e5daa35b3105bf68f6eaa45da84c590edb76420e","src/head/log.rs":"0de9d5f834b633756001bdd246e98266084d521d7f775537e6e6ead5ed93d7e4","src/head/mod.rs":"443c8f5129d2e92d893f53d4d6babc1ae1a79c88c1474738d35f2cc8aac98465","src/head/peel.rs":"4d92eb96c94abfcc653fbd00fcb0800985105d9b7804f5dbe81756da3b8b8bae","src/id.rs":"3e238cc4a58aed58d0cf6486e250cb0f361493d03aa3f6fd08a1c1ad82bd3819","src/init.rs":"84d97d8ca3f61cb87dfc99be1ee56ee53c6bdac75a741bd5c7bf995f7d5cb137","src/interrupt.rs":"f6aaa74d277900528f5628e483bddc9c821199ea06db39630e3f55ef93dc31e9","src/lib.rs":"9cb64f7b920911fca411db726496e573596a34f563a8a8ca55b8e2fb35ef9cc8","src/mailmap.rs":"415301bdcb3d6991675c7ea86a92eea152cf65df7b2d14da4b58b3b605039e4e","src/object/blob.rs":"ae504ea412a4b0df0bb1d4e61655ed1d9f5654e1e586eedcf0d72fa1d20f7866","src/object/commit.rs":"d969468a537f8c509b708e9d2403da33ca1ac1442543589e683d080cefe66237","src/object/errors.rs":"f1b322fbff0e400dfb153e67e7f6de1839ec488b53e552ac968545131a79ac74","src/object/impls.rs":"6b9f76d332da496148adaa9b5b5de5dcf98c3fd92deba245dd2e6c2a3895eb77","src/object/mod.rs":"158263fe6f6a8db6ecebc741dac012a517508d5041e70909228e1c0ae9cee1c7","src/object/peel.rs":"c23ac9baac1216d9320c71926f56548d18f7f3964bdbcccd8ca81f6b756f7ad9","src/object/tag.rs":"b40e2b908de9dd500d297f1bcbd969facfe7beadcf62cc6a7cb975169f2da8be","src/object/tree/diff/change.rs":"95df7e1fb3b58fa2a0086f205c39940fb590ccdac92aee53a6cff5f29181f30c","src/object/tree/diff/for_each.rs":"05f11ffc85e3efdcb0c8c8a039a69d20f3a94715228d133e21816af6aa2f2a61","src/object/tree/diff/mod.rs":"980ec8425e9783a445d06d1a81b7a7f0cd05798a84a9ce2c7d7506e9c5912259","src/object/tree/diff/rewrites.rs":"52873aa41d64bbdcbc1079cf5ab4f853951006a35eb24fa9f03f66d266e380e1","src/object/tree/diff/tracked.rs":"4b8226a3722b08e41b00c800efc81ee611f801cf42606203c26d568f2d6d16fa","src/object/tree/iter.rs":"4e54d72fce5a5bc9299ea36147dd2d95d3d25d34d97dd5d663e7ce0eb87b1f13","src/object/tree/mod.rs":"9d09e9fa8ad9a41b969b8f682447a5ad889a5ff713b53492e05302007ae2b252","src/object/tree/traverse.rs":"ae0342857d42b6afb82167423dfdac9611ce1b7281b6b9b542e230960c564c0f","src/open/mod.rs":"d25c11246536e7d57172b375569bd8545b8060f13bbfbc49cbf0f85636627076","src/open/options.rs":"697287cb2715d4a27353dbf7745ff381edd19f062ddd73e14b54f5e11c36d022","src/open/permissions.rs":"5a55970e738ba7a9af7b51cdeb03955af533b3306baaef278b398cf99f8a312b","src/open/repository.rs":"130a3a676c2353822b53e52034b4f0b48a818317e9761087e97f89d5c8e5effd","src/path.rs":"3cd4c92a626384f8f4db89b2f7594923b922d7b841681c167748a01abc7dc3f7","src/prelude.rs":"8dc6fa25bb01fbc1e012364949982e406b17ab22bde464e154f12286fba293cf","src/progress.rs":"a9ba8ec6cc21eea78121b02d1feaba8f6aab04be441bfe8be9f3dffe4c5e0ba5","src/reference/edits.rs":"324520036d184dbc9db44b723fe52c8038a8b2bdd2c3d76d5c05f16a248b9ee0","src/reference/errors.rs":"f0699048b34163a8e9fb19306827f16dd0d8376660787646ee75e73c70fe7497","src/reference/iter.rs":"645ebf083877a73c05202e8b79489e19fad290e1e6e41b7d817e08307e2822c3","src/reference/log.rs":"95b3e85dde8ca06251c15756ad3b54eeb48804ac6718ec4634f367091bd42b80","src/reference/mod.rs":"e0cad649928296e68df1b89119a35814ac4c6887957f7cdf644113b59fd74645","src/reference/remote.rs":"4467c1bf9d463d1781a3254a3874c7fc763201e33d51e1a92a6f0dcbc6776135","src/remote/access.rs":"76e75baca0155710c2eea0e439df0774ecb0cd6c7e6b950876dd9e6e75be5e9f","src/remote/build.rs":"773a10e61826a4976b872ae2922f723c55174e0ed4c0b941ab8034bc33b314cc","src/remote/connect.rs":"a25e99e3556c0c7f4a6ce2101179190468163bfe743e4896e240303528819c95","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":"708d6985903e70f51c611ecc6489b41de3291933689665e5b3638698d6c8a4e8","src/remote/connection/fetch/negotiate.rs":"8dcb137d8642e7cdd4eb77995f863ae97dae97d28aa985a9ba1b35ceda184714","src/remote/connection/fetch/receive_pack.rs":"5d2f810d04c87c5b5233cb0aadb902dfd68b3a82da4ba10304360561d3642095","src/remote/connection/fetch/update_refs/mod.rs":"a1e93355795ee0b4ca28946fc464dcd29af460b3f37b4376b7e31760050805af","src/remote/connection/fetch/update_refs/tests.rs":"65a45137898327627bd16ebc7352db8c255813ffe4dac683c6894495eaeee0af","src/remote/connection/fetch/update_refs/update.rs":"069156a6fcebd0eab64d1f816eae6612bc5d0523f3dae05e69ece40a23c00a95","src/remote/connection/mod.rs":"863f4a7f2476f5b5d8622959d5069424decea29ba7f66619f679344e6fb5a5d1","src/remote/connection/ref_map.rs":"4179bcab5f65ad6a5e900e7038153cb4e2eaae1d4947f46d8cb71dc910a03cf3","src/remote/errors.rs":"148318b54894fddf1eee58bbb622861122fcd5d6b6a9470083779945f75c3257","src/remote/fetch.rs":"b44f5214b154645a4aaacb1538032e8b2814f08a1e874139fdb6ff364fa1b031","src/remote/init.rs":"519adc4da7ca2739697bd4e48d0100458a146c8cb71069b8a6a721198199d3d9","src/remote/mod.rs":"14a1532470cc76cf3b727657439923f3515dd781ebfc7030d9481056c6bbf162","src/remote/name.rs":"9fa7e81a157375ecb40ddfba5da850fef7513296a68014a50f5148d57f40b8b7","src/remote/save.rs":"3c42980bd6632a1763bbd3b34d488f0c9eeec9ebcefae2e727d20bafd42508a5","src/remote/url/mod.rs":"a3279f5330fc83193e583f2b839ab08006c293b0040db6cc74969d50813fbbaa","src/remote/url/rewrite.rs":"4d43167909020458abc5e3e7310e3efaddb9fc7c783581fbc9422fa8b057d95d","src/remote/url/scheme_permission.rs":"4f6e528260c67af54171477d97707050f048c0c35e77f088f8ddc4ae135e6386","src/repository/attributes.rs":"2d727b5be3b13446415dc7fea5848c409c56b759e8a21eeeaca4649a6b4c8739","src/repository/cache.rs":"72d41c8f90d2e49c10b884582613fa5941ea0e1d15cc7d0a4d0d7be0b0243d4d","src/repository/config/mod.rs":"a38da6ac7e3815ade1d1d1acfb571b459651dd675491a1d21deae99317a9c73e","src/repository/config/transport.rs":"cb163133228cb4d75c140b747fdc132b4512bd5b86b10f70bd8cd8f9a432859f","src/repository/excludes.rs":"408693ed4ac09d47354b3a9bf90c278252435eada4dfb0bb104f57395c2acca1","src/repository/graph.rs":"ab61194c67a2fdac702475bfa46feb3e6c6e69a870c7b871749bcf0d1094ebcb","src/repository/identity.rs":"81d368f2b7d65800bf93d623f130ddb44a8d9e965cdd9757455733d31f92d483","src/repository/impls.rs":"7af7dd5ef7b7c1ff28e957175b4a2fea39574668d2768d20561ded5a48460a39","src/repository/init.rs":"b6c9280a38296669cd79acbee23800c798ea40f7cf6523e3b8338aeb131364e3","src/repository/kind.rs":"a32375689f9de7c74d29079caa2f025db8a4b13a3dc31a587039548343b23ade","src/repository/location.rs":"23acc9c1128528039eb6d67a241b328a0cd843b9050442465dd20ea069bb0eea","src/repository/mod.rs":"2319d6b10311c302dc1c9964b566ce1f8a8a72ebe42209acba3f4a3aa8e920f1","src/repository/object.rs":"ee64408564227c373cfc08fe1bf90e775abc5d5df38affbb91c060c211d66165","src/repository/permissions.rs":"9f7f41fd250d043cea7ee6ff0cdc315838dbb6226bde3dca2a7666f01d648090","src/repository/reference.rs":"c37e556966dd4308bc8b5784484612d9d62a438a443d1d667374ed604b238f5e","src/repository/remote.rs":"8740998547516f89eaa9268b7ba48ee89f73de411194d558502fee18139f9680","src/repository/revision.rs":"66126940c3a94776d94b901c14078d5b749723c3c0ed8500639edfe37aaa97da","src/repository/shallow.rs":"ce0b3358ed0ccca6ac52a985555793013f7c2d5de83291cd9810181ac22e714a","src/repository/snapshots.rs":"3a8f439bdf9e6d71873fe114c12565adf98be0ba478586cc6ccbbf515f281e24","src/repository/state.rs":"040cca4a26463211aef85e4539d084969240f30d985c1bd3ae9bb3cd01009d1d","src/repository/thread_safe.rs":"40e455ea3b5637da6e2acae4f5d13c4b8e8a25b8944a4c2870243e31f7f13632","src/repository/worktree.rs":"cc95d78cd4cb8277a906d01ce207216ee705c7c8d65aa264ad8a0d9a1829307d","src/revision/mod.rs":"a466315d4aea646ddba99c54f9ae118431b56dafbca6d0462ebabca3695d027d","src/revision/spec/mod.rs":"aa1516ed667a49bfa0db55fdea0bfbcc3227411be105496f0867bd7efb5d5dda","src/revision/spec/parse/delegate/mod.rs":"bfe787c5c881b5e4acf4bbcb79d966b8a92e56e8b2d20525bf0c0cd6ba0a0b8d","src/revision/spec/parse/delegate/navigate.rs":"bd3c8550ec76e52225db9ba16390f045ec977b6196f76b99bd67beb5c193c70d","src/revision/spec/parse/delegate/revision.rs":"51ff36007b7376305cfcf8acbacc53ddb72796aceec8b761f4d1f1843554487c","src/revision/spec/parse/error.rs":"48c0c2e7dcffe80aac5563094787e0502c4275619fc35467a2687499bbad0fef","src/revision/spec/parse/mod.rs":"141e591acacfce8cc8d11c5b72d18c8d05baad1b21dead0d8e7242f4963410b7","src/revision/spec/parse/types.rs":"0713678daae38786c8828bf04a9608b75adf3751803e20711ed5d265998a3b8b","src/revision/walk.rs":"f96694a47f85b0e2dbf75871950dc6d8b2f02143e67981c473753d09d36399d4","src/shallow.rs":"4296fb5298ef71eb1d78aae21d11bfb129a4f5a5f3cf43bf6d5256fec40f8dc3","src/state.rs":"1e3c5e1df4016e8b3e60028def84b0f706c4fcffaba11b1152d9240e144f21e8","src/tag.rs":"f60043aaa7afb54652ab6cf64765ebd61607f19a83dd5960abf8077d2cb91d44","src/types.rs":"d80b2a66393b5ebe7155a61ad7ae7c8b7be0a16759001ada12349b642103a8c0","src/worktree/mod.rs":"7f09a39827ed42c66fc688752ed87ae2abc6605991bdf214e60c725766b044ea","src/worktree/proxy.rs":"07ff3cfc6a8f326fb7d62f6762f682498e9e5f131ece935acfd26b5223a338f1"},"package":"bf2a03ec66ee24d1b2bae3ab718f8d14f141613810cb7ff6756f7db667f1cd82"} \ No newline at end of file
diff --git a/vendor/gix/CHANGELOG.md b/vendor/gix/CHANGELOG.md
index 85093b55b..f7d7d7fd2 100644
--- a/vendor/gix/CHANGELOG.md
+++ b/vendor/gix/CHANGELOG.md
@@ -5,6 +5,126 @@ 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.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/>
+
+ - 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**
+ - 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.
@@ -13,7 +133,7 @@ A maintenance release without user-facing changes. It's meant to fix breakage th
<csr-read-only-do-not-edit/>
- - 2 commits contributed to the release.
+ - 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
@@ -24,6 +144,7 @@ A maintenance release without user-facing changes. It's meant to fix breakage th
<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>
diff --git a/vendor/gix/Cargo.lock b/vendor/gix/Cargo.lock
index ff332a329..ff624f434 100644
--- a/vendor/gix/Cargo.lock
+++ b/vendor/gix/Cargo.lock
@@ -690,13 +690,14 @@ dependencies = [
[[package]]
name = "gix"
-version = "0.44.1"
+version = "0.45.1"
dependencies = [
"anyhow",
"async-std",
"document-features",
"gix-actor",
"gix-attributes",
+ "gix-commitgraph",
"gix-config",
"gix-credentials",
"gix-date",
@@ -711,6 +712,7 @@ dependencies = [
"gix-index",
"gix-lock",
"gix-mailmap",
+ "gix-negotiate",
"gix-object",
"gix-odb",
"gix-pack",
@@ -745,9 +747,9 @@ dependencies = [
[[package]]
name = "gix-actor"
-version = "0.20.0"
+version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "848efa0f1210cea8638f95691c82a46f98a74b9e3524f01d4955ebc25a8f84f3"
+checksum = "9fe73f9f6be1afbf1bd5be919a9636fa560e2f14d42262a934423ed6760cd838"
dependencies = [
"bstr",
"btoi",
@@ -760,9 +762,9 @@ dependencies = [
[[package]]
name = "gix-attributes"
-version = "0.12.0"
+version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3015baa01ad2122fbcaab7863c857a603eb7b7ec12ac8141207c42c6439805e2"
+checksum = "644d4e1182dd21af10f455265eb15cb10ca3ae9c63475d7247e538e62ebacc56"
dependencies = [
"bstr",
"gix-glob",
@@ -778,36 +780,51 @@ dependencies = [
[[package]]
name = "gix-bitmap"
-version = "0.2.3"
+version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "55a95f4942360766c3880bdb2b4b57f1ef73b190fc424755e7fdf480430af618"
+checksum = "fc02feb20ad313d52a450852f2005c2205d24f851e74d82b7807cbe12c371667"
dependencies = [
"thiserror",
]
[[package]]
name = "gix-chunk"
-version = "0.4.1"
+version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0d39583cab06464b8bf73b3f1707458270f0e7383cb24c3c9c1a16e6f792978"
+checksum = "a7acf3bc6c4b91e8fb260086daf5e105ea3a6d913f5fd3318137f7e309d6e540"
dependencies = [
"thiserror",
]
[[package]]
name = "gix-command"
-version = "0.2.4"
+version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2c6f75c1e0f924de39e750880a6e21307194bb1ab773efe3c7d2d787277f8ab"
+checksum = "5f6141b70cfb21255223e42f3379855037cbbe8673b58dd8318d2f09b516fad1"
dependencies = [
"bstr",
]
[[package]]
+name = "gix-commitgraph"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8490ae1b3d55c47e6a71d247c082304a2f79f8d0332c1a2f5693d42a2021a09"
+dependencies = [
+ "bstr",
+ "gix-chunk",
+ "gix-features",
+ "gix-hash",
+ "memmap2",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
name = "gix-config"
-version = "0.22.0"
+version = "0.23.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d252a0eddb6df74600d3d8872dc9fe98835a7da43110411d705b682f49d4ac1"
+checksum = "51f310120ae1ba8f0ca52fb22876ce9bad5b15c8ffb3eb7302e4b64a3b9f681c"
dependencies = [
"bstr",
"gix-config-value",
@@ -827,9 +844,9 @@ dependencies = [
[[package]]
name = "gix-config-value"
-version = "0.12.0"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "786861e84a5793ad5f863d846de5eb064cd23b87e61ad708c8c402608202e7be"
+checksum = "6f216df1c33e6e1555923eff0096858a879e8aaadd35b5d788641e4e8064c892"
dependencies = [
"bitflags 2.1.0",
"bstr",
@@ -840,9 +857,9 @@ dependencies = [
[[package]]
name = "gix-credentials"
-version = "0.14.0"
+version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4874a4fc11ffa844a3c2b87a66957bda30a73b577ef1acf15ac34df5745de5ff"
+checksum = "c6f89fea8acd28f5ef8fa5042146f1637afd4d834bc8f13439d8fd1e5aca0d65"
dependencies = [
"bstr",
"gix-command",
@@ -857,9 +874,9 @@ dependencies = [
[[package]]
name = "gix-date"
-version = "0.5.0"
+version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "99056f37270715f5c7584fd8b46899a2296af9cae92463bf58b8bd1f5a78e553"
+checksum = "bc164145670e9130a60a21670d9b6f0f4f8de04e5dd256c51fa5a0340c625902"
dependencies = [
"bstr",
"itoa",
@@ -870,9 +887,9 @@ dependencies = [
[[package]]
name = "gix-diff"
-version = "0.29.0"
+version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "644a0f2768bc42d7a69289ada80c9e15c589caefc6a315d2307202df83ed1186"
+checksum = "bed89e910e19b48d31132b2b5392cef60786dd081cca5d0e31de32064f7300eb"
dependencies = [
"gix-hash",
"gix-object",
@@ -882,9 +899,9 @@ dependencies = [
[[package]]
name = "gix-discover"
-version = "0.18.0"
+version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5012710ebdecf6193c6866d6409a3b702a4aa0d78c605bc343590b44ab9962a1"
+checksum = "aba9c6c0d1f2b2efe65581de73de4305004612d49c83773e783202a7ef204f46"
dependencies = [
"bstr",
"dunce",
@@ -897,9 +914,9 @@ dependencies = [
[[package]]
name = "gix-features"
-version = "0.29.0"
+version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf69b0f5c701cc3ae22d3204b671907668f6437ca88862d355eaf9bc47a4f897"
+checksum = "3a8c493409bf6060d408eec9bbdd1b12ea351266b50012e2a522f75dfc7b8314"
dependencies = [
"bytes",
"bytesize",
@@ -920,18 +937,18 @@ dependencies = [
[[package]]
name = "gix-fs"
-version = "0.1.1"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b37a1832f691fdc09910bd267f9a2e413737c1f9ec68c6e31f9e802616278a9"
+checksum = "30da8997008adb87f94e15beb7ee229f8a48e97af585a584bfee4a5a1880aab5"
dependencies = [
"gix-features",
]
[[package]]
name = "gix-glob"
-version = "0.7.0"
+version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c07c98204529ac3f24b34754540a852593d2a4c7349008df389240266627a72a"
+checksum = "cd0ade1e80ab1f079703d1824e1daf73009096386aa7fd2f0477f6e4ac0a558e"
dependencies = [
"bitflags 2.1.0",
"bstr",
@@ -942,9 +959,9 @@ dependencies = [
[[package]]
name = "gix-hash"
-version = "0.11.1"
+version = "0.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "078eec3ac2808cc03f0bddd2704cb661da5c5dc33b41a9d7947b141d499c7c42"
+checksum = "ee181c85d3955f54c4426e6bfaeeada4428692e1a39b8788c2ac7785fc301dd8"
dependencies = [
"hex",
"serde",
@@ -953,9 +970,9 @@ dependencies = [
[[package]]
name = "gix-hashtable"
-version = "0.2.0"
+version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "afebb85691c6a085b114e01a27f4a61364519298c5826cb87a45c304802299bc"
+checksum = "bd259bd0d96e6153e357a8cdaca76c48e103fd34208b6c0ce77b1ad995834bd2"
dependencies = [
"gix-hash",
"hashbrown 0.13.2",
@@ -964,9 +981,9 @@ dependencies = [
[[package]]
name = "gix-ignore"
-version = "0.2.0"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba205b6df563e2906768bb22834c82eb46c5fdfcd86ba2c347270bc8309a05b2"
+checksum = "fc6f7f101a0ccce808dbf7008ba131dede94e20257e7bde7a44cbb2f8c775625"
dependencies = [
"bstr",
"gix-glob",
@@ -977,9 +994,9 @@ dependencies = [
[[package]]
name = "gix-index"
-version = "0.16.0"
+version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa282756760f79c401d4f4f42588fbb4aa27bbb4b0830f3b4d3480c21a4ac5a7"
+checksum = "616ba958fabfb11263fa042c35690d48a6c7be4e9277e2c7e24ff263b3fe7b82"
dependencies = [
"bitflags 2.1.0",
"bstr",
@@ -1000,9 +1017,9 @@ dependencies = [
[[package]]
name = "gix-lock"
-version = "5.0.1"
+version = "6.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c693d7f05730fa74a7c467150adc7cea393518410c65f0672f80226b8111555"
+checksum = "3ec5d5e6f07316d3553aa7425e3ecd935ec29882556021fe1696297a448af8d2"
dependencies = [
"gix-tempfile",
"gix-utils",
@@ -1011,9 +1028,9 @@ dependencies = [
[[package]]
name = "gix-mailmap"
-version = "0.12.0"
+version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e8856cec3bdc3610c06970d28b6cb20a0c6621621cf9a8ec48cbd23f2630f362"
+checksum = "4653701922c920e009f1bc4309feaff14882ade017770788f9a150928da3fa6a"
dependencies = [
"bstr",
"gix-actor",
@@ -1022,10 +1039,25 @@ dependencies = [
]
[[package]]
+name = "gix-negotiate"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82297847a7ad2d920707da5fc9ca8bb5eadf2891948dbe65625db1ffaa9803f9"
+dependencies = [
+ "bitflags 2.1.0",
+ "gix-commitgraph",
+ "gix-hash",
+ "gix-object",
+ "gix-revision",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
name = "gix-object"
-version = "0.29.1"
+version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c9bb30ce0818d37096daa29efe361a4bc6dd0b51a5726598898be7e9a40a01e1"
+checksum = "8926c8f51c44dec3e709cb5dbc93deb9e8d4064c43c9efc54c158dcdfe8446c7"
dependencies = [
"bstr",
"btoi",
@@ -1043,9 +1075,9 @@ dependencies = [
[[package]]
name = "gix-odb"
-version = "0.45.0"
+version = "0.46.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bca2f324aa67672b6d0f2c0fa93f96eb6a7029d260e4c1df5dce3c015f5e5add"
+checksum = "4b234d806278eeac2f907c8b5a105c4ba537230c1a9d9236d822bf0db291f8f3"
dependencies = [
"arc-swap",
"gix-features",
@@ -1062,9 +1094,9 @@ dependencies = [
[[package]]
name = "gix-pack"
-version = "0.35.0"
+version = "0.36.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "164a515900a83257ae4aa80e741655bee7a2e39113fb535d7a5ac623b445ff20"
+checksum = "7d2a14cb3156037eedb17d6cb7209b7180522b8949b21fd0fe3184c0a1d0af88"
dependencies = [
"clru",
"gix-chunk",
@@ -1086,9 +1118,9 @@ dependencies = [
[[package]]
name = "gix-packetline"
-version = "0.16.0"
+version = "0.16.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "51f53abaf1171d2fe99f80ac8ed6645904a1bfd706674749ac112bdd2d4f0777"
+checksum = "74414f89a6b72fa1a530ce8e646faf1a05499c3f4a5c15441d17ae8c978578eb"
dependencies = [
"bstr",
"futures-io",
@@ -1100,9 +1132,9 @@ dependencies = [
[[package]]
name = "gix-path"
-version = "0.8.0"
+version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fc78f47095a0c15aea0e66103838f0748f4494bf7a9555dfe0f00425400396c"
+checksum = "c1226f2e50adeb4d76c754c1856c06f13a24cad1624801653fbf09b869e5b808"
dependencies = [
"bstr",
"home",
@@ -1112,9 +1144,9 @@ dependencies = [
[[package]]
name = "gix-prompt"
-version = "0.5.0"
+version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "330d11fdf88fff3366c2491efde2f3e454958efe7d5ddf60272e8fb1d944bb01"
+checksum = "e15fe57fa48572b7d3bf465d6a2a0351cd3c55cba74fd5f0b9c23689f9c1a31e"
dependencies = [
"gix-command",
"gix-config-value",
@@ -1125,9 +1157,9 @@ dependencies = [
[[package]]
name = "gix-protocol"
-version = "0.32.0"
+version = "0.33.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "877e49417f1730f4dbc2f7d9a2ab0f8b2f49ef08f97270691403ecde3d961e3a"
+checksum = "182667706e9a7e87315a32833a1c84048bbd2f540758dabdd5a5b5742a7820f3"
dependencies = [
"async-trait",
"bstr",
@@ -1146,9 +1178,9 @@ dependencies = [
[[package]]
name = "gix-quote"
-version = "0.4.3"
+version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a282f5a8d9ee0b09ec47390ac727350c48f2f5c76d803cd8da6b3e7ad56e0bcb"
+checksum = "29d59489bff95b06dcdabe763b7266d3dc0a628cac1ac1caf65a7ca0a43eeae0"
dependencies = [
"bstr",
"btoi",
@@ -1157,9 +1189,9 @@ dependencies = [
[[package]]
name = "gix-ref"
-version = "0.29.0"
+version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b8212ecfe41815a2f1b059d82171d6276758cfac5506a5e0f04ad45ef0b1924a"
+checksum = "ebdd999256f4ce8a5eefa89999879c159c263f3493a951d62aa5ce42c0397e1c"
dependencies = [
"gix-actor",
"gix-features",
@@ -1178,9 +1210,9 @@ dependencies = [
[[package]]
name = "gix-refspec"
-version = "0.10.1"
+version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a6ea733820df67e4cd7797deb12727905824d8f5b7c59d943c456d314475892"
+checksum = "72bfd622abc86dd8ad1ec51b9eb77b4f1a766b94e3a1b87cf4a022c5b5570cf4"
dependencies = [
"bstr",
"gix-hash",
@@ -1192,24 +1224,26 @@ dependencies = [
[[package]]
name = "gix-revision"
-version = "0.13.0"
+version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "810f35e9afeccca999d5d348b239f9c162353127d2e13ff3240e31b919e35476"
+checksum = "9abc4f68f85f42029ade0bece087aef7071016335772f0c7cb7d425aaaed3b33"
dependencies = [
"bstr",
+ "gix-commitgraph",
"gix-date",
"gix-hash",
"gix-hashtable",
"gix-object",
"serde",
+ "smallvec",
"thiserror",
]
[[package]]
name = "gix-sec"
-version = "0.8.0"
+version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "794520043d5a024dfeac335c6e520cb616f6963e30dab995892382e998c12897"
+checksum = "b2b7b38b766eb95dcc5350a9c450030b69892c0902fa35f4a6d0809273bd9dae"
dependencies = [
"bitflags 2.1.0",
"gix-path",
@@ -1220,9 +1254,9 @@ dependencies = [
[[package]]
name = "gix-tempfile"
-version = "5.0.3"
+version = "6.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d71a0d32f34e71e86586124225caefd78dabc605d0486de580d717653addf182"
+checksum = "b3785cb010e9dc5c446dfbf02bc1119fc17d3a48a27c029efcb3a3c32953eb10"
dependencies = [
"dashmap",
"gix-fs",
@@ -1236,9 +1270,9 @@ dependencies = [
[[package]]
name = "gix-transport"
-version = "0.31.0"
+version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f01c2bf7b989c679695ef635fc7d9e80072e08101be4b53193c8e8b649900102"
+checksum = "64a39ffed9a9078ed700605e064b15d7c6ae50aa65e7faa36ca6919e8081df15"
dependencies = [
"async-std",
"async-trait",
@@ -1262,9 +1296,9 @@ dependencies = [
[[package]]
name = "gix-traverse"
-version = "0.25.0"
+version = "0.26.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5be1e807f288c33bb005075111886cceb43ed8a167b3182a0f62c186e2a0dd1"
+checksum = "b0842e984cb4bf26339dc559f3a1b8bf8cdb83547799b2b096822a59f87f33d9"
dependencies = [
"gix-hash",
"gix-hashtable",
@@ -1274,9 +1308,9 @@ dependencies = [
[[package]]
name = "gix-url"
-version = "0.18.0"
+version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dfc77f89054297cc81491e31f1bab4027e554b5ef742a44bd7035db9a0f78b76"
+checksum = "f1663df25ac42047a2547618d2a6979a26f478073f6306997429235d2cd4c863"
dependencies = [
"bstr",
"gix-features",
@@ -1289,18 +1323,18 @@ dependencies = [
[[package]]
name = "gix-utils"
-version = "0.1.1"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c10b69beac219acb8df673187a1f07dde2d74092f974fb3f9eb385aeb667c909"
+checksum = "dbcfcb150c7ef553d76988467d223254045bdcad0dc6724890f32fbe96415da5"
dependencies = [
"fastrand",
]
[[package]]
name = "gix-validate"
-version = "0.7.4"
+version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7bd629d3680773e1785e585d76fd4295b740b559cad9141517300d99a0c8c049"
+checksum = "57ea5845b506c7728b9d89f4227cc369a5fc5a1d5b26c3add0f0d323413a3a60"
dependencies = [
"bstr",
"thiserror",
@@ -1308,9 +1342,9 @@ dependencies = [
[[package]]
name = "gix-worktree"
-version = "0.17.0"
+version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10bf56a1f5037d84293ea6cece61d9f27c4866b1e13c1c95f37cf56b7da7af25"
+checksum = "d388ad962e8854402734a7387af8790f6bdbc8d05349052dab16ca4a0def50f6"
dependencies = [
"bstr",
"filetime",
@@ -2000,9 +2034,9 @@ dependencies = [
[[package]]
name = "prodash"
-version = "23.1.2"
+version = "25.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9516b775656bc3e8985e19cd4b8c0c0de045095074e453d2c0a513b5f978392d"
+checksum = "3236ce1618b6da4c7b618e0143c4d5b5dc190f75f81c49f248221382f7e9e9ae"
dependencies = [
"bytesize",
"human_format",
diff --git a/vendor/gix/Cargo.toml b/vendor/gix/Cargo.toml
index 599798829..101a6b8cb 100644
--- a/vendor/gix/Cargo.toml
+++ b/vendor/gix/Cargo.toml
@@ -13,10 +13,11 @@
edition = "2021"
rust-version = "1.64"
name = "gix"
-version = "0.44.1"
+version = "0.45.1"
authors = ["Sebastian Thiel <sebastian.thiel@icloud.com>"]
include = [
"src/**/*",
+ "LICENSE-*",
"CHANGELOG.md",
]
description = "Interact with git repositories just like git would"
@@ -45,13 +46,13 @@ path = "examples/clone.rs"
required-features = ["blocking-network-client"]
[[test]]
-name = "git"
-path = "tests/git.rs"
+name = "gix"
+path = "tests/gix.rs"
required-features = []
[[test]]
-name = "git-with-regex"
-path = "tests/git-with-regex.rs"
+name = "gix-with-regex"
+path = "tests/gix-with-regex.rs"
required-features = ["regex"]
[dependencies.async-std]
@@ -63,112 +64,118 @@ version = "0.2.0"
optional = true
[dependencies.gix-actor]
-version = "^0.20.0"
+version = "^0.21.0"
[dependencies.gix-attributes]
-version = "^0.12.0"
+version = "^0.13.0"
+
+[dependencies.gix-commitgraph]
+version = "^0.16.0"
[dependencies.gix-config]
-version = "^0.22.0"
+version = "^0.23.0"
[dependencies.gix-credentials]
-version = "^0.14.0"
+version = "^0.15.0"
[dependencies.gix-date]
-version = "^0.5.0"
+version = "^0.5.1"
[dependencies.gix-diff]
-version = "^0.29.0"
+version = "^0.30.0"
[dependencies.gix-discover]
-version = "^0.18.0"
+version = "^0.19.0"
[dependencies.gix-features]
-version = "^0.29.0"
+version = "^0.30.0"
features = [
"progress",
"once_cell",
]
[dependencies.gix-fs]
-version = "^0.1.1"
+version = "^0.2.0"
[dependencies.gix-glob]
-version = "^0.7.0"
+version = "^0.8.0"
[dependencies.gix-hash]
-version = "^0.11.1"
+version = "^0.11.2"
[dependencies.gix-hashtable]
-version = "^0.2.0"
+version = "^0.2.1"
[dependencies.gix-ignore]
-version = "^0.2.0"
+version = "^0.3.0"
[dependencies.gix-index]
-version = "^0.16.0"
+version = "^0.17.0"
[dependencies.gix-lock]
-version = "^5.0.0"
+version = "^6.0.0"
[dependencies.gix-mailmap]
-version = "^0.12.0"
+version = "^0.13.0"
+
+[dependencies.gix-negotiate]
+version = "^0.2.0"
[dependencies.gix-object]
-version = "^0.29.1"
+version = "^0.30.0"
[dependencies.gix-odb]
-version = "^0.45.0"
+version = "^0.46.0"
[dependencies.gix-pack]
-version = "^0.35.0"
+version = "^0.36.0"
features = ["object-cache-dynamic"]
[dependencies.gix-path]
-version = "^0.8.0"
+version = "^0.8.1"
[dependencies.gix-prompt]
-version = "^0.5.0"
+version = "^0.5.1"
[dependencies.gix-protocol]
-version = "^0.32.0"
+version = "^0.33.0"
optional = true
[dependencies.gix-ref]
-version = "^0.29.0"
+version = "^0.30.0"
[dependencies.gix-refspec]
-version = "^0.10.1"
+version = "^0.11.0"
[dependencies.gix-revision]
-version = "^0.13.0"
+version = "^0.15.1"
[dependencies.gix-sec]
-version = "^0.8.0"
+version = "^0.8.1"
[dependencies.gix-tempfile]
-version = "^5.0.0"
+version = "^6.0.0"
features = ["signals"]
default-features = false
[dependencies.gix-transport]
-version = "^0.31.0"
+version = "^0.32.0"
optional = true
[dependencies.gix-traverse]
-version = "^0.25.0"
+version = "^0.26.0"
[dependencies.gix-url]
-version = "^0.18.0"
+version = "^0.19.0"
[dependencies.gix-utils]
-version = "^0.1.1"
+version = "^0.1.2"
[dependencies.gix-validate]
-version = "^0.7.4"
+version = "^0.7.5"
[dependencies.gix-worktree]
-version = "^0.17.0"
+version = "^0.18.0"
[dependencies.log]
version = "0.4.14"
@@ -177,7 +184,7 @@ version = "0.4.14"
version = "1.14.0"
[dependencies.prodash]
-version = "23.1"
+version = "25.0"
features = ["progress-tree"]
optional = true
default-features = false
@@ -292,6 +299,7 @@ serde = [
"gix-ignore/serde",
"gix-revision/serde",
"gix-worktree/serde",
+ "gix-commitgraph/serde",
"gix-credentials/serde",
]
diff --git a/vendor/gix/LICENSE-APACHE b/vendor/gix/LICENSE-APACHE
new file mode 100644
index 000000000..a51f59a06
--- /dev/null
+++ b/vendor/gix/LICENSE-APACHE
@@ -0,0 +1,191 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ Copyright 2018-2021 Sebastian Thiel, and [contributors](https://github.com/byron/gitoxide/contributors)
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/vendor/gix/LICENSE-MIT b/vendor/gix/LICENSE-MIT
new file mode 100644
index 000000000..b58e818f1
--- /dev/null
+++ b/vendor/gix/LICENSE-MIT
@@ -0,0 +1,21 @@
+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
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/vendor/gix/src/clone/access.rs b/vendor/gix/src/clone/access.rs
index 5b6e5fbab..1c817e939 100644
--- a/vendor/gix/src/clone/access.rs
+++ b/vendor/gix/src/clone/access.rs
@@ -1,6 +1,4 @@
-use crate::bstr::BString;
-use crate::clone::PrepareFetch;
-use crate::Repository;
+use crate::{bstr::BString, clone::PrepareFetch, Repository};
/// Builder
impl PrepareFetch {
@@ -12,7 +10,7 @@ impl PrepareFetch {
/// _all changes done in `f()` will be persisted_.
///
/// It can also be used to configure additional options, like those for fetching tags. Note that
- /// [with_fetch_tags()][crate::Remote::with_fetch_tags()] should be called here to configure the clone as desired.
+ /// [`with_fetch_tags()`][crate::Remote::with_fetch_tags()] should be called here to configure the clone as desired.
/// Otherwise a clone is configured to be complete and fetches all tags, not only those reachable from all branches.
pub fn configure_remote(
mut self,
diff --git a/vendor/gix/src/clone/fetch/mod.rs b/vendor/gix/src/clone/fetch/mod.rs
index 59f820675..e20cc96cb 100644
--- a/vendor/gix/src/clone/fetch/mod.rs
+++ b/vendor/gix/src/clone/fetch/mod.rs
@@ -44,7 +44,12 @@ impl PrepareFetch {
/// it was newly initialized.
///
/// Note that all data we created will be removed once this instance drops if the operation wasn't successful.
- pub fn fetch_only<P>(
+ ///
+ /// ### Note for users of `async`
+ ///
+ /// Even though
+ #[gix_protocol::maybe_async::maybe_async]
+ pub async fn fetch_only<P>(
&mut self,
mut progress: P,
should_interrupt: &std::sync::atomic::AtomicBool,
@@ -101,17 +106,19 @@ impl PrepareFetch {
.expect("valid")
.to_owned();
let pending_pack: remote::fetch::Prepare<'_, '_, _> = {
- let mut connection = remote.connect(remote::Direction::Fetch)?;
+ let mut connection = remote.connect(remote::Direction::Fetch).await?;
if let Some(f) = self.configure_connection.as_mut() {
f(&mut connection).map_err(|err| Error::RemoteConnection(err))?;
}
- connection.prepare_fetch(&mut progress, {
- let mut opts = self.fetch_options.clone();
- if !opts.extra_refspecs.contains(&head_refspec) {
- opts.extra_refspecs.push(head_refspec)
- }
- opts
- })?
+ connection
+ .prepare_fetch(&mut progress, {
+ let mut opts = self.fetch_options.clone();
+ if !opts.extra_refspecs.contains(&head_refspec) {
+ opts.extra_refspecs.push(head_refspec)
+ }
+ opts
+ })
+ .await?
};
if pending_pack.ref_map().object_hash != repo.object_hash() {
unimplemented!("configure repository to expect a different object hash as advertised by the server")
@@ -127,7 +134,8 @@ impl PrepareFetch {
message: reflog_message.clone(),
})
.with_shallow(self.shallow.clone())
- .receive(progress, should_interrupt)?;
+ .receive(progress, should_interrupt)
+ .await?;
util::append_config_to_repo_config(repo, config);
util::update_head(
@@ -141,6 +149,7 @@ impl PrepareFetch {
}
/// Similar to [`fetch_only()`][Self::fetch_only()`], but passes ownership to a utility type to configure a checkout operation.
+ #[cfg(feature = "blocking-network-client")]
pub fn fetch_then_checkout<P>(
&mut self,
progress: P,
@@ -155,5 +164,4 @@ impl PrepareFetch {
}
}
-#[cfg(feature = "blocking-network-client")]
mod util;
diff --git a/vendor/gix/src/clone/fetch/util.rs b/vendor/gix/src/clone/fetch/util.rs
index ac8943f6e..cb79669ac 100644
--- a/vendor/gix/src/clone/fetch/util.rs
+++ b/vendor/gix/src/clone/fetch/util.rs
@@ -185,7 +185,7 @@ pub fn update_head(
/// Setup the remote configuration for `branch` so that it points to itself, but on the remote, if and only if currently
/// saved refspecs are able to match it.
-/// For that we reload the remote of `remote_name` and use its ref_specs for match.
+/// For that we reload the remote of `remote_name` and use its `ref_specs` for match.
fn setup_branch_config(
repo: &mut Repository,
branch: &FullNameRef,
diff --git a/vendor/gix/src/clone/mod.rs b/vendor/gix/src/clone/mod.rs
index 43024e0b4..9ec226135 100644
--- a/vendor/gix/src/clone/mod.rs
+++ b/vendor/gix/src/clone/mod.rs
@@ -160,7 +160,7 @@ mod access_feat {
}
///
-#[cfg(feature = "blocking-network-client")]
+#[cfg(any(feature = "async-network-client-async-std", feature = "blocking-network-client"))]
pub mod fetch;
///
diff --git a/vendor/gix/src/commit.rs b/vendor/gix/src/commit.rs
index a58954a36..68e1eeba7 100644
--- a/vendor/gix/src/commit.rs
+++ b/vendor/gix/src/commit.rs
@@ -31,7 +31,7 @@ pub mod describe {
use crate::{bstr::BStr, ext::ObjectIdExt, Repository};
- /// The result of [try_resolve()][Platform::try_resolve()].
+ /// The result of [`try_resolve()`][Platform::try_resolve()].
pub struct Resolution<'repo> {
/// The outcome of the describe operation.
pub outcome: gix_revision::describe::Outcome<'static>,
@@ -47,12 +47,12 @@ pub mod describe {
}
}
- /// The error returned by [try_format()][Platform::try_format()].
+ /// The error returned by [`try_format()`][Platform::try_format()].
#[derive(Debug, thiserror::Error)]
#[allow(missing_docs)]
pub enum Error {
#[error(transparent)]
- Describe(#[from] gix_revision::describe::Error<gix_odb::store::find::Error>),
+ Describe(#[from] gix_revision::describe::Error),
#[error("Could not produce an unambiguous shortened id for formatting.")]
ShortId(#[from] crate::id::shorten::Error),
#[error(transparent)]
@@ -201,15 +201,18 @@ pub mod describe {
/// to save ~40% of time.
pub fn try_resolve(&self) -> Result<Option<Resolution<'repo>>, Error> {
// TODO: dirty suffix with respective dirty-detection
- let outcome = gix_revision::describe(
- &self.id,
+ let mut graph = gix_revision::Graph::new(
|id, buf| {
- Ok(self
- .repo
+ self.repo
.objects
- .try_find(id, buf)?
- .and_then(|d| d.try_into_commit_iter()))
+ .try_find(id, buf)
+ .map(|r| r.and_then(|d| d.try_into_commit_iter()))
},
+ gix_commitgraph::Graph::from_info_dir(self.repo.objects.store_ref().path().join("info")).ok(),
+ );
+ let outcome = gix_revision::describe(
+ &self.id,
+ &mut graph,
gix_revision::describe::Options {
name_by_oid: self.select.names(self.repo)?,
fallback_to_oid: self.id_as_fallback,
@@ -218,7 +221,7 @@ pub mod describe {
},
)?;
- Ok(outcome.map(|outcome| crate::commit::describe::Resolution {
+ Ok(outcome.map(|outcome| Resolution {
outcome,
id: self.id.attach(self.repo),
}))
diff --git a/vendor/gix/src/config/cache/access.rs b/vendor/gix/src/config/cache/access.rs
index 77324efe3..cea56f973 100644
--- a/vendor/gix/src/config/cache/access.rs
+++ b/vendor/gix/src/config/cache/access.rs
@@ -47,8 +47,7 @@ impl Cache {
.get_or_init(|| {
self.resolved
.string_by_key(Gitoxide::USER_AGENT.logical_name().as_str())
- .map(|s| s.to_string())
- .unwrap_or_else(|| crate::env::agent().into())
+ .map_or_else(|| crate::env::agent().into(), |s| s.to_string())
})
.to_owned();
("agent", Some(gix_protocol::agent(agent).into()))
diff --git a/vendor/gix/src/config/cache/init.rs b/vendor/gix/src/config/cache/init.rs
index ee20e0354..6fcbcc4ec 100644
--- a/vendor/gix/src/config/cache/init.rs
+++ b/vendor/gix/src/config/cache/init.rs
@@ -151,7 +151,7 @@ impl Cache {
lenient_config,
)?;
let object_kind_hint = util::disambiguate_hint(&config, lenient_config)?;
- let (pack_cache_bytes, object_cache_bytes) =
+ let (static_pack_cache_limit_bytes, pack_cache_bytes, object_cache_bytes) =
util::parse_object_caches(&config, lenient_config, filter_config_section)?;
// NOTE: When adding a new initial cache, consider adjusting `reread_values_and_clear_caches()` as well.
Ok(Cache {
@@ -159,6 +159,7 @@ impl Cache {
use_multi_pack_index,
object_hash,
object_kind_hint,
+ static_pack_cache_limit_bytes,
pack_cache_bytes,
object_cache_bytes,
reflog,
@@ -222,8 +223,11 @@ impl Cache {
self.url_rewrite = Default::default();
self.diff_renames = Default::default();
self.diff_algorithm = Default::default();
- (self.pack_cache_bytes, self.object_cache_bytes) =
- util::parse_object_caches(config, self.lenient_config, self.filter_config_section)?;
+ (
+ self.static_pack_cache_limit_bytes,
+ self.pack_cache_bytes,
+ self.object_cache_bytes,
+ ) = util::parse_object_caches(config, self.lenient_config, self.filter_config_section)?;
#[cfg(any(feature = "blocking-network-client", feature = "async-network-client"))]
{
self.url_scheme = Default::default();
@@ -423,10 +427,6 @@ fn apply_environment_overrides(
objects,
&[
{
- let key = &gitoxide::Objects::NO_REPLACE;
- (env(key), key.name)
- },
- {
let key = &gitoxide::Objects::REPLACE_REF_BASE;
(env(key), key.name)
},
@@ -487,6 +487,10 @@ fn apply_environment_overrides(
let key = &Core::SSH_COMMAND;
(env(key), key.name, git_prefix)
},
+ {
+ let key = &Core::USE_REPLACE_REFS;
+ (env(key), key.name, objects)
+ },
] {
if let Some(value) = var_as_bstring(var, permission) {
section.push_with_comment(
diff --git a/vendor/gix/src/config/cache/util.rs b/vendor/gix/src/config/cache/util.rs
index d5a0a4acb..7c478fcf9 100644
--- a/vendor/gix/src/config/cache/util.rs
+++ b/vendor/gix/src/config/cache/util.rs
@@ -40,8 +40,7 @@ pub(crate) fn config_bool(
);
config
.boolean_by_key(key_str)
- .map(|res| key.enrich_error(res))
- .unwrap_or(Ok(default))
+ .map_or(Ok(default), |res| key.enrich_error(res))
.map_err(Error::from)
.with_lenient_default(lenient)
}
@@ -73,7 +72,12 @@ pub(crate) fn parse_object_caches(
config: &gix_config::File<'static>,
lenient: bool,
mut filter_config_section: fn(&gix_config::file::Metadata) -> bool,
-) -> Result<(Option<usize>, usize), Error> {
+) -> Result<(Option<usize>, Option<usize>, usize), Error> {
+ let static_pack_cache_limit = config
+ .integer_filter_by_key("core.deltaBaseCacheLimit", &mut filter_config_section)
+ .map(|res| gitoxide::Core::DEFAULT_PACK_CACHE_MEMORY_LIMIT.try_into_usize(res))
+ .transpose()
+ .with_leniency(lenient)?;
let pack_cache_bytes = config
.integer_filter_by_key("core.deltaBaseCacheLimit", &mut filter_config_section)
.map(|res| Core::DELTA_BASE_CACHE_LIMIT.try_into_usize(res))
@@ -85,7 +89,7 @@ pub(crate) fn parse_object_caches(
.transpose()
.with_leniency(lenient)?
.unwrap_or_default();
- Ok((pack_cache_bytes, object_cache_bytes))
+ Ok((static_pack_cache_limit, pack_cache_bytes, object_cache_bytes))
}
pub(crate) fn parse_core_abbrev(
diff --git a/vendor/gix/src/config/mod.rs b/vendor/gix/src/config/mod.rs
index 5da569605..3353806f8 100644
--- a/vendor/gix/src/config/mod.rs
+++ b/vendor/gix/src/config/mod.rs
@@ -438,7 +438,7 @@ pub mod transport {
/// Utility type to keep pre-obtained configuration values, only for those required during initial setup
/// and other basic operations that are common enough to warrant a permanent cache.
///
-/// All other values are obtained lazily using OnceCell.
+/// All other values are obtained lazily using `OnceCell`.
#[derive(Clone)]
pub(crate) struct Cache {
pub resolved: crate::Config,
@@ -470,6 +470,8 @@ pub(crate) struct Cache {
pub(crate) pack_cache_bytes: Option<usize>,
/// The amount of bytes to use for caching whole objects, or 0 to turn it off entirely.
pub(crate) object_cache_bytes: usize,
+ /// The amount of bytes we can hold in our static LRU cache. Otherwise, go with the defaults.
+ pub(crate) static_pack_cache_limit_bytes: Option<usize>,
/// The config section filter from the options used to initialize this instance. Keep these in sync!
filter_config_section: fn(&gix_config::file::Metadata) -> bool,
/// The object kind to pick if a prefix is ambiguous.
diff --git a/vendor/gix/src/config/overrides.rs b/vendor/gix/src/config/overrides.rs
index f43e8471b..4bdf4a13f 100644
--- a/vendor/gix/src/config/overrides.rs
+++ b/vendor/gix/src/config/overrides.rs
@@ -2,7 +2,7 @@ use std::convert::TryFrom;
use crate::bstr::{BStr, BString, ByteSlice};
-/// The error returned by [SnapshotMut::apply_cli_overrides()][crate::config::SnapshotMut::append_config()].
+/// The error returned by [`SnapshotMut::apply_cli_overrides()`][crate::config::SnapshotMut::append_config()].
#[derive(Debug, thiserror::Error)]
#[allow(missing_docs)]
pub enum Error {
diff --git a/vendor/gix/src/config/snapshot/credential_helpers.rs b/vendor/gix/src/config/snapshot/credential_helpers.rs
index 5a07e9fe2..c4eef35d6 100644
--- a/vendor/gix/src/config/snapshot/credential_helpers.rs
+++ b/vendor/gix/src/config/snapshot/credential_helpers.rs
@@ -13,7 +13,7 @@ use crate::{
mod error {
use crate::bstr::BString;
- /// The error returned by [Snapshot::credential_helpers()][super::Snapshot::credential_helpers()].
+ /// The error returned by [`Snapshot::credential_helpers()`][super::Snapshot::credential_helpers()].
#[derive(Debug, thiserror::Error)]
#[allow(missing_docs)]
pub enum Error {
diff --git a/vendor/gix/src/config/tree/keys.rs b/vendor/gix/src/config/tree/keys.rs
index 1cdd187d0..b03fa49c6 100644
--- a/vendor/gix/src/config/tree/keys.rs
+++ b/vendor/gix/src/config/tree/keys.rs
@@ -179,10 +179,10 @@ pub type Url = Any<validate::Url>;
/// A key that represents a UTF-8 string.
pub type String = Any<validate::String>;
-/// A key that represents a RefSpec for pushing.
+/// A key that represents a `RefSpec` for pushing.
pub type PushRefSpec = Any<validate::PushRefSpec>;
-/// A key that represents a RefSpec for fetching.
+/// A key that represents a `RefSpec` for fetching.
pub type FetchRefSpec = Any<validate::FetchRefSpec>;
mod duration {
@@ -511,7 +511,8 @@ pub mod validate {
gix_config::Integer::try_from(value)?
.to_decimal()
.ok_or_else(|| format!("integer {value} cannot be represented as `usize`"))?,
- )?;
+ )
+ .map_err(|_| "cannot use sign for unsigned integer")?;
Ok(())
}
}
diff --git a/vendor/gix/src/config/tree/mod.rs b/vendor/gix/src/config/tree/mod.rs
index b378b8c49..3f69ccb97 100644
--- a/vendor/gix/src/config/tree/mod.rs
+++ b/vendor/gix/src/config/tree/mod.rs
@@ -34,6 +34,8 @@ pub(crate) mod root {
pub const DIFF: sections::Diff = sections::Diff;
/// The `extensions` section.
pub const EXTENSIONS: sections::Extensions = sections::Extensions;
+ /// The `fetch` section.
+ pub const FETCH: sections::Fetch = sections::Fetch;
/// The `gitoxide` section.
pub const GITOXIDE: sections::Gitoxide = sections::Gitoxide;
/// The `http` section.
@@ -69,6 +71,7 @@ pub(crate) mod root {
&Self::CREDENTIAL,
&Self::DIFF,
&Self::EXTENSIONS,
+ &Self::FETCH,
&Self::GITOXIDE,
&Self::HTTP,
&Self::INDEX,
@@ -87,9 +90,9 @@ pub(crate) mod root {
mod sections;
pub use sections::{
- branch, checkout, core, credential, diff, extensions, gitoxide, http, index, protocol, remote, ssh, Author, Branch,
- Checkout, Clone, Committer, Core, Credential, Diff, Extensions, Gitoxide, Http, Index, Init, Pack, Protocol,
- Remote, Safe, Ssh, Url, User,
+ branch, checkout, core, credential, diff, extensions, fetch, gitoxide, http, index, protocol, remote, ssh, Author,
+ Branch, Checkout, Clone, Committer, Core, Credential, Diff, Extensions, Fetch, Gitoxide, Http, Index, Init, Pack,
+ Protocol, Remote, Safe, Ssh, Url, User,
};
/// Generic value implementations for static instantiation.
@@ -99,7 +102,7 @@ pub mod keys;
pub mod key {
///
pub mod validate {
- /// The error returned by [Key::validate()][crate::config::tree::Key::validate()].
+ /// The error returned by [`Key::validate()`][crate::config::tree::Key::validate()].
#[derive(Debug, thiserror::Error)]
#[error(transparent)]
#[allow(missing_docs)]
@@ -110,7 +113,7 @@ pub mod key {
}
///
pub mod validate_assignment {
- /// The error returned by [Key::validated_assignment*()][crate::config::tree::Key::validated_assignment_fmt()].
+ /// The error returned by [`Key::validated_assignment`*()][crate::config::tree::Key::validated_assignment_fmt()].
#[derive(Debug, thiserror::Error)]
#[allow(missing_docs)]
pub enum Error {
diff --git a/vendor/gix/src/config/tree/sections/core.rs b/vendor/gix/src/config/tree/sections/core.rs
index 6ea0580e1..93d2fcd01 100644
--- a/vendor/gix/src/config/tree/sections/core.rs
+++ b/vendor/gix/src/config/tree/sections/core.rs
@@ -36,7 +36,7 @@ impl Core {
LogAllRefUpdates::new_with_validate("logAllRefUpdates", &config::Tree::CORE, validate::LogAllRefUpdates);
/// The `core.precomposeUnicode` key.
///
- /// Needs application to use [env::args_os][crate::env::args_os()] to conform all input paths before they are used.
+ /// Needs application to use [`env::args_os`][crate::env::args_os()] to conform all input paths before they are used.
pub const PRECOMPOSE_UNICODE: keys::Boolean = keys::Boolean::new_boolean("precomposeUnicode", &config::Tree::CORE)
.with_note("application needs to conform all program input by using gix::env::args_os()");
/// The `core.repositoryFormatVersion` key.
@@ -63,6 +63,9 @@ impl Core {
/// The `core.sshCommand` key.
pub const SSH_COMMAND: keys::Executable = keys::Executable::new_executable("sshCommand", &config::Tree::CORE)
.with_environment_override("GIT_SSH_COMMAND");
+ /// The `core.useReplaceRefs` key.
+ pub const USE_REPLACE_REFS: keys::Boolean = keys::Boolean::new_boolean("useReplaceRefs", &config::Tree::CORE)
+ .with_environment_override("GIT_NO_REPLACE_OBJECTS");
}
impl Section for Core {
@@ -92,6 +95,7 @@ impl Section for Core {
&Self::EXCLUDES_FILE,
&Self::ATTRIBUTES_FILE,
&Self::SSH_COMMAND,
+ &Self::USE_REPLACE_REFS,
]
}
}
diff --git a/vendor/gix/src/config/tree/sections/fetch.rs b/vendor/gix/src/config/tree/sections/fetch.rs
new file mode 100644
index 000000000..117cabfd2
--- /dev/null
+++ b/vendor/gix/src/config/tree/sections/fetch.rs
@@ -0,0 +1,68 @@
+use crate::{
+ config,
+ config::tree::{keys, Fetch, Key, Section},
+};
+
+impl Fetch {
+ /// The `fetch.negotiationAlgorithm` key.
+ pub const NEGOTIATION_ALGORITHM: NegotiationAlgorithm = NegotiationAlgorithm::new_with_validate(
+ "negotiationAlgorithm",
+ &config::Tree::FETCH,
+ validate::NegotiationAlgorithm,
+ );
+}
+
+impl Section for Fetch {
+ fn name(&self) -> &str {
+ "fetch"
+ }
+
+ fn keys(&self) -> &[&dyn Key] {
+ &[&Self::NEGOTIATION_ALGORITHM]
+ }
+}
+
+/// The `fetch.negotiationAlgorithm` key.
+pub type NegotiationAlgorithm = keys::Any<validate::NegotiationAlgorithm>;
+
+mod algorithm {
+ use std::borrow::Cow;
+
+ use gix_object::bstr::ByteSlice;
+
+ use crate::{
+ bstr::BStr,
+ config::{key::GenericErrorWithValue, tree::sections::fetch::NegotiationAlgorithm},
+ remote::fetch::negotiate,
+ };
+
+ impl NegotiationAlgorithm {
+ /// Derive the negotiation algorithm identified by `name`, case-sensitively.
+ pub fn try_into_negotiation_algorithm(
+ &'static self,
+ name: Cow<'_, BStr>,
+ ) -> Result<negotiate::Algorithm, GenericErrorWithValue> {
+ Ok(match name.as_ref().as_bytes() {
+ b"noop" => negotiate::Algorithm::Noop,
+ b"consecutive" | b"default" => negotiate::Algorithm::Consecutive,
+ b"skipping" => negotiate::Algorithm::Skipping,
+ _ => return Err(GenericErrorWithValue::from_value(self, name.into_owned())),
+ })
+ }
+ }
+}
+
+mod validate {
+ use crate::{
+ bstr::BStr,
+ config::tree::{keys, Fetch},
+ };
+
+ pub struct NegotiationAlgorithm;
+ impl keys::Validate for NegotiationAlgorithm {
+ fn validate(&self, value: &BStr) -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
+ Fetch::NEGOTIATION_ALGORITHM.try_into_negotiation_algorithm(value.into())?;
+ Ok(())
+ }
+ }
+}
diff --git a/vendor/gix/src/config/tree/sections/gitoxide.rs b/vendor/gix/src/config/tree/sections/gitoxide.rs
index 7d60f1287..f07d494fb 100644
--- a/vendor/gix/src/config/tree/sections/gitoxide.rs
+++ b/vendor/gix/src/config/tree/sections/gitoxide.rs
@@ -67,6 +67,11 @@ mod subsections {
pub struct Core;
impl Core {
+ /// The `gitoxide.core.defaultPackCacheMemoryLimit` key.
+ pub const DEFAULT_PACK_CACHE_MEMORY_LIMIT: keys::UnsignedInteger =
+ keys::UnsignedInteger::new_unsigned_integer("defaultPackCacheMemoryLimit", &Gitoxide::CORE).with_note(
+ "If unset, we default to 96MB memory cap for the default 64 slot LRU cache for object deltas.",
+ );
/// The `gitoxide.core.useNsec` key.
pub const USE_NSEC: keys::Boolean = keys::Boolean::new_boolean("useNsec", &Gitoxide::CORE)
.with_note("A runtime version of the USE_NSEC build flag.");
@@ -89,7 +94,12 @@ mod subsections {
}
fn keys(&self) -> &[&dyn Key] {
- &[&Self::USE_NSEC, &Self::USE_STDEV, &Self::SHALLOW_FILE]
+ &[
+ &Self::DEFAULT_PACK_CACHE_MEMORY_LIMIT,
+ &Self::USE_NSEC,
+ &Self::USE_STDEV,
+ &Self::SHALLOW_FILE,
+ ]
}
fn parent(&self) -> Option<&dyn Section> {
@@ -307,8 +317,7 @@ mod subsections {
.with_note("If unset or 0, there is no object cache")
.with_environment_override("GITOXIDE_OBJECT_CACHE_MEMORY");
/// The `gitoxide.objects.noReplace` key.
- pub const NO_REPLACE: keys::Boolean = keys::Boolean::new_boolean("noReplace", &Gitoxide::OBJECTS)
- .with_environment_override("GIT_NO_REPLACE_OBJECTS");
+ pub const NO_REPLACE: keys::Boolean = keys::Boolean::new_boolean("noReplace", &Gitoxide::OBJECTS);
/// The `gitoxide.objects.replaceRefBase` key.
pub const REPLACE_REF_BASE: keys::Any =
keys::Any::new("replaceRefBase", &Gitoxide::OBJECTS).with_environment_override("GIT_REPLACE_REF_BASE");
@@ -320,7 +329,7 @@ mod subsections {
}
fn keys(&self) -> &[&dyn Key] {
- &[&Self::CACHE_LIMIT, &Self::NO_REPLACE, &Self::REPLACE_REF_BASE]
+ &[&Self::CACHE_LIMIT, &Self::REPLACE_REF_BASE]
}
fn parent(&self) -> Option<&dyn Section> {
diff --git a/vendor/gix/src/config/tree/sections/index.rs b/vendor/gix/src/config/tree/sections/index.rs
index d03322247..08f7ec1bd 100644
--- a/vendor/gix/src/config/tree/sections/index.rs
+++ b/vendor/gix/src/config/tree/sections/index.rs
@@ -13,12 +13,14 @@ impl Index {
pub type IndexThreads = keys::Any<validate::IndexThreads>;
mod index_threads {
- use crate::bstr::BStr;
- use crate::config;
- use crate::config::key::GenericErrorWithValue;
- use crate::config::tree::index::IndexThreads;
use std::borrow::Cow;
+ use crate::{
+ bstr::BStr,
+ config,
+ config::{key::GenericErrorWithValue, tree::index::IndexThreads},
+ };
+
impl IndexThreads {
/// Parse `value` into the amount of threads to use, with `1` being single-threaded, or `0` indicating
/// to select the amount of threads, with any other number being the specific amount of threads to use.
diff --git a/vendor/gix/src/config/tree/sections/mod.rs b/vendor/gix/src/config/tree/sections/mod.rs
index 9f0a50c93..ebf24a8b7 100644
--- a/vendor/gix/src/config/tree/sections/mod.rs
+++ b/vendor/gix/src/config/tree/sections/mod.rs
@@ -45,6 +45,11 @@ pub mod diff;
pub struct Extensions;
pub mod extensions;
+/// The `fetch` top-level section.
+#[derive(Copy, Clone, Default)]
+pub struct Fetch;
+pub mod fetch;
+
/// The `gitoxide` top-level section.
#[derive(Copy, Clone, Default)]
pub struct Gitoxide;
diff --git a/vendor/gix/src/config/tree/sections/protocol.rs b/vendor/gix/src/config/tree/sections/protocol.rs
index 58e907b0f..a0510f2b8 100644
--- a/vendor/gix/src/config/tree/sections/protocol.rs
+++ b/vendor/gix/src/config/tree/sections/protocol.rs
@@ -6,6 +6,8 @@ use crate::{
impl Protocol {
/// The `protocol.allow` key.
pub const ALLOW: Allow = Allow::new_with_validate("allow", &config::Tree::PROTOCOL, validate::Allow);
+ /// The `protocol.version` key.
+ pub const VERSION: Version = Version::new_with_validate("version", &config::Tree::PROTOCOL, validate::Version);
/// The `protocol.<name>` subsection
pub const NAME_PARAMETER: NameParameter = NameParameter;
@@ -14,6 +16,9 @@ impl Protocol {
/// The `protocol.allow` key type.
pub type Allow = keys::Any<validate::Allow>;
+/// The `protocol.version` key.
+pub type Version = keys::Any<validate::Version>;
+
#[cfg(any(feature = "blocking-network-client", feature = "async-network-client"))]
mod allow {
use std::borrow::Cow;
@@ -39,7 +44,7 @@ mod allow {
pub struct NameParameter;
impl NameParameter {
- /// The `credential.<url>.helper` key.
+ /// The `protocol.<name>.allow` key.
pub const ALLOW: Allow = Allow::new_with_validate("allow", &Protocol::NAME_PARAMETER, validate::Allow);
}
@@ -63,7 +68,7 @@ impl Section for Protocol {
}
fn keys(&self) -> &[&dyn Key] {
- &[&Self::ALLOW]
+ &[&Self::ALLOW, &Self::VERSION]
}
fn sub_sections(&self) -> &[&dyn Section] {
@@ -71,6 +76,38 @@ impl Section for Protocol {
}
}
+mod key_impls {
+ impl super::Version {
+ /// Convert `value` into the corresponding protocol version, possibly applying the correct default.
+ #[cfg(any(feature = "blocking-network-client", feature = "async-network-client"))]
+ pub fn try_into_protocol_version(
+ &'static self,
+ value: Option<Result<i64, gix_config::value::Error>>,
+ ) -> Result<gix_protocol::transport::Protocol, crate::config::key::GenericErrorWithValue> {
+ let value = match value {
+ None => return Ok(gix_protocol::transport::Protocol::V2),
+ Some(v) => v,
+ };
+ Ok(match value {
+ Ok(0) => gix_protocol::transport::Protocol::V0,
+ Ok(1) => gix_protocol::transport::Protocol::V1,
+ Ok(2) => gix_protocol::transport::Protocol::V2,
+ Ok(other) => {
+ return Err(crate::config::key::GenericErrorWithValue::from_value(
+ self,
+ other.to_string().into(),
+ ))
+ }
+ Err(err) => {
+ return Err(
+ crate::config::key::GenericErrorWithValue::from_value(self, "unknown".into()).with_source(err),
+ )
+ }
+ })
+ }
+ }
+}
+
mod validate {
use crate::{bstr::BStr, config::tree::keys};
@@ -82,4 +119,17 @@ mod validate {
Ok(())
}
}
+
+ pub struct Version;
+ impl keys::Validate for Version {
+ fn validate(&self, value: &BStr) -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
+ let value = gix_config::Integer::try_from(value)?
+ .to_decimal()
+ .ok_or_else(|| format!("integer {value} cannot be represented as integer"))?;
+ match value {
+ 0 | 1 | 2 => Ok(()),
+ _ => Err(format!("protocol version {value} is unknown").into()),
+ }
+ }
+ }
}
diff --git a/vendor/gix/src/env.rs b/vendor/gix/src/env.rs
index 4c61ceb4e..ce5461bcc 100644
--- a/vendor/gix/src/env.rs
+++ b/vendor/gix/src/env.rs
@@ -12,7 +12,7 @@ pub fn agent() -> &'static str {
concat!("oxide-", env!("CARGO_PKG_VERSION"))
}
-/// Equivalent to `std::env::args_os()`, but with precomposed unicode on MacOS and other apple platforms.
+/// Equivalent to `std::env::args_os()`, but with precomposed unicode on `MacOS` and other apple platforms.
#[cfg(not(target_vendor = "apple"))]
pub fn args_os() -> impl Iterator<Item = OsString> {
std::env::args_os()
@@ -119,7 +119,8 @@ pub mod collate {
Error::Fetch(
crate::remote::fetch::Error::PackThreads(_)
| crate::remote::fetch::Error::PackIndexVersion(_)
- | crate::remote::fetch::Error::RemovePackKeepFile { .. },
+ | crate::remote::fetch::Error::RemovePackKeepFile { .. }
+ | crate::remote::fetch::Error::Negotiate(_),
) => true,
_ => false,
}
diff --git a/vendor/gix/src/head/peel.rs b/vendor/gix/src/head/peel.rs
index 65a876bc4..a4f7c71b0 100644
--- a/vendor/gix/src/head/peel.rs
+++ b/vendor/gix/src/head/peel.rs
@@ -6,7 +6,7 @@ use crate::{
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::peel_to_id_in_place()] and [`Head::into_fully_peeled_id()`][super::Head::into_fully_peeled_id()].
#[derive(Debug, thiserror::Error)]
#[allow(missing_docs)]
pub enum Error {
@@ -25,7 +25,7 @@ use crate::head::Kind;
pub mod to_commit {
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::peel_to_commit_in_place()`][super::Head::peel_to_commit_in_place()].
#[derive(Debug, thiserror::Error)]
#[allow(missing_docs)]
pub enum Error {
diff --git a/vendor/gix/src/id.rs b/vendor/gix/src/id.rs
index 72f424334..0d5c86752 100644
--- a/vendor/gix/src/id.rs
+++ b/vendor/gix/src/id.rs
@@ -81,7 +81,7 @@ impl<'repo> Id<'repo> {
Id { inner: id.into(), repo }
}
- /// Turn this instance into its bare [ObjectId].
+ /// Turn this instance into its bare [`ObjectId`].
pub fn detach(self) -> ObjectId {
self.inner
}
diff --git a/vendor/gix/src/lib.rs b/vendor/gix/src/lib.rs
index eb5efcfdf..5de702dbf 100644
--- a/vendor/gix/src/lib.rs
+++ b/vendor/gix/src/lib.rs
@@ -14,7 +14,7 @@
//! Most extensions to existing objects provide an `obj_with_extension.attach(&repo).an_easier_version_of_a_method()` for simpler
//! call signatures.
//!
-//! ## ThreadSafe Mode
+//! ## `ThreadSafe` Mode
//!
//! By default, the [`Repository`] isn't `Sync` and thus can't be used in certain contexts which require the `Sync` trait.
//!
@@ -37,7 +37,7 @@
//!
//! ### Terminology
//!
-//! #### WorkingTree and WorkTree
+//! #### `WorkingTree` and `WorkTree`
//!
//! When reading the documentation of the canonical gix-worktree program one gets the impression work tree and working tree are used
//! interchangeably. We use the term _work tree_ only and try to do so consistently as its shorter and assumed to be the same.
@@ -68,6 +68,7 @@
// APIs/instances anyway.
pub use gix_actor as actor;
pub use gix_attributes as attrs;
+pub use gix_commitgraph as commitgraph;
pub use gix_credentials as credentials;
pub use gix_date as date;
pub use gix_features as features;
@@ -80,6 +81,7 @@ pub use gix_ignore as ignore;
#[doc(inline)]
pub use gix_index as index;
pub use gix_lock as lock;
+pub use gix_negotiate as negotiate;
pub use gix_object as objs;
pub use gix_object::bstr;
pub use gix_odb as odb;
@@ -119,8 +121,7 @@ pub(crate) type Config = OwnShared<gix_config::File<'static>>;
///
mod types;
pub use types::{
- Commit, Head, Id, Kind, Object, ObjectDetached, Reference, Remote, Repository, Tag, ThreadSafeRepository, Tree,
- Worktree,
+ Commit, Head, Id, Object, ObjectDetached, Reference, Remote, Repository, Tag, ThreadSafeRepository, Tree, Worktree,
};
///
@@ -130,7 +131,7 @@ pub mod head;
pub mod id;
pub mod object;
pub mod reference;
-mod repository;
+pub mod repository;
pub mod tag;
///
@@ -139,7 +140,7 @@ pub mod progress;
///
pub mod diff;
-/// See [ThreadSafeRepository::discover()], but returns a [`Repository`] instead.
+/// See [`ThreadSafeRepository::discover()`], but returns a [`Repository`] instead.
///
/// # Note
///
@@ -154,13 +155,13 @@ pub fn discover(directory: impl AsRef<std::path::Path>) -> Result<Repository, di
ThreadSafeRepository::discover(directory).map(Into::into)
}
-/// See [ThreadSafeRepository::init()], but returns a [`Repository`] instead.
+/// See [`ThreadSafeRepository::init()`], but returns a [`Repository`] instead.
#[allow(clippy::result_large_err)]
pub fn init(directory: impl AsRef<std::path::Path>) -> Result<Repository, init::Error> {
ThreadSafeRepository::init(directory, create::Kind::WithWorktree, create::Options::default()).map(Into::into)
}
-/// See [ThreadSafeRepository::init()], but returns a [`Repository`] instead.
+/// See [`ThreadSafeRepository::init()`], but returns a [`Repository`] instead.
#[allow(clippy::result_large_err)]
pub fn init_bare(directory: impl AsRef<std::path::Path>) -> Result<Repository, init::Error> {
ThreadSafeRepository::init(directory, create::Kind::Bare, create::Options::default()).map(Into::into)
@@ -169,7 +170,7 @@ pub fn init_bare(directory: impl AsRef<std::path::Path>) -> Result<Repository, i
/// Create a platform for configuring a bare clone from `url` to the local `path`, using default options for opening it (but
/// amended with using configuration from the git installation to ensure all authentication options are honored).
///
-/// See [`clone::PrepareFetch::new()] for a function to take full control over all options.
+/// See [`clone::PrepareFetch::new()`] for a function to take full control over all options.
#[allow(clippy::result_large_err)]
pub fn prepare_clone_bare<Url, E>(
url: Url,
@@ -191,7 +192,7 @@ where
/// Create a platform for configuring a clone with main working tree from `url` to the local `path`, using default options for opening it
/// (but amended with using configuration from the git installation to ensure all authentication options are honored).
///
-/// See [`clone::PrepareFetch::new()] for a function to take full control over all options.
+/// See [`clone::PrepareFetch::new()`] for a function to take full control over all options.
#[allow(clippy::result_large_err)]
pub fn prepare_clone<Url, E>(url: Url, path: impl AsRef<std::path::Path>) -> Result<clone::PrepareFetch, clone::Error>
where
@@ -214,13 +215,13 @@ fn open_opts_with_git_binary_config() -> open::Options {
opts
}
-/// See [ThreadSafeRepository::open()], but returns a [`Repository`] instead.
+/// See [`ThreadSafeRepository::open()`], but returns a [`Repository`] instead.
#[allow(clippy::result_large_err)]
pub fn open(directory: impl Into<std::path::PathBuf>) -> Result<Repository, open::Error> {
ThreadSafeRepository::open(directory).map(Into::into)
}
-/// See [ThreadSafeRepository::open_opts()], but returns a [`Repository`] instead.
+/// See [`ThreadSafeRepository::open_opts()`], but returns a [`Repository`] instead.
#[allow(clippy::result_large_err)]
pub fn open_opts(directory: impl Into<std::path::PathBuf>, options: open::Options) -> Result<Repository, open::Error> {
ThreadSafeRepository::open_opts(directory, options).map(Into::into)
@@ -259,5 +260,3 @@ pub mod shallow;
pub mod discover;
pub mod env;
-
-mod kind;
diff --git a/vendor/gix/src/object/tree/diff/for_each.rs b/vendor/gix/src/object/tree/diff/for_each.rs
index 5cae4cf2f..a72033182 100644
--- a/vendor/gix/src/object/tree/diff/for_each.rs
+++ b/vendor/gix/src/object/tree/diff/for_each.rs
@@ -209,9 +209,9 @@ where
fn visit(&mut self, change: gix_diff::tree::visit::Change) -> gix_diff::tree::visit::Action {
match self.tracked.as_mut() {
- Some(tracked) => tracked
- .try_push_change(change, self.recorder.path())
- .map(|change| {
+ Some(tracked) => tracked.try_push_change(change, self.recorder.path()).map_or(
+ gix_diff::tree::visit::Action::Continue,
+ |change| {
Self::emit_change(
change,
self.recorder.path(),
@@ -220,8 +220,8 @@ where
self.other_repo,
&mut self.err,
)
- })
- .unwrap_or(gix_diff::tree::visit::Action::Continue),
+ },
+ ),
None => Self::emit_change(
change,
self.recorder.path(),
diff --git a/vendor/gix/src/object/tree/diff/rewrites.rs b/vendor/gix/src/object/tree/diff/rewrites.rs
index 304894d15..1502048ec 100644
--- a/vendor/gix/src/object/tree/diff/rewrites.rs
+++ b/vendor/gix/src/object/tree/diff/rewrites.rs
@@ -49,7 +49,7 @@ pub struct Outcome {
pub num_similarity_checks_skipped_for_copy_tracking_due_to_limit: usize,
}
-/// The error returned by [`Rewrites::try_from_config()].
+/// The error returned by [`Rewrites::try_from_config()`].
#[derive(Debug, thiserror::Error)]
#[allow(missing_docs)]
pub enum Error {
diff --git a/vendor/gix/src/object/tree/diff/tracked.rs b/vendor/gix/src/object/tree/diff/tracked.rs
index 3bbe01624..d6042fcbc 100644
--- a/vendor/gix/src/object/tree/diff/tracked.rs
+++ b/vendor/gix/src/object/tree/diff/tracked.rs
@@ -311,7 +311,7 @@ fn needs_exact_match(percentage: Option<f32>) -> bool {
percentage.map_or(true, |p| p >= 1.0)
}
-/// <src_idx, src, possibly diff stat>
+/// <`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`.
@@ -337,8 +337,7 @@ fn find_match<'a>(
let end = items
.iter()
.position(|a| a.change.oid() != item_id)
- .map(|idx| first_idx + idx)
- .unwrap_or(items.len());
+ .map_or(items.len(), |idx| first_idx + idx);
first_idx..end
}) {
Some(range) => range,
diff --git a/vendor/gix/src/open/permissions.rs b/vendor/gix/src/open/permissions.rs
index 633575a9d..6a72beef2 100644
--- a/vendor/gix/src/open/permissions.rs
+++ b/vendor/gix/src/open/permissions.rs
@@ -1,7 +1,8 @@
//! Various permissions to define what can be done when operating a [`Repository`][crate::Repository].
-use crate::open::Permissions;
use gix_sec::Trust;
+use crate::open::Permissions;
+
/// Configure from which sources git configuration may be loaded.
///
/// Note that configuration from inside of the repository is always loaded as it's definitely required for correctness.
diff --git a/vendor/gix/src/open/repository.rs b/vendor/gix/src/open/repository.rs
index c7702b5f6..e89fdc430 100644
--- a/vendor/gix/src/open/repository.rs
+++ b/vendor/gix/src/open/repository.rs
@@ -284,12 +284,12 @@ fn replacement_objects_refs_prefix(
mut filter_config_section: fn(&gix_config::file::Metadata) -> bool,
) -> Result<Option<PathBuf>, Error> {
let is_disabled = config
- .boolean_filter_by_key("gitoxide.objects.noReplace", &mut filter_config_section)
- .map(|b| gitoxide::Objects::NO_REPLACE.enrich_error(b))
+ .boolean_filter_by_key("core.useReplaceRefs", &mut filter_config_section)
+ .map(|b| Core::USE_REPLACE_REFS.enrich_error(b))
.transpose()
.with_leniency(lenient)
.map_err(config::Error::ConfigBoolean)?
- .unwrap_or_default();
+ .unwrap_or(true);
if is_disabled {
return Ok(None);
diff --git a/vendor/gix/src/reference/edits.rs b/vendor/gix/src/reference/edits.rs
index aadd087ba..c6510c2e0 100644
--- a/vendor/gix/src/reference/edits.rs
+++ b/vendor/gix/src/reference/edits.rs
@@ -25,7 +25,7 @@ pub mod set_target_id {
/// Note that the operation will fail on symbolic references, to change their type use the lower level reference database,
/// or if the reference was deleted or changed in the mean time.
/// Furthermore, refrain from using this method for more than a one-off change as it creates a transaction for each invocation.
- /// If multiple reference should be changed, use [Repository::edit_references()][crate::Repository::edit_references()]
+ /// If multiple reference should be changed, use [`Repository::edit_references()`][crate::Repository::edit_references()]
/// or the lower level reference database instead.
#[allow(clippy::result_large_err)]
pub fn set_target_id(
diff --git a/vendor/gix/src/reference/errors.rs b/vendor/gix/src/reference/errors.rs
index 364456fd1..a931b3974 100644
--- a/vendor/gix/src/reference/errors.rs
+++ b/vendor/gix/src/reference/errors.rs
@@ -2,7 +2,7 @@
pub mod edit {
use crate::config;
- /// The error returned by [edit_references(…)][crate::Repository::edit_references()], and others
+ /// The error returned by [`edit_references(…)`][crate::Repository::edit_references()], and others
/// which ultimately create a reference.
#[derive(Debug, thiserror::Error)]
#[allow(missing_docs)]
@@ -22,8 +22,8 @@ pub mod edit {
///
pub mod peel {
- /// The error returned by [Reference::peel_to_id_in_place(…)][crate::Reference::peel_to_id_in_place()] and
- /// [Reference::into_fully_peeled_id(…)][crate::Reference::into_fully_peeled_id()].
+ /// The error returned by [`Reference::peel_to_id_in_place(…)`][crate::Reference::peel_to_id_in_place()] and
+ /// [`Reference::into_fully_peeled_id(…)`][crate::Reference::into_fully_peeled_id()].
#[derive(Debug, thiserror::Error)]
#[allow(missing_docs)]
pub enum Error {
@@ -36,7 +36,7 @@ pub mod peel {
///
pub mod head_id {
- /// The error returned by [Repository::head_id(…)][crate::Repository::head_id()].
+ /// The error returned by [`Repository::head_id(…)`][crate::Repository::head_id()].
#[derive(Debug, thiserror::Error)]
#[allow(missing_docs)]
pub enum Error {
@@ -51,7 +51,7 @@ pub mod head_id {
///
pub mod head_commit {
- /// The error returned by [Repository::head_commit(…)][crate::Repository::head_commit()].
+ /// The error returned by [`Repository::head_commit`(…)][crate::Repository::head_commit()].
#[derive(Debug, thiserror::Error)]
#[allow(missing_docs)]
pub enum Error {
@@ -66,7 +66,7 @@ pub mod head_commit {
pub mod find {
///
pub mod existing {
- /// The error returned by [find_reference(…)][crate::Repository::find_reference()], and others.
+ /// The error returned by [`find_reference(…)`][crate::Repository::find_reference()], and others.
#[derive(Debug, thiserror::Error)]
#[allow(missing_docs)]
pub enum Error {
@@ -77,7 +77,7 @@ pub mod find {
}
}
- /// The error returned by [try_find_reference(…)][crate::Repository::try_find_reference()].
+ /// The error returned by [`try_find_reference(…)`][crate::Repository::try_find_reference()].
#[derive(Debug, thiserror::Error)]
#[allow(missing_docs)]
pub enum Error {
diff --git a/vendor/gix/src/reference/remote.rs b/vendor/gix/src/reference/remote.rs
index dd96892e2..d0c566302 100644
--- a/vendor/gix/src/reference/remote.rs
+++ b/vendor/gix/src/reference/remote.rs
@@ -4,7 +4,7 @@ use crate::{config, config::tree::Branch, remote, Reference};
impl<'repo> Reference<'repo> {
/// Find the unvalidated name of our remote for `direction` as configured in `branch.<name>.remote|pushRemote` respectively.
/// If `Some(<name>)` it can be used in [`Repository::find_remote(…)`][crate::Repository::find_remote()], or if `None` then
- /// [Repository::remote_default_name()][crate::Repository::remote_default_name()] could be used in its place.
+ /// [`Repository::remote_default_name()`][crate::Repository::remote_default_name()] could be used in its place.
///
/// Return `None` if no remote is configured.
///
diff --git a/vendor/gix/src/remote/connect.rs b/vendor/gix/src/remote/connect.rs
index 3dbd93486..63475b7c5 100644
--- a/vendor/gix/src/remote/connect.rs
+++ b/vendor/gix/src/remote/connect.rs
@@ -24,8 +24,8 @@ mod error {
Connect(#[from] gix_protocol::transport::client::connect::Error),
#[error("The {} url was missing - don't know where to establish a connection to", direction.as_str())]
MissingUrl { direction: remote::Direction },
- #[error("Protocol named {given:?} is not a valid protocol. Choose between 1 and 2")]
- UnknownProtocol { given: BString },
+ #[error("The given protocol version was invalid. Choose between 1 and 2")]
+ UnknownProtocol { source: config::key::GenericErrorWithValue },
#[error("Could not verify that \"{}\" url is a valid git directory before attempting to use it", url.to_bstring())]
FileUrl {
source: Box<gix_discover::is_git::Error>,
@@ -128,25 +128,9 @@ impl<'repo> Remote<'repo> {
Ok(url)
}
- use gix_protocol::transport::Protocol;
- let version = self
- .repo
- .config
- .resolved
- .integer("protocol", None, "version")
- .unwrap_or(Ok(2))
- .map_err(|err| Error::UnknownProtocol { given: err.input })
- .and_then(|num| {
- Ok(match num {
- 1 => Protocol::V1,
- 2 => Protocol::V2,
- num => {
- return Err(Error::UnknownProtocol {
- given: num.to_string().into(),
- })
- }
- })
- })?;
+ let version = crate::config::tree::Protocol::VERSION
+ .try_into_protocol_version(self.repo.config.resolved.integer("protocol", None, "version"))
+ .map_err(|err| Error::UnknownProtocol { source: err })?;
let url = self.url(direction).ok_or(Error::MissingUrl { direction })?.to_owned();
if !self.repo.config.url_scheme()?.allow(&url.scheme) {
diff --git a/vendor/gix/src/remote/connection/access.rs b/vendor/gix/src/remote/connection/access.rs
index eba603da0..932fdb09d 100644
--- a/vendor/gix/src/remote/connection/access.rs
+++ b/vendor/gix/src/remote/connection/access.rs
@@ -13,7 +13,7 @@ impl<'a, 'repo, T> Connection<'a, 'repo, T> {
///
/// A custom function may also be used to prevent accessing resources with authentication.
///
- /// Use the [configured_credentials()][Connection::configured_credentials()] method to obtain the implementation
+ /// Use the [`configured_credentials()`][Connection::configured_credentials()] method to obtain the implementation
/// that would otherwise be used, which can be useful to proxy the default configuration and obtain information about the
/// URLs to authenticate with.
pub fn with_credentials(
diff --git a/vendor/gix/src/remote/connection/fetch/error.rs b/vendor/gix/src/remote/connection/fetch/error.rs
index afcacca13..5034dcb5d 100644
--- a/vendor/gix/src/remote/connection/fetch/error.rs
+++ b/vendor/gix/src/remote/connection/fetch/error.rs
@@ -43,6 +43,8 @@ pub enum Error {
RejectShallowRemoteConfig(#[from] config::boolean::Error),
#[error("Receiving objects from shallow remotes is prohibited due to the value of `clone.rejectShallow`")]
RejectShallowRemote,
+ #[error(transparent)]
+ NegotiationAlgorithmConfig(#[from] config::key::GenericErrorWithValue),
}
impl gix_protocol::transport::IsSpuriousError for Error {
diff --git a/vendor/gix/src/remote/connection/fetch/mod.rs b/vendor/gix/src/remote/connection/fetch/mod.rs
index a51ae7c54..b4fe00935 100644
--- a/vendor/gix/src/remote/connection/fetch/mod.rs
+++ b/vendor/gix/src/remote/connection/fetch/mod.rs
@@ -43,6 +43,8 @@ impl RefLogMessage {
pub enum Status {
/// Nothing changed as the remote didn't have anything new compared to our tracking branches, thus no pack was received
/// and no new object was added.
+ ///
+ /// As we could determine that nothing changed without remote interaction, there was no negotiation at all.
NoPackReceived {
/// However, depending on the refspecs, references might have been updated nonetheless to point to objects as
/// reported by the remote.
@@ -50,6 +52,8 @@ pub enum Status {
},
/// There was at least one tip with a new object which we received.
Change {
+ /// The number of rounds it took to minimize the pack to contain only the objects we don't have.
+ negotiation_rounds: usize,
/// Information collected while writing the pack and its index.
write_pack_bundle: gix_pack::bundle::write::Outcome,
/// Information collected while updating references.
@@ -58,6 +62,8 @@ pub enum Status {
/// A dry run was performed which leaves the local repository without any change
/// nor will a pack have been received.
DryRun {
+ /// The number of rounds it took to minimize the *would-be-sent*-pack to contain only the objects we don't have.
+ negotiation_rounds: usize,
/// Information about what updates to refs would have been done.
update_refs: refs::update::Outcome,
},
@@ -91,8 +97,7 @@ impl From<ProgressId> for gix_features::progress::Id {
}
}
-///
-pub mod negotiate;
+pub(crate) mod negotiate;
///
pub mod prepare {
@@ -158,7 +163,7 @@ impl<'remote, 'repo, T> Prepare<'remote, 'repo, T>
where
T: Transport,
{
- /// Return the ref_map (that includes the server handshake) which was part of listing refs prior to fetching a pack.
+ /// Return the `ref_map` (that includes the server handshake) which was part of listing refs prior to fetching a pack.
pub fn ref_map(&self) -> &RefMap {
&self.ref_map
}
diff --git a/vendor/gix/src/remote/connection/fetch/negotiate.rs b/vendor/gix/src/remote/connection/fetch/negotiate.rs
index 771c5acba..e94461bab 100644
--- a/vendor/gix/src/remote/connection/fetch/negotiate.rs
+++ b/vendor/gix/src/remote/connection/fetch/negotiate.rs
@@ -1,11 +1,12 @@
-use crate::remote::fetch;
+use std::borrow::Cow;
-/// The way the negotiation is performed
-#[derive(Copy, Clone)]
-pub(crate) enum Algorithm {
- /// Our very own implementation that probably should be replaced by one of the known algorithms soon.
- Naive,
-}
+use gix_negotiate::Flags;
+use gix_odb::HeaderExt;
+use gix_pack::Find;
+
+use crate::remote::{fetch, fetch::Shallow};
+
+type Queue = gix_revision::PriorityQueue<gix_revision::graph::CommitterTimestamp, gix_hash::ObjectId>;
/// The error returned during negotiation.
#[derive(Debug, thiserror::Error)]
@@ -13,77 +14,336 @@ pub(crate) enum Algorithm {
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_revision::graph::lookup::commit::Error),
+ #[error(transparent)]
+ InitRefsIterator(#[from] crate::reference::iter::init::Error),
+ #[error(transparent)]
+ InitRefsIteratorPlatform(#[from] crate::reference::iter::Error),
+ #[error(transparent)]
+ ObtainRefDuringIteration(#[from] Box<dyn std::error::Error + Send + Sync + 'static>),
+ #[error(transparent)]
+ LoadIndex(#[from] gix_odb::store::load_index::Error),
}
-/// Negotiate one round with `algo` by looking at `ref_map` and adjust `arguments` to contain the haves and wants.
-/// If this is not the first round, the `previous_response` is set with the last recorded server response.
-/// Returns `true` if the negotiation is done from our side so the server won't keep asking.
-#[allow(clippy::too_many_arguments)]
-pub(crate) fn one_round(
- algo: Algorithm,
- round: usize,
+#[must_use]
+pub(crate) enum Action {
+ /// None of the remote refs moved compared to our last recorded state (via tracking refs), so there is nothing to do at all,
+ /// not even a ref update.
+ NoChange,
+ /// Don't negotiate, don't fetch the pack, skip right to updating the references.
+ ///
+ /// This happens if we already have all local objects even though the server seems to have changed.
+ SkipToRefUpdate,
+ /// We can't know for sure if fetching *is not* needed, so we go ahead and negotiate.
+ MustNegotiate {
+ /// Each `ref_map.mapping` has a slot here which is `true` if we have the object the remote ref points to locally.
+ remote_ref_target_known: Vec<bool>,
+ },
+}
+
+/// This function is modeled after the similarly named one in the git codebase to do the following:
+///
+/// * figure out all advertised refs on the remote *that we already have* and keep track of the oldest one as cutoff date.
+/// * mark all of our own refs as tips for a traversal.
+/// * mark all their parents, recursively, up to (and including) the cutoff date up to which we have seen the servers commit that we have.
+/// * pass all known-to-be-common-with-remote commits to the negotiator as common commits.
+///
+/// This is done so that we already find the most recent common commits, even if we are ahead, which is *potentially* better than
+/// what we would get if we would rely on tracking refs alone, particularly if one wouldn't trust the tracking refs for some reason.
+///
+/// Note that git doesn't trust its own tracking refs as the server *might* have changed completely, for instance by force-pushing, so
+/// marking our local tracking refs as known is something that's actually not proven to be correct so it's not done.
+///
+/// Additionally, it does what's done in `transport.c` and we check if a fetch is actually needed as at least one advertised ref changed.
+///
+/// Finally, we also mark tips in the `negotiator` in one go to avoid traversing all refs twice, since we naturally encounter all tips during
+/// our own walk.
+///
+/// Return whether or not we should negotiate, along with a queue for later use.
+pub(crate) fn mark_complete_and_common_ref(
repo: &crate::Repository,
- ref_map: &crate::remote::fetch::RefMap,
- fetch_tags: crate::remote::fetch::Tags,
- arguments: &mut gix_protocol::fetch::Arguments,
- _previous_response: Option<&gix_protocol::fetch::Response>,
- shallow: Option<&fetch::Shallow>,
-) -> Result<bool, Error> {
- let tag_refspec_to_ignore = fetch_tags
- .to_refspec()
- .filter(|_| matches!(fetch_tags, crate::remote::fetch::Tags::Included));
- if let Some(fetch::Shallow::Deepen(0)) = shallow {
+ negotiator: &mut dyn gix_negotiate::Negotiator,
+ graph: &mut gix_negotiate::Graph<'_>,
+ ref_map: &fetch::RefMap,
+ shallow: &fetch::Shallow,
+) -> Result<Action, Error> {
+ if let fetch::Shallow::Deepen(0) = shallow {
// Avoid deepening (relative) with zero as it seems to upset the server. Git also doesn't actually
// perform the negotiation for some reason (couldn't find it in code).
- return Ok(true);
+ return Ok(Action::NoChange);
+ }
+ if let Some(fetch::Mapping {
+ remote: fetch::Source::Ref(gix_protocol::handshake::Ref::Unborn { .. }),
+ ..
+ }) = ref_map.mappings.last().filter(|_| ref_map.mappings.len() == 1)
+ {
+ // There is only an unborn branch, as the remote has an empty repository. This means there is nothing to do except for
+ // possibly reproducing the unborn branch locally.
+ return Ok(Action::SkipToRefUpdate);
}
- match algo {
- Algorithm::Naive => {
- assert_eq!(round, 1, "Naive always finishes after the first round, it claims.");
- let mut has_missing_tracking_branch = false;
- for mapping in &ref_map.mappings {
- if tag_refspec_to_ignore.map_or(false, |tag_spec| {
- mapping
- .spec_index
- .implicit_index()
- .and_then(|idx| ref_map.extra_refspecs.get(idx))
- .map_or(false, |spec| spec.to_ref() == tag_spec)
- }) {
- continue;
- }
- let have_id = mapping.local.as_ref().and_then(|name| {
- repo.find_reference(name)
- .ok()
- .and_then(|r| r.target().try_id().map(ToOwned::to_owned))
- });
- match have_id {
- Some(have_id) => {
- if let Some(want_id) = mapping.remote.as_id() {
- if want_id != have_id {
- arguments.want(want_id);
- arguments.have(have_id);
- }
- }
- }
- None => {
- if let Some(want_id) = mapping.remote.as_id() {
- arguments.want(want_id);
- has_missing_tracking_branch = true;
- }
- }
- }
+ // Compute the cut-off date by checking which of the refs advertised (and matched in refspecs) by the remote we have,
+ // and keep the oldest one.
+ let mut cutoff_date = None::<gix_revision::graph::CommitterTimestamp>;
+ let mut num_mappings_with_change = 0;
+ let mut remote_ref_target_known: Vec<bool> = std::iter::repeat(false).take(ref_map.mappings.len()).collect();
+
+ for (mapping_idx, mapping) in ref_map.mappings.iter().enumerate() {
+ let want_id = mapping.remote.as_id();
+ let have_id = mapping.local.as_ref().and_then(|name| {
+ // this is the only time git uses the peer-id.
+ let r = repo.find_reference(name).ok()?;
+ r.target().try_id().map(ToOwned::to_owned)
+ });
+
+ // Like git, we don't let known unchanged mappings participate in the tree traversal
+ if want_id.zip(have_id).map_or(true, |(want, have)| want != have) {
+ num_mappings_with_change += 1;
+ }
+
+ if let Some(commit) = want_id
+ .and_then(|id| graph.try_lookup_or_insert_commit(id.into(), |_| {}).transpose())
+ .transpose()?
+ {
+ remote_ref_target_known[mapping_idx] = true;
+ cutoff_date = cutoff_date.unwrap_or_default().max(commit.commit_time).into();
+ } else if want_id.map_or(false, |maybe_annotated_tag| repo.objects.contains(maybe_annotated_tag)) {
+ remote_ref_target_known[mapping_idx] = true;
+ }
+ }
+
+ // If any kind of shallowing operation is desired, the server may still create a pack for us.
+ if matches!(shallow, Shallow::NoChange) {
+ if num_mappings_with_change == 0 {
+ return Ok(Action::NoChange);
+ } else if remote_ref_target_known.iter().all(|known| *known) {
+ return Ok(Action::SkipToRefUpdate);
+ }
+ }
+
+ // color our commits as complete as identified by references, unconditionally
+ // (`git` is conditional here based on `deepen`, but it doesn't make sense and it's hard to extract from history when that happened).
+ let mut queue = Queue::new();
+ mark_all_refs_in_repo(repo, graph, &mut queue, Flags::COMPLETE)?;
+ mark_alternate_complete(repo, graph, &mut queue)?;
+ // Keep track of the tips, which happen to be on our queue right, before we traverse the graph with cutoff.
+ let tips = if let Some(cutoff) = cutoff_date {
+ let tips = Cow::Owned(queue.clone());
+ // color all their parents up to the cutoff date, the oldest commit we know the server has.
+ mark_recent_complete_commits(&mut queue, graph, cutoff)?;
+ tips
+ } else {
+ Cow::Borrowed(&queue)
+ };
+
+ // mark all complete advertised refs as common refs.
+ for mapping in ref_map
+ .mappings
+ .iter()
+ .zip(remote_ref_target_known.iter().copied())
+ // We need this filter as the graph wouldn't contain annotated tags.
+ .filter_map(|(mapping, known)| (!known).then_some(mapping))
+ {
+ let want_id = mapping.remote.as_id();
+ if let Some(common_id) = want_id
+ .and_then(|id| graph.get(id).map(|c| (c, id)))
+ .filter(|(c, _)| c.data.flags.contains(Flags::COMPLETE))
+ .map(|(_, id)| id)
+ {
+ negotiator.known_common(common_id.into(), graph)?;
+ }
+ }
+
+ // As negotiators currently may rely on getting `known_common` calls first and tips after, we adhere to that which is the only
+ // reason we cached the set of tips.
+ for tip in tips.iter_unordered() {
+ negotiator.add_tip(*tip, graph)?;
+ }
+
+ Ok(Action::MustNegotiate {
+ remote_ref_target_known,
+ })
+}
+
+/// Add all `wants` to `arguments`, which is the unpeeled direct target that the advertised remote ref points to.
+pub(crate) fn add_wants(
+ repo: &crate::Repository,
+ arguments: &mut gix_protocol::fetch::Arguments,
+ ref_map: &fetch::RefMap,
+ mapping_known: &[bool],
+ shallow: &fetch::Shallow,
+ fetch_tags: fetch::Tags,
+) {
+ // With included tags, we have to keep mappings of tags to handle them later when updating refs, but we don't want to
+ // explicitly `want` them as the server will determine by itself which tags are pointing to a commit it wants to send.
+ // If we would not exclude implicit tag mappings like this, we would get too much of the graph.
+ let tag_refspec_to_ignore = matches!(fetch_tags, crate::remote::fetch::Tags::Included)
+ .then(|| fetch_tags.to_refspec())
+ .flatten();
+
+ // When using shallow, we can't exclude `wants` as the remote won't send anything then. Thus we have to resend everything
+ // we have as want instead to get exactly the same graph, but possibly deepened.
+ let is_shallow = !matches!(shallow, fetch::Shallow::NoChange);
+ let wants = ref_map
+ .mappings
+ .iter()
+ .zip(mapping_known)
+ .filter_map(|(m, known)| (is_shallow || !*known).then_some(m));
+ for want in wants {
+ // Here we ignore implicit tag mappings if needed.
+ if tag_refspec_to_ignore.map_or(false, |tag_spec| {
+ want.spec_index
+ .implicit_index()
+ .and_then(|idx| ref_map.extra_refspecs.get(idx))
+ .map_or(false, |spec| spec.to_ref() == tag_spec)
+ }) {
+ continue;
+ }
+ let id_on_remote = want.remote.as_id();
+ if !arguments.can_use_ref_in_want() || matches!(want.remote, fetch::Source::ObjectId(_)) {
+ if let Some(id) = id_on_remote {
+ arguments.want(id);
}
+ } else {
+ arguments.want_ref(
+ want.remote
+ .as_name()
+ .expect("name available if this isn't an object id"),
+ )
+ }
+ let id_is_annotated_tag_we_have = id_on_remote
+ .and_then(|id| repo.objects.header(id).ok().map(|h| (id, h)))
+ .filter(|(_, h)| h.kind() == gix_object::Kind::Tag)
+ .map(|(id, _)| id);
+ if let Some(tag_on_remote) = id_is_annotated_tag_we_have {
+ // Annotated tags are not handled at all by negotiators in the commit-graph - they only see commits and thus won't
+ // ever add `have`s for tags. To correct for that, we add these haves here to avoid getting them sent again.
+ arguments.have(tag_on_remote)
+ }
+ }
+}
- if has_missing_tracking_branch || (shallow.is_some() && arguments.is_empty()) {
- if let Ok(Some(r)) = repo.head_ref() {
- if let Some(id) = r.target().try_id() {
- arguments.have(id);
- arguments.want(id);
+/// Remove all commits that are more recent than the cut-off, which is the commit time of the oldest common commit we have with the server.
+fn mark_recent_complete_commits(
+ queue: &mut Queue,
+ graph: &mut gix_negotiate::Graph<'_>,
+ cutoff: gix_revision::graph::CommitterTimestamp,
+) -> Result<(), Error> {
+ while let Some(id) = queue
+ .peek()
+ .and_then(|(commit_time, id)| (commit_time >= &cutoff).then_some(*id))
+ {
+ queue.pop();
+ let commit = graph.get(&id).expect("definitely set when adding tips or parents");
+ for parent_id in commit.parents.clone() {
+ let mut was_complete = false;
+ if let Some(parent) = graph
+ .try_lookup_or_insert_commit(parent_id, |md| {
+ was_complete = md.flags.contains(Flags::COMPLETE);
+ md.flags |= Flags::COMPLETE
+ })?
+ .filter(|_| !was_complete)
+ {
+ queue.insert(parent.commit_time, parent_id)
+ }
+ }
+ }
+ Ok(())
+}
+
+fn mark_all_refs_in_repo(
+ repo: &crate::Repository,
+ graph: &mut gix_negotiate::Graph<'_>,
+ queue: &mut Queue,
+ mark: Flags,
+) -> Result<(), Error> {
+ for local_ref in repo.references()?.all()?.peeled() {
+ let local_ref = local_ref?;
+ let id = local_ref.id().detach();
+ let mut is_complete = false;
+ if let Some(commit) = graph
+ .try_lookup_or_insert_commit(id, |md| {
+ is_complete = md.flags.contains(Flags::COMPLETE);
+ md.flags |= mark
+ })?
+ .filter(|_| !is_complete)
+ {
+ queue.insert(commit.commit_time, id);
+ };
+ }
+ Ok(())
+}
+
+fn mark_alternate_complete(
+ repo: &crate::Repository,
+ graph: &mut gix_negotiate::Graph<'_>,
+ queue: &mut Queue,
+) -> Result<(), Error> {
+ for alternate_repo in repo
+ .objects
+ .store_ref()
+ .alternate_db_paths()?
+ .into_iter()
+ .filter_map(|path| {
+ path.ancestors()
+ .nth(1)
+ .and_then(|git_dir| crate::open_opts(git_dir, repo.options.clone()).ok())
+ })
+ {
+ mark_all_refs_in_repo(&alternate_repo, graph, queue, Flags::ALTERNATE | Flags::COMPLETE)?;
+ }
+ Ok(())
+}
+
+/// Negotiate the nth `round` with `negotiator` sending `haves_to_send` after possibly making the known common commits
+/// as sent by the remote known to `negotiator` using `previous_response` if this isn't the first round.
+/// All `haves` are added to `arguments` accordingly.
+/// Returns the amount of haves actually sent.
+pub(crate) fn one_round(
+ negotiator: &mut dyn gix_negotiate::Negotiator,
+ graph: &mut gix_negotiate::Graph<'_>,
+ haves_to_send: usize,
+ arguments: &mut gix_protocol::fetch::Arguments,
+ previous_response: Option<&gix_protocol::fetch::Response>,
+ mut common: Option<&mut Vec<gix_hash::ObjectId>>,
+) -> Result<(usize, bool), Error> {
+ let mut seen_ack = false;
+ if let Some(response) = previous_response {
+ use gix_protocol::fetch::response::Acknowledgement;
+ for ack in response.acknowledgements() {
+ match ack {
+ Acknowledgement::Common(id) => {
+ seen_ack = true;
+ negotiator.in_common_with_remote(*id, graph)?;
+ if let Some(ref mut common) = common {
+ common.push(*id);
}
}
+ Acknowledgement::Ready => {
+ // NOTE: In git, there is some logic dealing with whether to expect a DELIM or FLUSH package,
+ // but we handle this with peeking.
+ }
+ Acknowledgement::Nak => {}
}
- Ok(true)
}
}
+
+ // `common` is set only if this is a stateless transport, and we repeat previously confirmed common commits as HAVE, because
+ // we are not going to repeat them otherwise.
+ if let Some(common) = common {
+ for have_id in common {
+ arguments.have(have_id);
+ }
+ }
+
+ let mut haves_sent = 0;
+ for have_id in (0..haves_to_send).map_while(|_| negotiator.next_have(graph)) {
+ arguments.have(have_id?);
+ haves_sent += 1;
+ }
+ // Note that we are differing from the git implementation, which does an extra-round of with no new haves sent at all.
+ // For us it seems better to just say we are done when we know we are done, as potentially additional acks won't affect the
+ // queue of any of our implementation at all (so the negotiator won't come up with more haves next time either).
+ Ok((haves_sent, seen_ack))
}
diff --git a/vendor/gix/src/remote/connection/fetch/receive_pack.rs b/vendor/gix/src/remote/connection/fetch/receive_pack.rs
index 99560fbca..7837a9d3a 100644
--- a/vendor/gix/src/remote/connection/fetch/receive_pack.rs
+++ b/vendor/gix/src/remote/connection/fetch/receive_pack.rs
@@ -1,18 +1,26 @@
-use std::sync::atomic::{AtomicBool, Ordering};
+use std::{
+ ops::DerefMut,
+ sync::atomic::{AtomicBool, Ordering},
+};
-use gix_odb::FindExt;
+use gix_odb::{store::RefreshMode, FindExt};
use gix_protocol::{
fetch::Arguments,
transport::{client::Transport, packetline::read::ProgressAction},
};
use crate::{
- config::tree::Clone,
+ config::{
+ cache::util::ApplyLeniency,
+ tree::{Clone, Fetch, Key},
+ },
remote,
remote::{
connection::fetch::config,
fetch,
- fetch::{negotiate, refs, Error, Outcome, Prepare, ProgressId, RefLogMessage, Shallow, Status},
+ fetch::{
+ negotiate, negotiate::Algorithm, refs, Error, Outcome, Prepare, ProgressId, RefLogMessage, Shallow, Status,
+ },
},
Progress, Repository,
};
@@ -99,9 +107,6 @@ where
}
let (shallow_commits, mut shallow_lock) = add_shallow_args(&mut arguments, &self.shallow, repo)?;
- let mut previous_response = None::<gix_protocol::fetch::Response>;
- let mut round = 1;
-
if self.ref_map.object_hash != repo.object_hash() {
return Err(Error::IncompatibleObjectHash {
local: repo.object_hash(),
@@ -109,118 +114,161 @@ where
});
}
- let reader = 'negotiation: loop {
- progress.step();
- progress.set_name(format!("negotiate (round {round})"));
-
- let is_done = match negotiate::one_round(
- negotiate::Algorithm::Naive,
- round,
- repo,
- &self.ref_map,
- con.remote.fetch_tags,
- &mut arguments,
- previous_response.as_ref(),
- (self.shallow != Shallow::NoChange).then_some(&self.shallow),
- ) {
- Ok(_) if arguments.is_empty() => {
- gix_protocol::indicate_end_of_interaction(&mut con.transport).await.ok();
- let update_refs = refs::update(
- repo,
- self.reflog_message
- .take()
- .unwrap_or_else(|| RefLogMessage::Prefixed { action: "fetch".into() }),
- &self.ref_map.mappings,
- con.remote.refspecs(remote::Direction::Fetch),
- &self.ref_map.extra_refspecs,
- con.remote.fetch_tags,
- self.dry_run,
- self.write_packed_refs,
- )?;
- return Ok(Outcome {
- ref_map: std::mem::take(&mut self.ref_map),
- status: Status::NoPackReceived { update_refs },
- });
- }
- Ok(is_done) => is_done,
- Err(err) => {
- gix_protocol::indicate_end_of_interaction(&mut con.transport).await.ok();
- return Err(err.into());
- }
- };
- round += 1;
- let mut reader = arguments.send(&mut con.transport, is_done).await?;
- if sideband_all {
- setup_remote_progress(progress, &mut reader, should_interrupt);
- }
- let response = gix_protocol::fetch::Response::from_line_reader(protocol_version, &mut reader).await?;
- if response.has_pack() {
- progress.step();
- progress.set_name("receiving pack");
- if !sideband_all {
- setup_remote_progress(progress, &mut reader, should_interrupt);
- }
- previous_response = Some(response);
- break 'negotiation reader;
- } else {
- previous_response = Some(response);
- }
+ let mut negotiator = repo
+ .config
+ .resolved
+ .string_by_key(Fetch::NEGOTIATION_ALGORITHM.logical_name().as_str())
+ .map(|n| Fetch::NEGOTIATION_ALGORITHM.try_into_negotiation_algorithm(n))
+ .transpose()
+ .with_leniency(repo.config.lenient_config)?
+ .unwrap_or(Algorithm::Consecutive)
+ .into_negotiator();
+ let graph_repo = {
+ let mut r = repo.clone();
+ // assure that checking for unknown server refs doesn't trigger ODB refreshes.
+ r.objects.refresh = RefreshMode::Never;
+ // we cache everything of importance in the graph and thus don't need an object cache.
+ r.objects.unset_object_cache();
+ r
};
- let previous_response = previous_response.expect("knowledge of a pack means a response was received");
- if !previous_response.shallow_updates().is_empty() && shallow_lock.is_none() {
- let reject_shallow_remote = repo
- .config
- .resolved
- .boolean_filter_by_key("clone.rejectShallow", &mut repo.filter_config_section())
- .map(|val| Clone::REJECT_SHALLOW.enrich_error(val))
- .transpose()?
- .unwrap_or(false);
- if reject_shallow_remote {
- return Err(Error::RejectShallowRemote);
+ let mut graph = graph_repo.commit_graph();
+ let action = negotiate::mark_complete_and_common_ref(
+ &graph_repo,
+ negotiator.deref_mut(),
+ &mut graph,
+ &self.ref_map,
+ &self.shallow,
+ )?;
+ let mut previous_response = None::<gix_protocol::fetch::Response>;
+ let mut round = 1;
+ let mut write_pack_bundle = match &action {
+ negotiate::Action::NoChange | negotiate::Action::SkipToRefUpdate => {
+ gix_protocol::indicate_end_of_interaction(&mut con.transport).await.ok();
+ None
}
- shallow_lock = acquire_shallow_lock(repo).map(Some)?;
- }
+ negotiate::Action::MustNegotiate {
+ remote_ref_target_known,
+ } => {
+ negotiate::add_wants(
+ repo,
+ &mut arguments,
+ &self.ref_map,
+ remote_ref_target_known,
+ &self.shallow,
+ con.remote.fetch_tags,
+ );
+ let is_stateless =
+ arguments.is_stateless(!con.transport.connection_persists_across_multiple_requests());
+ let mut haves_to_send = gix_negotiate::window_size(is_stateless, None);
+ let mut seen_ack = false;
+ let mut in_vain = 0;
+ let mut common = is_stateless.then(Vec::new);
+ let reader = 'negotiation: loop {
+ progress.step();
+ progress.set_name(format!("negotiate (round {round})"));
- let options = gix_pack::bundle::write::Options {
- thread_limit: config::index_threads(repo)?,
- index_version: config::pack_index_version(repo)?,
- iteration_mode: gix_pack::data::input::Mode::Verify,
- object_hash: con.remote.repo.object_hash(),
- };
+ let is_done = match negotiate::one_round(
+ negotiator.deref_mut(),
+ &mut graph,
+ haves_to_send,
+ &mut arguments,
+ previous_response.as_ref(),
+ common.as_mut(),
+ ) {
+ Ok((haves_sent, ack_seen)) => {
+ if ack_seen {
+ in_vain = 0;
+ }
+ seen_ack |= ack_seen;
+ in_vain += haves_sent;
+ let is_done = haves_sent != haves_to_send || (seen_ack && in_vain >= 256);
+ haves_to_send = gix_negotiate::window_size(is_stateless, haves_to_send);
+ is_done
+ }
+ Err(err) => {
+ gix_protocol::indicate_end_of_interaction(&mut con.transport).await.ok();
+ return Err(err.into());
+ }
+ };
+ let mut reader = arguments.send(&mut con.transport, is_done).await?;
+ 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 has_pack = response.has_pack();
+ previous_response = Some(response);
+ if has_pack {
+ progress.step();
+ progress.set_name("receiving pack");
+ if !sideband_all {
+ setup_remote_progress(progress, &mut reader, should_interrupt);
+ }
+ break 'negotiation reader;
+ } else {
+ round += 1;
+ }
+ };
+ drop(graph);
+ drop(graph_repo);
+ let previous_response = previous_response.expect("knowledge of a pack means a response was received");
+ if !previous_response.shallow_updates().is_empty() && shallow_lock.is_none() {
+ let reject_shallow_remote = repo
+ .config
+ .resolved
+ .boolean_filter_by_key("clone.rejectShallow", &mut repo.filter_config_section())
+ .map(|val| Clone::REJECT_SHALLOW.enrich_error(val))
+ .transpose()?
+ .unwrap_or(false);
+ if reject_shallow_remote {
+ return Err(Error::RejectShallowRemote);
+ }
+ shallow_lock = acquire_shallow_lock(repo).map(Some)?;
+ }
- let mut write_pack_bundle = if matches!(self.dry_run, fetch::DryRun::No) {
- Some(gix_pack::Bundle::write_to_directory(
- #[cfg(feature = "async-network-client")]
- {
- gix_protocol::futures_lite::io::BlockOn::new(reader)
- },
- #[cfg(not(feature = "async-network-client"))]
- {
- reader
- },
- Some(repo.objects.store_ref().path().join("pack")),
- progress,
- should_interrupt,
- Some(Box::new({
- let repo = repo.clone();
- move |oid, buf| repo.objects.find(oid, buf).ok()
- })),
- options,
- )?)
- } else {
- drop(reader);
- None
- };
+ let options = gix_pack::bundle::write::Options {
+ thread_limit: config::index_threads(repo)?,
+ index_version: config::pack_index_version(repo)?,
+ iteration_mode: gix_pack::data::input::Mode::Verify,
+ object_hash: con.remote.repo.object_hash(),
+ };
- if matches!(protocol_version, gix_protocol::transport::Protocol::V2) {
- gix_protocol::indicate_end_of_interaction(&mut con.transport).await.ok();
- }
+ let write_pack_bundle = if matches!(self.dry_run, fetch::DryRun::No) {
+ Some(gix_pack::Bundle::write_to_directory(
+ #[cfg(feature = "async-network-client")]
+ {
+ gix_protocol::futures_lite::io::BlockOn::new(reader)
+ },
+ #[cfg(not(feature = "async-network-client"))]
+ {
+ reader
+ },
+ Some(repo.objects.store_ref().path().join("pack")),
+ progress,
+ should_interrupt,
+ Some(Box::new({
+ let repo = repo.clone();
+ move |oid, buf| repo.objects.find(oid, buf).ok()
+ })),
+ options,
+ )?)
+ } else {
+ drop(reader);
+ None
+ };
+
+ if matches!(protocol_version, gix_protocol::transport::Protocol::V2) {
+ gix_protocol::indicate_end_of_interaction(&mut con.transport).await.ok();
+ }
- if let Some(shallow_lock) = shallow_lock {
- if !previous_response.shallow_updates().is_empty() {
- crate::shallow::write(shallow_lock, shallow_commits, previous_response.shallow_updates())?;
+ if let Some(shallow_lock) = shallow_lock {
+ if !previous_response.shallow_updates().is_empty() {
+ crate::shallow::write(shallow_lock, shallow_commits, previous_response.shallow_updates())?;
+ }
+ }
+ write_pack_bundle
}
- }
+ };
let update_refs = refs::update(
repo,
@@ -243,16 +291,26 @@ where
}
}
- Ok(Outcome {
+ let out = Outcome {
ref_map: std::mem::take(&mut self.ref_map),
- status: match write_pack_bundle {
- Some(write_pack_bundle) => Status::Change {
- write_pack_bundle,
+ status: if matches!(self.dry_run, fetch::DryRun::Yes) {
+ assert!(write_pack_bundle.is_none(), "in dry run we never read a bundle");
+ Status::DryRun {
update_refs,
- },
- None => Status::DryRun { update_refs },
+ negotiation_rounds: round,
+ }
+ } else {
+ match write_pack_bundle {
+ Some(write_pack_bundle) => Status::Change {
+ write_pack_bundle,
+ update_refs,
+ negotiation_rounds: round,
+ },
+ None => Status::NoPackReceived { update_refs },
+ }
},
- })
+ };
+ Ok(out)
}
}
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 145990ac8..47ab5d1a5 100644
--- a/vendor/gix/src/remote/connection/fetch/update_refs/tests.rs
+++ b/vendor/gix/src/remote/connection/fetch/update_refs/tests.rs
@@ -140,7 +140,7 @@ mod update {
&specs,
&[],
fetch::Tags::None,
- reflog_message.map(|_| fetch::DryRun::Yes).unwrap_or(fetch::DryRun::No),
+ reflog_message.map_or(fetch::DryRun::No, |_| fetch::DryRun::Yes),
fetch::WritePackedRefs::Never,
)
.unwrap();
@@ -153,7 +153,7 @@ mod update {
}],
"{spec:?}: {detail}"
);
- assert_eq!(out.edits.len(), reflog_message.map(|_| 1).unwrap_or(0));
+ assert_eq!(out.edits.len(), reflog_message.map_or(0, |_| 1));
if let Some(reflog_message) = reflog_message {
let edit = &out.edits[0];
match &edit.change {
@@ -559,13 +559,13 @@ mod update {
.mappings
.into_iter()
.map(|m| fetch::Mapping {
- remote: m
- .item_index
- .map(|idx| fetch::Source::Ref(references[idx].clone()))
- .unwrap_or_else(|| match m.lhs {
+ remote: m.item_index.map_or_else(
+ || match m.lhs {
gix_refspec::match_group::SourceRef::ObjectId(id) => fetch::Source::ObjectId(id),
_ => unreachable!("not a ref, must be id: {:?}", m),
- }),
+ },
+ |idx| fetch::Source::Ref(references[idx].clone()),
+ ),
local: m.rhs.map(|r| r.into_owned()),
spec_index: SpecIndex::ExplicitInRemote(m.spec_index),
})
diff --git a/vendor/gix/src/remote/connection/ref_map.rs b/vendor/gix/src/remote/connection/ref_map.rs
index abf9c8e00..95ddb6214 100644
--- a/vendor/gix/src/remote/connection/ref_map.rs
+++ b/vendor/gix/src/remote/connection/ref_map.rs
@@ -148,15 +148,15 @@ where
let mappings = mappings
.into_iter()
.map(|m| fetch::Mapping {
- remote: m
- .item_index
- .map(|idx| fetch::Source::Ref(remote.refs[idx].clone()))
- .unwrap_or_else(|| {
+ remote: m.item_index.map_or_else(
+ || {
fetch::Source::ObjectId(match m.lhs {
gix_refspec::match_group::SourceRef::ObjectId(id) => id,
_ => unreachable!("no item index implies having an object id"),
})
- }),
+ },
+ |idx| fetch::Source::Ref(remote.refs[idx].clone()),
+ ),
local: m.rhs.map(|c| c.into_owned()),
spec_index: if m.spec_index < num_explicit_specs {
SpecIndex::ExplicitInRemote(m.spec_index)
@@ -191,11 +191,10 @@ where
let authenticate = match self.authenticate.as_mut() {
Some(f) => f,
None => {
- let url = self
- .remote
- .url(Direction::Fetch)
- .map(ToOwned::to_owned)
- .unwrap_or_else(|| gix_url::parse(url.as_ref()).expect("valid URL to be provided by transport"));
+ let url = self.remote.url(Direction::Fetch).map_or_else(
+ || gix_url::parse(url.as_ref()).expect("valid URL to be provided by transport"),
+ ToOwned::to_owned,
+ );
credentials_storage = self.configured_credentials(url)?;
&mut credentials_storage
}
diff --git a/vendor/gix/src/remote/fetch.rs b/vendor/gix/src/remote/fetch.rs
index 0001447cb..0947ace3f 100644
--- a/vendor/gix/src/remote/fetch.rs
+++ b/vendor/gix/src/remote/fetch.rs
@@ -1,3 +1,18 @@
+///
+pub mod negotiate {
+ pub use gix_negotiate::Algorithm;
+
+ #[cfg(any(feature = "blocking-network-client", feature = "async-network-client"))]
+ pub use super::super::connection::fetch::negotiate::Error;
+ #[cfg(any(feature = "blocking-network-client", feature = "async-network-client"))]
+ pub(crate) use super::super::connection::fetch::negotiate::{
+ add_wants, mark_complete_and_common_ref, one_round, Action,
+ };
+}
+
+#[cfg(any(feature = "blocking-network-client", feature = "async-network-client"))]
+pub use super::connection::fetch::{prepare, refs, Error, Outcome, Prepare, ProgressId, RefLogMessage, Status};
+
/// If `Yes`, don't really make changes but do as much as possible to get an idea of what would be done.
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
#[cfg(any(feature = "blocking-network-client", feature = "async-network-client"))]
@@ -53,6 +68,8 @@ impl Tags {
#[derive(Default, Debug, Clone, PartialEq, Eq)]
pub enum Shallow {
/// Fetch all changes from the remote without affecting the shallow boundary at all.
+ ///
+ /// This also means that repositories that aren't shallow will remain like that.
#[default]
NoChange,
/// Receive update to `depth` commits in the history of the refs to fetch (from the viewpoint of the remote),
@@ -126,7 +143,7 @@ pub enum Source {
#[cfg(any(feature = "blocking-network-client", feature = "async-network-client"))]
impl Source {
/// Return either the direct object id we refer to or the direct target that a reference refers to.
- /// The latter may be a direct or a symbolic reference, and we degenerate this to the peeled object id.
+ /// The latter may be a direct or a symbolic reference.
/// If unborn, `None` is returned.
pub fn as_id(&self) -> Option<&gix_hash::oid> {
match self {
@@ -135,6 +152,17 @@ impl Source {
}
}
+ /// Returns the peeled id of this instance, that is the object that can't be de-referenced anymore.
+ pub fn peeled_id(&self) -> Option<&gix_hash::oid> {
+ match self {
+ Source::ObjectId(id) => Some(id),
+ Source::Ref(r) => {
+ let (_name, target, peeled) = r.unpack();
+ peeled.or(target)
+ }
+ }
+ }
+
/// Return ourselves as the full name of the reference we represent, or `None` if this source isn't a reference but an object.
pub fn as_name(&self) -> Option<&crate::bstr::BStr> {
match self {
@@ -195,8 +223,3 @@ pub struct Mapping {
/// The index into the fetch ref-specs used to produce the mapping, allowing it to be recovered.
pub spec_index: SpecIndex,
}
-
-#[cfg(any(feature = "blocking-network-client", feature = "async-network-client"))]
-pub use super::connection::fetch::{
- negotiate, prepare, refs, Error, Outcome, Prepare, ProgressId, RefLogMessage, Status,
-};
diff --git a/vendor/gix/src/repository/config/mod.rs b/vendor/gix/src/repository/config/mod.rs
index 92b2618cc..e5c8b64f3 100644
--- a/vendor/gix/src/repository/config/mod.rs
+++ b/vendor/gix/src/repository/config/mod.rs
@@ -155,7 +155,7 @@ mod branch {
/// In some cases, the returned name will be an URL.
/// Returns `None` if the remote was not found or if the name contained illformed UTF-8.
///
- /// See also [Reference::remote_name()][crate::Reference::remote_name()] for a more typesafe version
+ /// See also [`Reference::remote_name()`][crate::Reference::remote_name()] for a more typesafe version
/// to be used when a `Reference` is available.
pub fn branch_remote_name<'a>(
&self,
diff --git a/vendor/gix/src/repository/graph.rs b/vendor/gix/src/repository/graph.rs
new file mode 100644
index 000000000..a1f6c7f89
--- /dev/null
+++ b/vendor/gix/src/repository/graph.rs
@@ -0,0 +1,24 @@
+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.
+ ///
+ /// Note that the commitgraph will be used if it is present and readable, but it won't be an error if it is corrupted. In that case,
+ /// it will just not be used.
+ ///
+ /// ### Performance
+ ///
+ /// Note that the [Graph][gix_revision::Graph] can be sensitive to various object database settings that may affect the performance
+ /// of the commit walk.
+ pub fn commit_graph<T>(&self) -> gix_revision::Graph<'_, T> {
+ gix_revision::Graph::new(
+ |id, buf| {
+ self.objects
+ .try_find(id, buf)
+ .map(|r| r.and_then(|d| d.try_into_commit_iter()))
+ },
+ gix_commitgraph::at(self.objects.store_ref().path().join("info")).ok(),
+ )
+ }
+}
diff --git a/vendor/gix/src/repository/init.rs b/vendor/gix/src/repository/init.rs
index 16659a013..255ff90d6 100644
--- a/vendor/gix/src/repository/init.rs
+++ b/vendor/gix/src/repository/init.rs
@@ -37,7 +37,12 @@ fn setup_objects(mut objects: crate::OdbHandle, config: &crate::config::Cache) -
#[cfg(feature = "max-performance-safe")]
{
match config.pack_cache_bytes {
- None => objects.set_pack_cache(|| Box::<gix_pack::cache::lru::StaticLinkedList<64>>::default()),
+ None => match config.static_pack_cache_limit_bytes {
+ None => objects.set_pack_cache(|| Box::<gix_pack::cache::lru::StaticLinkedList<64>>::default()),
+ Some(limit) => {
+ objects.set_pack_cache(move || Box::new(gix_pack::cache::lru::StaticLinkedList::<64>::new(limit)))
+ }
+ },
Some(0) => objects.unset_pack_cache(),
Some(bytes) => objects.set_pack_cache(move || -> Box<gix_odb::cache::PackCache> {
Box::new(gix_pack::cache::lru::MemoryCappedHashmap::new(bytes))
diff --git a/vendor/gix/src/kind.rs b/vendor/gix/src/repository/kind.rs
index a8213475f..88779e0cc 100644
--- a/vendor/gix/src/kind.rs
+++ b/vendor/gix/src/repository/kind.rs
@@ -1,4 +1,4 @@
-use crate::Kind;
+use crate::repository::Kind;
impl Kind {
/// Returns true if this is a bare repository, one without a work tree.
diff --git a/vendor/gix/src/repository/location.rs b/vendor/gix/src/repository/location.rs
index 0bb8ea253..3e2ff907c 100644
--- a/vendor/gix/src/repository/location.rs
+++ b/vendor/gix/src/repository/location.rs
@@ -69,18 +69,18 @@ impl crate::Repository {
}
/// Return the kind of repository, either bare or one with a work tree.
- pub fn kind(&self) -> crate::Kind {
+ pub fn kind(&self) -> crate::repository::Kind {
match self.worktree() {
Some(wt) => {
if gix_discover::is_submodule_git_dir(self.git_dir()) {
- crate::Kind::Submodule
+ crate::repository::Kind::Submodule
} else {
- crate::Kind::WorkTree {
+ crate::repository::Kind::WorkTree {
is_linked: !wt.is_main(),
}
}
}
- None => crate::Kind::Bare,
+ None => crate::repository::Kind::Bare,
}
}
}
diff --git a/vendor/gix/src/repository/mod.rs b/vendor/gix/src/repository/mod.rs
index 5b7a70d3b..f8a51e8d0 100644
--- a/vendor/gix/src/repository/mod.rs
+++ b/vendor/gix/src/repository/mod.rs
@@ -1,5 +1,19 @@
//!
+/// The kind of repository.
+#[derive(Debug, Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Hash)]
+pub enum Kind {
+ /// A submodule worktree, whose `git` repository lives in `.git/modules/**/<name>` of the parent repository.
+ Submodule,
+ /// A bare repository does not have a work tree, that is files on disk beyond the `git` repository itself.
+ Bare,
+ /// A `git` repository along with a checked out files in a work tree.
+ WorkTree {
+ /// If true, this is the git dir associated with this _linked_ worktree, otherwise it is a repository with _main_ worktree.
+ is_linked: bool,
+ },
+}
+
/// Internal
impl crate::Repository {
#[inline]
@@ -23,9 +37,11 @@ mod attributes;
mod cache;
mod config;
mod excludes;
+mod graph;
pub(crate) mod identity;
mod impls;
mod init;
+mod kind;
mod location;
mod object;
mod reference;
diff --git a/vendor/gix/src/repository/object.rs b/vendor/gix/src/repository/object.rs
index f4592475f..787dcda4e 100644
--- a/vendor/gix/src/repository/object.rs
+++ b/vendor/gix/src/repository/object.rs
@@ -1,6 +1,5 @@
#![allow(clippy::result_large_err)]
-use std::convert::TryInto;
-use std::ops::DerefMut;
+use std::{convert::TryInto, ops::DerefMut};
use gix_hash::ObjectId;
use gix_odb::{Find, FindExt, Write};
diff --git a/vendor/gix/src/repository/remote.rs b/vendor/gix/src/repository/remote.rs
index e3f210899..74ebbaea0 100644
--- a/vendor/gix/src/repository/remote.rs
+++ b/vendor/gix/src/repository/remote.rs
@@ -42,7 +42,7 @@ impl crate::Repository {
/// Find the default remote as configured, or `None` if no such configuration could be found.
///
- /// See [remote_default_name()][Self::remote_default_name()] for more information on the `direction` parameter.
+ /// See [`remote_default_name()`][Self::remote_default_name()] for more information on the `direction` parameter.
pub fn find_default_remote(
&self,
direction: remote::Direction,
@@ -65,7 +65,7 @@ impl crate::Repository {
self.try_find_remote_inner(name_or_url, true)
}
- /// Similar to [try_find_remote()][Self::try_find_remote()], but removes a failure mode if rewritten URLs turn out to be invalid
+ /// Similar to [`try_find_remote()`][Self::try_find_remote()], but removes a failure mode if rewritten URLs turn out to be invalid
/// as it skips rewriting them.
/// Use this in conjunction with [`Remote::rewrite_urls()`] to non-destructively apply the rules and keep the failed urls unchanged.
pub fn try_find_remote_without_url_rewrite<'a>(
diff --git a/vendor/gix/src/repository/snapshots.rs b/vendor/gix/src/repository/snapshots.rs
index 6933dc9c6..96de5080d 100644
--- a/vendor/gix/src/repository/snapshots.rs
+++ b/vendor/gix/src/repository/snapshots.rs
@@ -104,6 +104,6 @@ impl crate::Repository {
target.merge(gix_mailmap::parse_ignore_errors(&buf));
}
- err.map(Err).unwrap_or(Ok(()))
+ err.map_or(Ok(()), Err)
}
}
diff --git a/vendor/gix/src/repository/thread_safe.rs b/vendor/gix/src/repository/thread_safe.rs
index 7c89aee60..ea7cedf9d 100644
--- a/vendor/gix/src/repository/thread_safe.rs
+++ b/vendor/gix/src/repository/thread_safe.rs
@@ -1,17 +1,5 @@
mod access {
- use crate::Kind;
-
impl crate::ThreadSafeRepository {
- /// Return the kind of repository, either bare or one with a work tree.
- pub fn kind(&self) -> Kind {
- match self.work_tree {
- Some(_) => Kind::WorkTree {
- is_linked: crate::worktree::id(self.git_dir(), self.common_dir.is_some()).is_some(),
- },
- None => Kind::Bare,
- }
- }
-
/// Add thread-local state to an easy-to-use thread-local repository for the most convenient API.
pub fn to_thread_local(&self) -> crate::Repository {
self.into()
diff --git a/vendor/gix/src/repository/worktree.rs b/vendor/gix/src/repository/worktree.rs
index 316009d29..f522a3f18 100644
--- a/vendor/gix/src/repository/worktree.rs
+++ b/vendor/gix/src/repository/worktree.rs
@@ -1,5 +1,4 @@
-use crate::config::cache::util::ApplyLeniencyDefault;
-use crate::{worktree, Worktree};
+use crate::{config::cache::util::ApplyLeniencyDefault, worktree, Worktree};
/// Interact with individual worktrees and their information.
impl crate::Repository {
diff --git a/vendor/gix/src/revision/spec/parse/delegate/navigate.rs b/vendor/gix/src/revision/spec/parse/delegate/navigate.rs
index 882c2835c..f6e085368 100644
--- a/vendor/gix/src/revision/spec/parse/delegate/navigate.rs
+++ b/vendor/gix/src/revision/spec/parse/delegate/navigate.rs
@@ -239,8 +239,7 @@ impl<'repo> delegate::Navigate for Delegate<'repo> {
r.id()
.object()
.ok()
- .map(|obj| obj.kind == gix_object::Kind::Commit)
- .unwrap_or(false)
+ .map_or(false, |obj| obj.kind == gix_object::Kind::Commit)
})
.filter_map(|r| r.detach().peeled),
)
diff --git a/vendor/gix/src/types.rs b/vendor/gix/src/types.rs
index eafa6a3f8..cdb5f731d 100644
--- a/vendor/gix/src/types.rs
+++ b/vendor/gix/src/types.rs
@@ -4,20 +4,6 @@ use gix_hash::ObjectId;
use crate::{head, remote};
-/// The kind of repository.
-#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
-pub enum Kind {
- /// A submodule worktree, whose `git` repository lives in `.git/modules/**/<name>` of the parent repository.
- Submodule,
- /// A bare repository does not have a work tree, that is files on disk beyond the `git` repository itself.
- Bare,
- /// A `git` repository along with a checked out files in a work tree.
- WorkTree {
- /// If true, this is the git dir associated with this _linked_ worktree, otherwise it is a repository with _main_ worktree.
- is_linked: bool,
- },
-}
-
/// A worktree checkout containing the files of the repository in consumable form.
pub struct Worktree<'repo> {
pub(crate) parent: &'repo Repository,
@@ -35,7 +21,7 @@ pub struct Head<'repo> {
pub(crate) repo: &'repo Repository,
}
-/// An [ObjectId] with access to a repository.
+/// An [`ObjectId`] with access to a repository.
#[derive(Clone, Copy)]
pub struct Id<'r> {
/// The actual object id