From 656feb99a1789d5cd419af9fe7b41a492067eb62 Mon Sep 17 00:00:00 2001 From: Oli Scherer Date: Thu, 28 Mar 2024 14:33:31 +0000 Subject: [PATCH 1/6] Split some things most users don't need out into a submodule --- src/core.rs | 121 +++++++++++++++++++++++++++++++++++++++++ src/dependencies.rs | 4 +- src/lib.rs | 115 ++------------------------------------- src/per_test_config.rs | 4 +- 4 files changed, 131 insertions(+), 113 deletions(-) create mode 100644 src/core.rs diff --git a/src/core.rs b/src/core.rs new file mode 100644 index 00000000..e36a5fe0 --- /dev/null +++ b/src/core.rs @@ -0,0 +1,121 @@ +//! Basic operations useful for building a testsuite + +use crate::test_result::Errored; +use bstr::ByteSlice as _; +use color_eyre::eyre::Result; +use crossbeam_channel::unbounded; +use crossbeam_channel::Receiver; +use crossbeam_channel::Sender; +use std::num::NonZeroUsize; +use std::path::Component; +use std::path::Path; +use std::path::Prefix; +use std::process::Command; +use std::process::Output; +use std::thread; + +pub(crate) fn run_command(mut cmd: Command) -> Result<(Command, Output), Errored> { + match cmd.output() { + Err(err) => Err(Errored { + errors: vec![], + stderr: err.to_string().into_bytes(), + stdout: format!("could not spawn `{:?}` as a process", cmd.get_program()).into_bytes(), + command: cmd, + }), + Ok(output) => Ok((cmd, output)), + } +} + +/// Remove the common prefix of this path and the `root_dir`. +pub(crate) fn strip_path_prefix<'a>( + path: &'a Path, + prefix: &Path, +) -> impl Iterator> { + let mut components = path.components(); + for c in prefix.components() { + // Windows has some funky paths. This is probably wrong, but works well in practice. + let deverbatimize = |c| match c { + Component::Prefix(prefix) => Err(match prefix.kind() { + Prefix::VerbatimUNC(a, b) => Prefix::UNC(a, b), + Prefix::VerbatimDisk(d) => Prefix::Disk(d), + other => other, + }), + c => Ok(c), + }; + let c2 = components.next(); + if Some(deverbatimize(c)) == c2.map(deverbatimize) { + continue; + } + return c2.into_iter().chain(components); + } + None.into_iter().chain(components) +} + +impl CrateType { + /// Heuristic: + /// * if the file contains `#[test]`, automatically pass `--cfg test`. + /// * if the file does not contain `fn main()` or `#[start]`, automatically pass `--crate-type=lib`. + /// This avoids having to spam `fn main() {}` in almost every test. + pub fn from_file_contents(file_contents: &[u8]) -> CrateType { + if file_contents.find(b"#[proc_macro").is_some() { + CrateType::ProcMacro + } else if file_contents.find(b"#[test]").is_some() { + CrateType::Test + } else if file_contents.find(b"fn main()").is_none() + && file_contents.find(b"#[start]").is_none() + { + CrateType::Lib + } else { + CrateType::Bin + } + } +} + +/// The kind of crate we're building here. Corresponds to `--crate-type` flags of rustc +pub enum CrateType { + /// A proc macro + ProcMacro, + /// A file containing unit tests + Test, + /// A binary file containing a main function or start function + Bin, + /// A library crate + Lib, +} + +/// A generic multithreaded runner that has a thread for producing work, +/// a thread for collecting work, and `num_threads` threads for doing the work. +pub fn run_and_collect( + num_threads: NonZeroUsize, + submitter: impl FnOnce(Sender) + Send, + runner: impl Sync + Fn(&Receiver, Sender) -> Result<()>, + collector: impl FnOnce(Receiver) + Send, +) -> Result<()> { + // A channel for files to process + let (submit, receive) = unbounded(); + + thread::scope(|s| { + // Create a thread that is in charge of walking the directory and submitting jobs. + // It closes the channel when it is done. + s.spawn(|| submitter(submit)); + + // A channel for the messages emitted by the individual test threads. + // Used to produce live updates while running the tests. + let (finished_files_sender, finished_files_recv) = unbounded(); + + s.spawn(|| collector(finished_files_recv)); + + let mut threads = vec![]; + + // Create N worker threads that receive files to test. + for _ in 0..num_threads.get() { + let finished_files_sender = finished_files_sender.clone(); + threads.push(s.spawn(|| runner(&receive, finished_files_sender))); + } + + for thread in threads { + thread.join().unwrap()?; + } + Ok(()) + }) +} diff --git a/src/dependencies.rs b/src/dependencies.rs index fd8c46fa..b08adc69 100644 --- a/src/dependencies.rs +++ b/src/dependencies.rs @@ -12,7 +12,7 @@ use std::{ }; use crate::{ - crate_type, default_per_file_config, + default_per_file_config, per_test_config::{Comments, TestConfig}, rustc_stderr, status_emitter::StatusEmitter, @@ -369,7 +369,7 @@ impl<'a> BuildManager<'a> { default_per_file_config(&mut config, aux_file, &file_contents); - match crate_type(&file_contents) { + match CrateType::from_file_contents(&file_contents) { // Proc macros must be run on the host CrateType::ProcMacro => config.target = config.host.clone(), CrateType::Test | CrateType::Bin | CrateType::Lib => {} diff --git a/src/lib.rs b/src/lib.rs index b284ab13..9c749810 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -8,25 +8,23 @@ //! A crate to run the Rust compiler (or other binaries) and test their command line output. -use bstr::ByteSlice; pub use color_eyre; use color_eyre::eyre::{eyre, Result}; -use crossbeam_channel::{unbounded, Receiver, Sender}; +pub use core::CrateType; use dependencies::{Build, BuildManager}; use per_test_config::TestConfig; use rustc_stderr::Message; use status_emitter::{StatusEmitter, TestStatus}; use std::collections::VecDeque; -use std::num::NonZeroUsize; -use std::path::{Component, Path, Prefix}; -use std::process::{Command, Output}; -use std::thread; +use std::path::Path; +use std::process::Command; use test_result::{Errored, TestOk, TestRun}; use crate::parser::Comments; mod cmd; mod config; +pub mod core; mod dependencies; mod diff; mod error; @@ -107,7 +105,7 @@ pub fn default_any_file_filter(path: &Path, config: &Config) -> bool { /// The default per-file config used by `run_tests`. pub fn default_per_file_config(config: &mut Config, _path: &Path, file_contents: &[u8]) { config.program.args.push( - match crate_type(file_contents) { + match CrateType::from_file_contents(file_contents) { CrateType::ProcMacro => "--crate-type=proc-macro", CrateType::Test => "--test", CrateType::Bin => return, @@ -117,36 +115,6 @@ pub fn default_per_file_config(config: &mut Config, _path: &Path, file_contents: ) } -/// The kind of crate we're building here. Corresponds to `--crate-type` flags of rustc -pub enum CrateType { - /// A proc macro - ProcMacro, - /// A file containing unit tests - Test, - /// A binary file containing a main function or start function - Bin, - /// A library crate - Lib, -} - -/// Heuristic: -/// * if the file contains `#[test]`, automatically pass `--cfg test`. -/// * if the file does not contain `fn main()` or `#[start]`, automatically pass `--crate-type=lib`. -/// This avoids having to spam `fn main() {}` in almost every test. -pub fn crate_type(file_contents: &[u8]) -> CrateType { - if file_contents.find(b"#[proc_macro").is_some() { - CrateType::ProcMacro - } else if file_contents.find(b"#[test]").is_some() { - CrateType::Test - } else if file_contents.find(b"fn main()").is_none() - && file_contents.find(b"#[start]").is_none() - { - CrateType::Lib - } else { - CrateType::Bin - } -} - /// Create a command for running a single file, with the settings from the `config` argument. /// Ignores various settings from `Config` that relate to finding test files. pub fn test_command(mut config: Config, path: &Path) -> Result { @@ -218,7 +186,7 @@ pub fn run_tests_generic( }; let mut filtered = 0; - run_and_collect( + core::run_and_collect( num_threads, |submit| { let mut todo = VecDeque::new(); @@ -335,43 +303,6 @@ pub fn run_tests_generic( } } -/// A generic multithreaded runner that has a thread for producing work, -/// a thread for collecting work, and `num_threads` threads for doing the work. -pub fn run_and_collect( - num_threads: NonZeroUsize, - submitter: impl FnOnce(Sender) + Send, - runner: impl Sync + Fn(&Receiver, Sender) -> Result<()>, - collector: impl FnOnce(Receiver) + Send, -) -> Result<()> { - // A channel for files to process - let (submit, receive) = unbounded(); - - thread::scope(|s| { - // Create a thread that is in charge of walking the directory and submitting jobs. - // It closes the channel when it is done. - s.spawn(|| submitter(submit)); - - // A channel for the messages emitted by the individual test threads. - // Used to produce live updates while running the tests. - let (finished_files_sender, finished_files_recv) = unbounded(); - - s.spawn(|| collector(finished_files_recv)); - - let mut threads = vec![]; - - // Create N worker threads that receive files to test. - for _ in 0..num_threads.get() { - let finished_files_sender = finished_files_sender.clone(); - threads.push(s.spawn(|| runner(&receive, finished_files_sender))); - } - - for thread in threads { - thread.join().unwrap()?; - } - Ok(()) - }) -} - fn parse_and_test_file( build_manager: &BuildManager<'_>, status: &dyn TestStatus, @@ -427,37 +358,3 @@ fn parse_and_test_file( }) .collect()) } - -fn run_command(mut cmd: Command) -> Result<(Command, Output), Errored> { - match cmd.output() { - Err(err) => Err(Errored { - errors: vec![], - stderr: err.to_string().into_bytes(), - stdout: format!("could not spawn `{:?}` as a process", cmd.get_program()).into_bytes(), - command: cmd, - }), - Ok(output) => Ok((cmd, output)), - } -} - -/// Remove the common prefix of this path and the `root_dir`. -fn strip_path_prefix<'a>(path: &'a Path, prefix: &Path) -> impl Iterator> { - let mut components = path.components(); - for c in prefix.components() { - // Windows has some funky paths. This is probably wrong, but works well in practice. - let deverbatimize = |c| match c { - Component::Prefix(prefix) => Err(match prefix.kind() { - Prefix::VerbatimUNC(a, b) => Prefix::UNC(a, b), - Prefix::VerbatimDisk(d) => Prefix::Disk(d), - other => other, - }), - c => Ok(c), - }; - let c2 = components.next(); - if Some(deverbatimize(c)) == c2.map(deverbatimize) { - continue; - } - return c2.into_iter().chain(components); - } - None.into_iter().chain(components) -} diff --git a/src/per_test_config.rs b/src/per_test_config.rs index b4938e5c..28c1e33e 100644 --- a/src/per_test_config.rs +++ b/src/per_test_config.rs @@ -19,7 +19,7 @@ pub use crate::rustc_stderr::Level; use crate::rustc_stderr::Message; use crate::test_result::{Errored, TestOk, TestResult}; use crate::{ - rustc_stderr, strip_path_prefix, Config, Error, Errors, Mode, OutputConflictHandling, + core::strip_path_prefix, rustc_stderr, Config, Error, Errors, Mode, OutputConflictHandling, RustfixMode, }; @@ -441,7 +441,7 @@ impl TestConfig<'_> { cmd.stdin(std::fs::File::open(stdin).unwrap()); } - let (cmd, output) = crate::run_command(cmd)?; + let (cmd, output) = crate::core::run_command(cmd)?; let mode = self.mode()?; let (cmd, output) = self.check_test_result( From b4a41e56358324d3bb2c861e6122b743974a957d Mon Sep 17 00:00:00 2001 From: Oli Scherer Date: Fri, 5 Apr 2024 08:45:37 +0000 Subject: [PATCH 2/6] Split nextest support out into its own module --- src/lib.rs | 16 ++-------------- src/nextest.rs | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 14 deletions(-) create mode 100644 src/nextest.rs diff --git a/src/lib.rs b/src/lib.rs index 9c749810..41139eef 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -31,6 +31,7 @@ mod error; pub mod filter; pub mod github_actions; mod mode; +pub mod nextest; mod parser; pub mod per_test_config; mod rustc_stderr; @@ -149,22 +150,9 @@ pub fn run_tests_generic( per_file_config: impl Fn(&mut Config, &Path, &[u8]) + Sync, status_emitter: impl StatusEmitter + Send, ) -> Result<()> { - // Nexttest emulation: we act as if we are one single test. - if configs.iter().any(|c| c.list) { - if configs.iter().any(|c| !c.run_only_ignored) { - println!("ui_test: test"); - } + if nextest::emulate(&mut configs) { return Ok(()); } - for config in &mut configs { - if config.filter_exact - && config.filter_files.len() == 1 - && config.filter_files[0] == "ui_test" - { - config.filter_exact = false; - config.filter_files.clear(); - } - } for config in &mut configs { config.fill_host_and_target()?; diff --git a/src/nextest.rs b/src/nextest.rs new file mode 100644 index 00000000..95738a33 --- /dev/null +++ b/src/nextest.rs @@ -0,0 +1,25 @@ +//! Helper functions for nextest emulation. + +use crate::Config; + +/// Nexttest emulation: we act as if we are one single test. +/// Returns `true` if we should not run any tests. +/// Patches up the `Config`s to have appropriate filters. +pub fn emulate(configs: &mut Vec) -> bool { + if configs.iter().any(|c| c.list) { + if configs.iter().any(|c| !c.run_only_ignored) { + println!("ui_test: test"); + } + return true; + } + for config in configs { + if config.filter_exact + && config.filter_files.len() == 1 + && config.filter_files[0] == "ui_test" + { + config.filter_exact = false; + config.filter_files.clear(); + } + } + false +} From fb8eacf059dadb8740ab537452ca81688838fe4c Mon Sep 17 00:00:00 2001 From: Oli Scherer Date: Fri, 5 Apr 2024 08:52:36 +0000 Subject: [PATCH 3/6] Reexport `eyre::Result` for convenient usage --- src/lib.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 41139eef..9aad5ca0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,7 +9,8 @@ //! A crate to run the Rust compiler (or other binaries) and test their command line output. pub use color_eyre; -use color_eyre::eyre::{eyre, Result}; +use color_eyre::eyre::eyre; +pub use color_eyre::eyre::Result; pub use core::CrateType; use dependencies::{Build, BuildManager}; use per_test_config::TestConfig; From 21be18f5d0395ab188b4d5348768deb711f240eb Mon Sep 17 00:00:00 2001 From: Oli Scherer Date: Fri, 5 Apr 2024 09:01:40 +0000 Subject: [PATCH 4/6] Update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8601ab6b..447afd98 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +* Reexporting `eyre::Result` at the root level + ### Fixed * Passing `--target` to build command when cross-compiling. From 293feadf1a6fca54cdef23183cbee18fe994ced3 Mon Sep 17 00:00:00 2001 From: Oli Scherer Date: Fri, 5 Apr 2024 09:02:36 +0000 Subject: [PATCH 5/6] Version bump --- Cargo.lock | 2 +- Cargo.toml | 2 +- tests/integrations/basic-bin/Cargo.lock | 2 +- tests/integrations/basic-fail-mode/Cargo.lock | 2 +- tests/integrations/basic-fail/Cargo.lock | 2 +- tests/integrations/basic/Cargo.lock | 2 +- tests/integrations/cargo-run/Cargo.lock | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9f36c937..38e6b96c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -633,7 +633,7 @@ dependencies = [ [[package]] name = "ui_test" -version = "0.22.2" +version = "0.22.3" dependencies = [ "annotate-snippets", "anyhow", diff --git a/Cargo.toml b/Cargo.toml index 6d53c955..334c3ec7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ui_test" -version = "0.22.2" +version = "0.22.3" edition = "2021" license = "MIT OR Apache-2.0" description = "A test framework for testing rustc diagnostics output" diff --git a/tests/integrations/basic-bin/Cargo.lock b/tests/integrations/basic-bin/Cargo.lock index b47d2883..0cc23cc2 100644 --- a/tests/integrations/basic-bin/Cargo.lock +++ b/tests/integrations/basic-bin/Cargo.lock @@ -719,7 +719,7 @@ dependencies = [ [[package]] name = "ui_test" -version = "0.22.2" +version = "0.22.3" dependencies = [ "annotate-snippets", "anyhow", diff --git a/tests/integrations/basic-fail-mode/Cargo.lock b/tests/integrations/basic-fail-mode/Cargo.lock index 9222298e..3ec6f0f8 100644 --- a/tests/integrations/basic-fail-mode/Cargo.lock +++ b/tests/integrations/basic-fail-mode/Cargo.lock @@ -719,7 +719,7 @@ dependencies = [ [[package]] name = "ui_test" -version = "0.22.2" +version = "0.22.3" dependencies = [ "annotate-snippets", "anyhow", diff --git a/tests/integrations/basic-fail/Cargo.lock b/tests/integrations/basic-fail/Cargo.lock index e6690c47..5cb22c7c 100644 --- a/tests/integrations/basic-fail/Cargo.lock +++ b/tests/integrations/basic-fail/Cargo.lock @@ -719,7 +719,7 @@ dependencies = [ [[package]] name = "ui_test" -version = "0.22.2" +version = "0.22.3" dependencies = [ "annotate-snippets", "anyhow", diff --git a/tests/integrations/basic/Cargo.lock b/tests/integrations/basic/Cargo.lock index 69829e81..1f8d6262 100644 --- a/tests/integrations/basic/Cargo.lock +++ b/tests/integrations/basic/Cargo.lock @@ -642,7 +642,7 @@ dependencies = [ [[package]] name = "ui_test" -version = "0.22.2" +version = "0.22.3" dependencies = [ "annotate-snippets", "anyhow", diff --git a/tests/integrations/cargo-run/Cargo.lock b/tests/integrations/cargo-run/Cargo.lock index b47d2883..0cc23cc2 100644 --- a/tests/integrations/cargo-run/Cargo.lock +++ b/tests/integrations/cargo-run/Cargo.lock @@ -719,7 +719,7 @@ dependencies = [ [[package]] name = "ui_test" -version = "0.22.2" +version = "0.22.3" dependencies = [ "annotate-snippets", "anyhow", From d7f43d54c66af74e3627821332f8104304a11e3d Mon Sep 17 00:00:00 2001 From: Oli Scherer Date: Fri, 5 Apr 2024 09:02:53 +0000 Subject: [PATCH 6/6] cargo update --- Cargo.lock | 205 ++++++++++++++++++++++++----------------------------- 1 file changed, 93 insertions(+), 112 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 38e6b96c..dd6b1929 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,9 +19,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "annotate-snippets" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a433302f833baa830c0092100c481c7ea768c5981a3c36f549517a502f246dd" +checksum = "6d9b665789884a7e8fb06c84b295e923b03ca51edbb7d08f91a6a50322ecbfe6" dependencies = [ "anstyle", "unicode-width", @@ -38,21 +38,21 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" [[package]] name = "anyhow" -version = "1.0.79" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" +checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" [[package]] name = "backtrace" -version = "0.3.69" +version = "0.3.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" dependencies = [ "addr2line", "cc", @@ -65,21 +65,15 @@ dependencies = [ [[package]] name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "bstr" -version = "1.9.0" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c48f0051a4b4c5e0b6d365cd04af53aeaa209e3cc15ec2cdb69e73cc87fbd0dc" +checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" dependencies = [ "memchr", "regex-automata", @@ -97,9 +91,9 @@ dependencies = [ [[package]] name = "cargo-platform" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d" +checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" dependencies = [ "serde", ] @@ -120,12 +114,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.83" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "libc", -] +checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5" [[package]] name = "cfg-if" @@ -135,9 +126,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "color-eyre" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a667583cca8c4f8436db8de46ea8233c42a7d9ae424a82d338f2e4675229204" +checksum = "55146f5e46f237f7423d74111267d4597b59b0dad0ffaf7303bce9945d843ad5" dependencies = [ "backtrace", "color-spantrace", @@ -191,9 +182,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.11" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176dc175b78f56c0f321911d9c8eb2b77a78a4860b9c19db83835fea1a46649b" +checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" dependencies = [ "crossbeam-utils", ] @@ -222,9 +213,9 @@ dependencies = [ [[package]] name = "eyre" -version = "0.6.11" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6267a1fa6f59179ea4afc8e50fd8612a3cc60bc858f786ff877a4a8cb042799" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" dependencies = [ "indenter", "once_cell", @@ -232,9 +223,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.0.1" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" +checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984" [[package]] name = "gimli" @@ -250,9 +241,9 @@ checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" [[package]] name = "indicatif" -version = "0.17.7" +version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25" +checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" dependencies = [ "console", "instant", @@ -272,9 +263,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "lazy_static" @@ -290,9 +281,9 @@ checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760" [[package]] name = "libc" -version = "0.2.152" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "linux-raw-sys" @@ -302,21 +293,21 @@ checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" [[package]] name = "log" -version = "0.4.20" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" [[package]] name = "memchr" -version = "2.7.1" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" dependencies = [ "adler", ] @@ -359,9 +350,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] name = "portable-atomic" @@ -381,9 +372,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.76" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" +checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" dependencies = [ "unicode-ident", ] @@ -397,20 +388,11 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "regex" -version = "1.10.2" +version = "1.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" dependencies = [ "regex-automata", "regex-syntax", @@ -418,18 +400,18 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" dependencies = [ "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" [[package]] name = "rustc-demangle" @@ -460,11 +442,11 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.30" +version = "0.38.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" +checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" dependencies = [ - "bitflags 2.4.2", + "bitflags", "errno", "libc", "linux-raw-sys", @@ -473,33 +455,33 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" [[package]] name = "semver" -version = "1.0.21" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" dependencies = [ "serde", ] [[package]] name = "serde" -version = "1.0.195" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.195" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", @@ -508,9 +490,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.111" +version = "1.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" +checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" dependencies = [ "itoa", "ryu", @@ -538,9 +520,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.48" +version = "2.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "44cfb93f38070beee36b3fef7d4f5a16f27751d94b187b666a5cc5e9b0d30687" dependencies = [ "proc-macro2", "quote", @@ -549,31 +531,30 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.9.0" +version = "3.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" dependencies = [ "cfg-if", "fastrand", - "redox_syscall", "rustix", "windows-sys 0.52.0", ] [[package]] name = "thiserror" -version = "1.0.56" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.56" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" dependencies = [ "proc-macro2", "quote", @@ -582,9 +563,9 @@ dependencies = [ [[package]] name = "thread_local" -version = "1.1.7" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ "cfg-if", "once_cell", @@ -712,7 +693,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.4", ] [[package]] @@ -732,17 +713,17 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", + "windows_aarch64_gnullvm 0.52.4", + "windows_aarch64_msvc 0.52.4", + "windows_i686_gnu 0.52.4", + "windows_i686_msvc 0.52.4", + "windows_x86_64_gnu 0.52.4", + "windows_x86_64_gnullvm 0.52.4", + "windows_x86_64_msvc 0.52.4", ] [[package]] @@ -753,9 +734,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" +checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" [[package]] name = "windows_aarch64_msvc" @@ -765,9 +746,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" +checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" [[package]] name = "windows_i686_gnu" @@ -777,9 +758,9 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" +checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" [[package]] name = "windows_i686_msvc" @@ -789,9 +770,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" +checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" [[package]] name = "windows_x86_64_gnu" @@ -801,9 +782,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" +checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" [[package]] name = "windows_x86_64_gnullvm" @@ -813,9 +794,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" +checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" [[package]] name = "windows_x86_64_msvc" @@ -825,6 +806,6 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" +checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8"