diff --git a/Cargo.lock b/Cargo.lock index 050aaa93..82ecb8c8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -45,7 +45,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" dependencies = [ "cfg-if", - "getrandom 0.2.10", "once_cell", "version_check", ] @@ -1014,16 +1013,16 @@ dependencies = [ [[package]] name = "gix-actor" -version = "0.23.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1969b77b9ee4cc1755c841987ec6f7622aaca95e952bcafb76973ae59d1b8716" +checksum = "948a5f9e43559d16faf583694f1c742eb401ce24ce8e6f2238caedea7486433c" dependencies = [ "bstr", "btoi", "gix-date", "itoa", - "nom", "thiserror", + "winnow", ] [[package]] @@ -1037,22 +1036,22 @@ dependencies = [ [[package]] name = "gix-command" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f28f654184b5f725c5737c7e4f466cbd8f0102ac352d5257eeab19647ee4256" +checksum = "3c576cfbf577f72c097b5f88aedea502cd62952bdc1fb3adcab4531d5525a4c7" dependencies = [ "bstr", ] [[package]] name = "gix-commitgraph" -version = "0.17.1" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed42baa50075d41c1a0931074ce1a97c5797c7c6fe7591d9f1f2dcd448532c26" +checksum = "7e8bc78b1a6328fa6d8b3a53b6c73997af37fd6bfc1d6c49f149e63bda5cbb36" dependencies = [ "bstr", "gix-chunk", - "gix-features 0.31.1", + "gix-features", "gix-hash", "memmap2", "thiserror", @@ -1060,9 +1059,9 @@ dependencies = [ [[package]] name = "gix-config-value" -version = "0.12.5" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e874f41437441c02991dcea76990b9058fadfc54b02ab4dd06ab2218af43897" +checksum = "ea7505b97f4d8e7933e29735a568ba2f86d8de466669d9f0e8321384f9972f47" dependencies = [ "bitflags 2.4.0", "bstr", @@ -1073,9 +1072,9 @@ dependencies = [ [[package]] name = "gix-credentials" -version = "0.16.1" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75a75565e0e6e7f80cfa4eb1b05cc448c6846ddd48dcf413a28875fbc11ee9af" +checksum = "1c5c5d74069b842a1861e581027ac6b7ad9ff66f5911c89b9f45484d7ebda6a4" dependencies = [ "bstr", "gix-command", @@ -1089,9 +1088,9 @@ dependencies = [ [[package]] name = "gix-date" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a825babda995d788e30d306a49dacd1e93d5f5d33d53c7682d0347cef40333c" +checksum = "fc7df669639582dc7c02737642f76890b03b5544e141caba68a7d6b4eb551e0d" dependencies = [ "bstr", "itoa", @@ -1101,21 +1100,20 @@ dependencies = [ [[package]] name = "gix-diff" -version = "0.32.0" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaf5d9b9b521b284ebe53ee69eee33341835ec70edc314f36b2100ea81396121" +checksum = "931394f69fb8c9ed6afc0aae3487bd869e936339bcc13ed8884472af072e0554" dependencies = [ "gix-hash", "gix-object", - "imara-diff", "thiserror", ] [[package]] name = "gix-features" -version = "0.31.1" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06142d8cff5d17509399b04052b64d2f9b3a311d5cff0b1a32b220f62cd0d595" +checksum = "51f4365ba17c4f218d7fd9ec102b8d2d3cb0ca200a835e81151ace7778aec827" dependencies = [ "crc32fast", "flate2", @@ -1128,41 +1126,30 @@ dependencies = [ "walkdir", ] -[[package]] -name = "gix-features" -version = "0.32.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "882695cccf38da4c3cc7ee687bdb412cf25e37932d7f8f2c306112ea712449f1" -dependencies = [ - "gix-hash", - "gix-trace", - "libc", -] - [[package]] name = "gix-fs" -version = "0.4.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d5b6e9d34a2c61ea4a02bbca94c409ab6dbbca1348cbb67298cd7fed8758761" +checksum = "8cd171c0cae97cd0dc57e7b4601cb1ebf596450e263ef3c02be9107272c877bd" dependencies = [ - "gix-features 0.32.1", + "gix-features", ] [[package]] name = "gix-hash" -version = "0.11.4" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b422ff2ad9a0628baaad6da468cf05385bf3f5ab495ad5a33cce99b9f41092f" +checksum = "1884c7b41ea0875217c1be9ce91322f90bde433e91d374d0e1276073a51ccc60" dependencies = [ - "hex", + "faster-hex", "thiserror", ] [[package]] name = "gix-hashtable" -version = "0.2.4" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385f4ce6ecf3692d313ca3aa9bd3b3d8490de53368d6d94bedff3af8b6d9c58d" +checksum = "409268480841ad008e81c17ca5a293393fbf9f2b6c2f85b8ab9de1f0c5176a16" dependencies = [ "gix-hash", "hashbrown 0.14.0", @@ -1171,33 +1158,32 @@ dependencies = [ [[package]] name = "gix-object" -version = "0.32.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a953f3d7ffad16734aa3ab1d05807972c80e339d1bd9dde03e0198716b99e2a6" +checksum = "740f2a44267f58770a1cb3a3d01d14e67b089c7136c48d4bddbb3cfd2bf86a51" dependencies = [ "bstr", "btoi", "gix-actor", "gix-date", - "gix-features 0.31.1", + "gix-features", "gix-hash", "gix-validate", - "hex", "itoa", - "nom", "smallvec", "thiserror", + "winnow", ] [[package]] name = "gix-odb" -version = "0.49.1" +version = "0.54.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6418cff00ecc2713b58c8e04bff30dda808fbba1a080e7248b299d069894a01" +checksum = "8630b56cb80d8fa684d383dad006a66401ee8314e12fbf0e566ddad8c115143b" dependencies = [ "arc-swap", "gix-date", - "gix-features 0.31.1", + "gix-features", "gix-hash", "gix-object", "gix-pack", @@ -1210,13 +1196,13 @@ dependencies = [ [[package]] name = "gix-pack" -version = "0.39.1" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "414935138d90043ea5898de7a93f02c2558e52652492719470e203ef26a8fd0a" +checksum = "1431ba2e30deff1405920693d54ab231c88d7c240dd6ccc936ee223d8f8697c3" dependencies = [ "gix-chunk", "gix-diff", - "gix-features 0.31.1", + "gix-features", "gix-hash", "gix-hashtable", "gix-object", @@ -1231,9 +1217,9 @@ dependencies = [ [[package]] name = "gix-packetline" -version = "0.16.5" +version = "0.16.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a374cb5eba089e3c123df4d996eb00da411bb90ec92cb35bffeeb2d22ee106a" +checksum = "8a8384b1e964151aff0d5632dd9b191059d07dff358b96bd940f1b452600d7ab" dependencies = [ "bstr", "faster-hex", @@ -1242,9 +1228,9 @@ dependencies = [ [[package]] name = "gix-path" -version = "0.8.4" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18609c8cbec8508ea97c64938c33cd305b75dfc04a78d0c3b78b8b3fd618a77c" +checksum = "6a1d370115171e3ae03c5c6d4f7d096f2981a40ddccb98dfd704c773530ba73b" dependencies = [ "bstr", "gix-trace", @@ -1255,9 +1241,9 @@ dependencies = [ [[package]] name = "gix-prompt" -version = "0.5.5" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c22decaf4a063ccae2b2108820c8630c01bd6756656df3fe464b32b8958a5ea" +checksum = "5c9a913769516f5e9d937afac206fb76428e3d7238e538845842887fda584678" dependencies = [ "gix-command", "gix-config-value", @@ -1268,20 +1254,20 @@ dependencies = [ [[package]] name = "gix-protocol" -version = "0.35.0" +version = "0.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed7069fac7eb23b043b4bd7890df1e244cb370c3fe8b2ff482203d36b4fd4099" +checksum = "391e3feabdfa5f90dad6673ce59e3291ac28901b2ff248d86c5a7fbde0391e0e" dependencies = [ "bstr", "btoi", "gix-credentials", "gix-date", - "gix-features 0.31.1", + "gix-features", "gix-hash", "gix-transport", "maybe-async", - "nom", "thiserror", + "winnow", ] [[package]] @@ -1297,9 +1283,9 @@ dependencies = [ [[package]] name = "gix-revwalk" -version = "0.3.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028d50fcaf8326a8f79a359490d9ca9fb4e2b51ac9ac86503560d0bcc888d2eb" +checksum = "a16d8c892e4cd676d86f0265bf9d40cefd73d8d94f86b213b8b77d50e77efae0" dependencies = [ "gix-commitgraph", "gix-date", @@ -1312,9 +1298,9 @@ dependencies = [ [[package]] name = "gix-sec" -version = "0.8.4" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9615cbd6b456898aeb942cd75e5810c382fbfc48dbbff2fa23ebd2d33dcbe9c7" +checksum = "92b9542ac025a8c02ed5d17b3fc031a111a384e859d0be3532ec4d58c40a0f28" dependencies = [ "bitflags 2.4.0", "gix-path", @@ -1324,9 +1310,9 @@ dependencies = [ [[package]] name = "gix-tempfile" -version = "7.0.2" +version = "11.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa28d567848cec8fdd77d36ad4f5f78ecfaba7d78f647d4f63c8ae1a2cec7243" +checksum = "05cc2205cf10d99f70b96e04e16c55d4c7cf33efc151df1f793e29fd12a931f8" dependencies = [ "gix-fs", "libc", @@ -1343,13 +1329,13 @@ checksum = "96b6d623a1152c3facb79067d6e2ecdae48130030cf27d6eb21109f13bd7b836" [[package]] name = "gix-transport" -version = "0.33.1" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0929bb80a07c04033edd4585091c4db9ea458cb932e883bf22efb146ebfbdc89" +checksum = "2f209a93364e24f20319751bc11092272e2f3fe82bb72592b2822679cf5be752" dependencies = [ "bstr", "gix-command", - "gix-features 0.31.1", + "gix-features", "gix-packetline", "gix-quote", "gix-sec", @@ -1359,9 +1345,9 @@ dependencies = [ [[package]] name = "gix-traverse" -version = "0.29.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3cdfd54598db4fae57d5ae6f52958422b2d13382d2745796bfe5c8015ffa86e" +checksum = "14d050ec7d4e1bb76abf0636cf4104fb915b70e54e3ced9a4427c999100ff38a" dependencies = [ "gix-commitgraph", "gix-date", @@ -1375,12 +1361,12 @@ dependencies = [ [[package]] name = "gix-url" -version = "0.20.1" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "beaede6dbc83f408b19adfd95bb52f1dbf01fb8862c3faf6c6243e2e67fcdfa1" +checksum = "b1b9ac8ed32ad45f9fc6c5f8c0be2ed911e544a5a19afd62d95d524ebaa95671" dependencies = [ "bstr", - "gix-features 0.31.1", + "gix-features", "gix-path", "home", "thiserror", @@ -1389,9 +1375,9 @@ dependencies = [ [[package]] name = "gix-validate" -version = "0.7.7" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba9b3737b2cef3dcd014633485f0034b0f1a931ee54aeb7d8f87f177f3c89040" +checksum = "e05cab2b03a45b866156e052aa38619f4ece4adcb2f79978bfc249bc3b21b8c5" dependencies = [ "bstr", "thiserror", @@ -1474,12 +1460,6 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - [[package]] name = "hmac" version = "0.12.1" @@ -1595,16 +1575,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "imara-diff" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e98c1d0ad70fc91b8b9654b1f33db55e59579d3b3de2bffdced0fdb810570cb8" -dependencies = [ - "ahash", - "hashbrown 0.12.3", -] - [[package]] name = "indexmap" version = "1.9.3" @@ -1862,12 +1832,6 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniz_oxide" version = "0.7.1" @@ -1933,16 +1897,6 @@ dependencies = [ "cyphergraphy", ] -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - [[package]] name = "nonempty" version = "0.5.0" @@ -2274,9 +2228,9 @@ dependencies = [ [[package]] name = "prodash" -version = "25.0.2" +version = "26.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d67eb4220992a4a052a4bb03cf776e493ecb1a3a36bab551804153d63486af7" +checksum = "794b5bf8e2d19b53dcdcec3e4bba628e20f5b6062503ba89281fa7037dd7bbcf" [[package]] name = "qcheck" @@ -2463,7 +2417,7 @@ dependencies = [ "bstr", "either", "gix-actor", - "gix-features 0.31.1", + "gix-features", "gix-hash", "gix-odb", "gix-pack", @@ -3942,6 +3896,15 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "winnow" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b" +dependencies = [ + "memchr", +] + [[package]] name = "xattr" version = "0.2.3" diff --git a/radicle-fetch/Cargo.toml b/radicle-fetch/Cargo.toml index df9bc052..044cb252 100644 --- a/radicle-fetch/Cargo.toml +++ b/radicle-fetch/Cargo.toml @@ -8,13 +8,13 @@ edition = "2021" [dependencies] bstr = { version = "1.3" } either = { version = "0" } -gix-actor = { version = "0.23.0" } -gix-features = { version = "0.31", features = ["progress"] } -gix-hash = { version = "0.11" } -gix-odb = { version = "0.49" } -gix-pack = { version = "0.39" } -gix-protocol = { version = "0.35", features = ["blocking-client"] } -gix-transport = { version = "0.33", features = ["blocking-client"] } +gix-actor = { version = "0.28.0" } +gix-features = { version = "0.36", features = ["progress"] } +gix-hash = { version = "0.13.1" } +gix-odb = { version = "0.54" } +gix-pack = { version = "0.44" } +gix-protocol = { version = "0.41.1", features = ["blocking-client"] } +gix-transport = { version = "0.38", features = ["blocking-client"] } log = { version = "0.4.17", features = ["std"] } nonempty = { version = "0.8.1" } radicle-git-ext = { version = "0.6.0", features = ["bstr"] } diff --git a/radicle-fetch/src/transport/fetch.rs b/radicle-fetch/src/transport/fetch.rs index 4857154c..4d5f44ea 100644 --- a/radicle-fetch/src/transport/fetch.rs +++ b/radicle-fetch/src/transport/fetch.rs @@ -5,7 +5,7 @@ use std::{ sync::{atomic::AtomicBool, Arc}, }; -use gix_features::progress::Progress; +use gix_features::progress::NestedProgress; use gix_pack as pack; use gix_protocol::{ fetch::{self, Delegate, DelegateBlocking}, @@ -45,11 +45,15 @@ pub struct PackWriter { impl PackWriter { /// Write the packfile read from `pack` to the `objects/pack` /// directory. - pub fn write_pack( + pub fn write_pack

( &self, - pack: impl BufRead, - progress: impl Progress, - ) -> Result { + mut pack: impl BufRead, + mut progress: P, + ) -> Result + where + P: NestedProgress, + P::SubProgress: 'static, + { use gix_odb::FindExt as _; let options = pack::bundle::write::Options { @@ -68,16 +72,16 @@ impl PackWriter { }; let thickener = Arc::new(gix_odb::Store::at_opts( self.git_dir.join("objects"), - [], + &mut [].into_iter(), odb_opts, )?); let thickener = thickener.to_handle_arc(); Ok(pack::Bundle::write_to_directory( - pack, - Some(self.git_dir.join("objects").join("pack")), - progress, + &mut pack, + Some(&self.git_dir.join("objects").join("pack")), + &mut progress, &self.interrupt, - Some(Box::new(move |oid, buf| thickener.find(oid, buf).ok())), + Some(Box::new(move |oid, buf| thickener.find(&oid, buf).ok())), options, )?) } @@ -104,7 +108,7 @@ impl<'a> Delegate for &'a mut Fetch { fn receive_pack( &mut self, input: impl io::BufRead, - progress: impl Progress, + progress: impl NestedProgress + 'static, _refs: &[handshake::Ref], previous_response: &fetch::Response, ) -> io::Result<()> { @@ -184,7 +188,7 @@ pub(crate) fn run( progress: &mut P, ) -> Result where - P: Progress, + P: NestedProgress, P::SubProgress: 'static, R: io::Read, W: io::Write, @@ -241,11 +245,18 @@ where let response = fetch::Response::from_line_reader(*protocol, &mut reader, true)?; previous_response = if response.has_pack() { progress.step(); - progress.set_name("receiving pack"); if !sideband_all { setup_remote_progress(progress, &mut reader); } - (&mut delegate).receive_pack(reader, progress, &[], &response)?; + // TODO: remove delegate in favor of functional style to fix progress-hack, + // needed as it needs `'static`. As the top-level seems to pass `Discard`, + // there should be no repercussions right now. + (&mut delegate).receive_pack( + reader, + progress.add_child("receiving pack"), + &[], + &response, + )?; break 'negotiation; } else { match action { @@ -295,7 +306,7 @@ fn setup_remote_progress

( progress: &mut P, reader: &mut Box, ) where - P: Progress, + P: NestedProgress, P::SubProgress: 'static, { reader.set_progress_handler(Some(Box::new({ diff --git a/radicle-fetch/src/transport/ls_refs.rs b/radicle-fetch/src/transport/ls_refs.rs index c9cb636b..cea312a8 100644 --- a/radicle-fetch/src/transport/ls_refs.rs +++ b/radicle-fetch/src/transport/ls_refs.rs @@ -153,7 +153,7 @@ where features.push(("agent", Some(Cow::Owned(agent)))); progress.step(); - progress.set_name("list refs"); + progress.set_name("list refs".into()); let mut remote_refs = conn.invoke( ls.as_str(), features.clone().into_iter(),