Mercurial > forks > mercurial
changeset 53260:fc55ffef89fe
rust-hg-core: update `rand` dependency
It is good to refresh our dependencies every cycle to get the latest
perf improvements, bugfixes etc.
This update is done in a separate changeset because of a breaking change.
The change in discovery tests is due to `thread_rng` (now just `rng`) having
changed algorithm: the output is still stable and still behaves as expected.
author | Rapha?l Gom?s <rgomes@octobus.net> |
---|---|
date | Wed, 26 Mar 2025 12:00:38 +0100 |
parents | efd03dbaf153 |
children | aed2aee075c2 |
files | rust/Cargo.lock rust/hg-core/Cargo.toml rust/hg-core/examples/nodemap/main.rs rust/hg-core/src/dirstate/on_disk.rs rust/hg-core/src/discovery.rs rust/hg-core/src/vfs.rs rust/hg-core/tests/test_missing_ancestors.rs |
diffstat | 7 files changed, 124 insertions(+), 39 deletions(-) [+] |
line wrap: on
line diff
--- a/rust/Cargo.lock Mon May 19 09:27:06 2025 +0200 +++ b/rust/Cargo.lock Wed Mar 26 12:00:38 2025 +0100 @@ -18,7 +18,7 @@ "getrandom 0.2.15", "once_cell", "version_check", - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -578,6 +578,18 @@ ] [[package]] +name = "getrandom" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", +] + +[[package]] name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -648,7 +660,7 @@ "memmap2", "once_cell", "pretty_assertions", - "rand 0.8.5", + "rand 0.9.0", "rand_distr", "rand_pcg", "rayon", @@ -1034,7 +1046,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -1138,6 +1150,12 @@ ] [[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + +[[package]] name = "radium" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1168,6 +1186,17 @@ ] [[package]] +name = "rand" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", + "zerocopy 0.8.24", +] + +[[package]] name = "rand_chacha" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1188,6 +1217,16 @@ ] [[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + +[[package]] name = "rand_core" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1206,13 +1245,22 @@ ] [[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.2", +] + +[[package]] name = "rand_distr" -version = "0.4.3" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +checksum = "6a8615d50dcf34fa31f7ab52692afec947c4dd0ab803cc87cb3b0b4570ff7463" dependencies = [ "num-traits", - "rand 0.8.5", + "rand 0.9.0", ] [[package]] @@ -1226,11 +1274,11 @@ [[package]] name = "rand_pcg" -version = "0.3.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e" +checksum = "b48ac3f7ffaab7fac4d2376632268aa5f89abdb55f7ebf8f4d11fffccb2320f7" dependencies = [ - "rand_core 0.6.4", + "rand_core 0.9.3", ] [[package]] @@ -1829,6 +1877,15 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] name = "wasite" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2121,6 +2178,15 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags", +] + +[[package]] name = "wyz" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2142,7 +2208,16 @@ checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "byteorder", - "zerocopy-derive", + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy" +version = "0.8.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" +dependencies = [ + "zerocopy-derive 0.8.24", ] [[package]] @@ -2157,6 +2232,17 @@ ] [[package]] +name = "zerocopy-derive" +version = "0.8.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] name = "zstd" version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index"
--- a/rust/hg-core/Cargo.toml Mon May 19 09:27:06 2025 +0200 +++ b/rust/hg-core/Cargo.toml Wed Mar 26 12:00:38 2025 +0100 @@ -28,12 +28,12 @@ lazy_static = "1.4.0" libc = "0.2.137" memchr = "2" -rand = "0.8.5" -rand_pcg = "0.3.1" -rand_distr = "0.4.3" rayon = "1.7.0" regex = "1.7.0" self_cell = "1.0" +rand = "0.9.0" +rand_pcg = "0.9.0" +rand_distr = "0.5.1" serde = { version = "1.0", features = ["derive"] } sha-1 = "0.10.0" twox-hash = "1.6.3"
--- a/rust/hg-core/examples/nodemap/main.rs Mon May 19 09:27:06 2025 +0200 +++ b/rust/hg-core/examples/nodemap/main.rs Wed Mar 26 12:00:38 2025 +0100 @@ -53,11 +53,11 @@ fn bench(index: &Index, nm: &NodeTree, queries: usize) { let len = index.len() as u32; - let mut rng = rand::thread_rng(); + let mut rng = rand::rng(); let nodes: Vec<Node> = (0..queries) .map(|_| { *index - .node(Revision((rng.gen::<u32>() % len) as BaseRevision)) + .node(Revision((rng.random::<u32>() % len) as BaseRevision)) .unwrap() }) .collect();
--- a/rust/hg-core/src/dirstate/on_disk.rs Mon May 19 09:27:06 2025 +0200 +++ b/rust/hg-core/src/dirstate/on_disk.rs Wed Mar 26 12:00:38 2025 +0100 @@ -220,12 +220,12 @@ pub fn new_uid() -> String { const ID_LENGTH: usize = 8; let mut id = String::with_capacity(ID_LENGTH); - let mut rng = rand::thread_rng(); + let mut rng = rand::rng(); for _ in 0..ID_LENGTH { // One random hexadecimal digit. // `unwrap` never panics because `impl Write for String` // never returns an error. - write!(&mut id, "{:x}", rng.gen_range(0..16)).unwrap(); + write!(&mut id, "{:x}", rng.random_range(0..16)).unwrap(); } id }
--- a/rust/hg-core/src/discovery.rs Mon May 19 09:27:06 2025 +0200 +++ b/rust/hg-core/src/discovery.rs Wed Mar 26 12:00:38 2025 +0100 @@ -13,7 +13,7 @@ use super::{Graph, GraphError, Revision, NULL_REVISION}; use crate::{ancestors::MissingAncestors, dagops, FastHashMap}; use rand::seq::SliceRandom; -use rand::{thread_rng, RngCore, SeedableRng}; +use rand::{RngCore, SeedableRng}; use std::cmp::{max, min}; use std::collections::{HashSet, VecDeque}; @@ -161,7 +161,7 @@ ) -> Self { let mut seed = [0; 16]; if randomize { - thread_rng().fill_bytes(&mut seed); + rand::rng().fill_bytes(&mut seed); } Self::new_with_seed(graph, target_heads, seed, respect_size, randomize) } @@ -606,7 +606,7 @@ fn test_limit_sample_less_than_half() { assert_eq!( full_disco().limit_sample((1..6).map(Revision).collect(), 2), - vec![2, 5] + vec![3, 5] ); } @@ -614,7 +614,7 @@ fn test_limit_sample_more_than_half() { assert_eq!( full_disco().limit_sample((1..4).map(Revision).collect(), 2), - vec![1, 2] + vec![1, 3] ); }
--- a/rust/hg-core/src/vfs.rs Mon May 19 09:27:06 2025 +0200 +++ b/rust/hg-core/src/vfs.rs Wed Mar 26 12:00:38 2025 +0100 @@ -6,7 +6,7 @@ use dyn_clone::DynClone; use format_bytes::format_bytes; use memmap2::{Mmap, MmapOptions}; -use rand::distributions::{Alphanumeric, DistString}; +use rand::distr::{Alphanumeric, SampleString}; use std::fs::{File, Metadata, OpenOptions}; use std::io::{ErrorKind, Read, Seek, Write}; use std::os::fd::AsRawFd; @@ -423,8 +423,7 @@ ) -> Result<Self, HgError> { let target_path = target_path.as_ref().to_owned(); - let random_id = - Alphanumeric.sample_string(&mut rand::thread_rng(), 12); + let random_id = Alphanumeric.sample_string(&mut rand::rng(), 12); let filename = target_path.file_name().expect("target has no filename"); let filename = get_bytes_from_path(filename); @@ -932,7 +931,7 @@ if metadata.nlink() > 1 { // If it's hardlinked, copy it and rename it back before changing it. let tmpdir = path.parent().expect("file at root"); - let name = Alphanumeric.sample_string(&mut rand::thread_rng(), 16); + let name = Alphanumeric.sample_string(&mut rand::rng(), 16); let tmpfile = tmpdir.join(name); std::fs::create_dir_all(tmpfile.parent().expect("file at root")) .with_context(|| IoErrorContext::CopyingFile {
--- a/rust/hg-core/tests/test_missing_ancestors.rs Mon May 19 09:27:06 2025 +0200 +++ b/rust/hg-core/tests/test_missing_ancestors.rs Wed Mar 26 12:00:38 2025 +0100 @@ -1,8 +1,8 @@ use hg::testing::VecGraph; use hg::Revision; use hg::*; -use rand::distributions::{Distribution, Uniform}; -use rand::{thread_rng, Rng, RngCore, SeedableRng}; +use rand::distr::{Distribution, Uniform}; +use rand::{Rng, RngCore, SeedableRng}; use rand_distr::LogNormal; use std::cmp::min; use std::collections::HashSet; @@ -20,32 +20,32 @@ let mergeprob = mergeprob_opt.unwrap_or(0.2); let prevprob = prevprob_opt.unwrap_or(0.7); - let mut rng = thread_rng(); + let mut rng = rand::rng(); let mut vg: VecGraph = Vec::with_capacity(nodes); for i in 0..nodes { - if i == 0 || rng.gen_bool(rootprob) { + if i == 0 || rng.random_bool(rootprob) { vg.push([NULL_REVISION, NULL_REVISION]) } else if i == 1 { vg.push([Revision(0), NULL_REVISION]) - } else if rng.gen_bool(mergeprob) { + } else if rng.random_bool(mergeprob) { let p1 = { - if i == 2 || rng.gen_bool(prevprob) { + if i == 2 || rng.random_bool(prevprob) { Revision((i - 1) as BaseRevision) } else { - Revision(rng.gen_range(0..i - 1) as BaseRevision) + Revision(rng.random_range(0..i - 1) as BaseRevision) } }; // p2 is a random revision lower than i and different from p1 - let mut p2 = Revision(rng.gen_range(0..i - 1) as BaseRevision); + let mut p2 = Revision(rng.random_range(0..i - 1) as BaseRevision); if p2 >= p1 { p2.0 += 1; } vg.push([p1, p2]); - } else if rng.gen_bool(prevprob) { + } else if rng.random_bool(prevprob) { vg.push([Revision((i - 1) as BaseRevision), NULL_REVISION]) } else { vg.push([ - Revision(rng.gen_range(0..i - 1) as BaseRevision), + Revision(rng.random_range(0..i - 1) as BaseRevision), NULL_REVISION, ]) } @@ -199,7 +199,7 @@ let log_normal = LogNormal::new(mu, sigma).unwrap(); let nb = min(maxrev.0 as usize, log_normal.sample(rng).floor() as usize); - let dist = Uniform::from(NULL_REVISION.0..maxrev.0); + let dist = Uniform::new(NULL_REVISION.0, maxrev.0).expect("invalid range"); rng.sample_iter(&dist).take(nb).map(Revision).collect() } @@ -276,7 +276,7 @@ seed_parse_in(&val, &mut seed); } Err(env::VarError::NotPresent) => { - thread_rng().fill_bytes(&mut seed); + rand::rng().fill_bytes(&mut seed); } Err(env::VarError::NotUnicode(_)) => { panic!("TEST_RANDOM_SEED must be 128 bits in hex"); @@ -314,13 +314,13 @@ &hex_seed, ); for _m in 0..inccount { - if rng.gen_bool(0.2) { + if rng.random_bool(0.2) { let new_bases = sample_revs(&mut rng, graph_len, None, None); inc.add_bases(new_bases.iter().cloned()); naive.add_bases(new_bases); } - if rng.gen_bool(0.4) { + if rng.random_bool(0.4) { // larger set so that there are more revs to remove from let mut hrevs = sample_revs(&mut rng, graph_len, Some(1.5), None);