diff --git a/contrib/crunch-v2/Cargo.nix b/contrib/crunch-v2/Cargo.nix index 4af5be5a3..615f9f7cf 100644 --- a/contrib/crunch-v2/Cargo.nix +++ b/contrib/crunch-v2/Cargo.nix @@ -4070,7 +4070,7 @@ rec { "nix-compat" = rec { crateName = "nix-compat"; version = "0.1.0"; - edition = "2021"; + edition = "2024"; crateBin = [ ]; src = lib.cleanSourceWith { filter = sourceFilter; src = ../../snix/nix-compat; }; libName = "nix_compat"; @@ -4196,7 +4196,7 @@ rec { "nix-compat-derive" = rec { crateName = "nix-compat-derive"; version = "0.1.0"; - edition = "2021"; + edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ../../snix/nix-compat-derive; }; procMacro = true; libName = "nix_compat_derive"; diff --git a/contrib/fetchroots/Cargo.nix b/contrib/fetchroots/Cargo.nix index d13e7f8ed..e6dc82765 100644 --- a/contrib/fetchroots/Cargo.nix +++ b/contrib/fetchroots/Cargo.nix @@ -5503,7 +5503,7 @@ rec { "nix-compat" = rec { crateName = "nix-compat"; version = "0.1.0"; - edition = "2021"; + edition = "2024"; crateBin = [ ]; src = lib.cleanSourceWith { filter = sourceFilter; src = ../../snix/nix-compat; }; libName = "nix_compat"; @@ -5629,7 +5629,7 @@ rec { "nix-compat-derive" = rec { crateName = "nix-compat-derive"; version = "0.1.0"; - edition = "2021"; + edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ../../snix/nix-compat-derive; }; procMacro = true; libName = "nix_compat_derive"; diff --git a/contrib/narinfo2parquet/Cargo.nix b/contrib/narinfo2parquet/Cargo.nix index c9cd1e7f4..71b504ee6 100644 --- a/contrib/narinfo2parquet/Cargo.nix +++ b/contrib/narinfo2parquet/Cargo.nix @@ -2797,7 +2797,7 @@ rec { "nix-compat" = rec { crateName = "nix-compat"; version = "0.1.0"; - edition = "2021"; + edition = "2024"; crateBin = [ ]; src = lib.cleanSourceWith { filter = sourceFilter; src = ../../snix/nix-compat; }; libName = "nix_compat"; @@ -2923,7 +2923,7 @@ rec { "nix-compat-derive" = rec { crateName = "nix-compat-derive"; version = "0.1.0"; - edition = "2021"; + edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ../../snix/nix-compat-derive; }; procMacro = true; libName = "nix_compat_derive"; diff --git a/contrib/weave/Cargo.nix b/contrib/weave/Cargo.nix index 46ea84b28..b877c1b86 100644 --- a/contrib/weave/Cargo.nix +++ b/contrib/weave/Cargo.nix @@ -2879,7 +2879,7 @@ rec { "nix-compat" = rec { crateName = "nix-compat"; version = "0.1.0"; - edition = "2021"; + edition = "2024"; crateBin = [ ]; src = lib.cleanSourceWith { filter = sourceFilter; src = ../../snix/nix-compat; }; libName = "nix_compat"; @@ -3005,7 +3005,7 @@ rec { "nix-compat-derive" = rec { crateName = "nix-compat-derive"; version = "0.1.0"; - edition = "2021"; + edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ../../snix/nix-compat-derive; }; procMacro = true; libName = "nix_compat_derive"; diff --git a/snix/Cargo.nix b/snix/Cargo.nix index 7d64f2021..712f9367c 100644 --- a/snix/Cargo.nix +++ b/snix/Cargo.nix @@ -8213,7 +8213,7 @@ rec { "nix-compat" = rec { crateName = "nix-compat"; version = "0.1.0"; - edition = "2021"; + edition = "2024"; crateBin = [ { name = "drvfmt"; @@ -8390,7 +8390,7 @@ rec { "nix-compat-derive" = rec { crateName = "nix-compat-derive"; version = "0.1.0"; - edition = "2021"; + edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./nix-compat-derive; }; procMacro = true; libName = "nix_compat_derive"; @@ -8451,7 +8451,7 @@ rec { "nix-compat-derive-tests" = rec { crateName = "nix-compat-derive-tests"; version = "0.1.0"; - edition = "2021"; + edition = "2024"; src = lib.cleanSourceWith { filter = sourceFilter; src = ./nix-compat-derive-tests; }; devDependencies = [ { diff --git a/snix/nix-compat-derive-tests/Cargo.toml b/snix/nix-compat-derive-tests/Cargo.toml index 820f7706a..9e4d319ee 100644 --- a/snix/nix-compat-derive-tests/Cargo.toml +++ b/snix/nix-compat-derive-tests/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "nix-compat-derive-tests" version = "0.1.0" -edition = "2021" +edition = "2024" [features] compile-tests = [] diff --git a/snix/nix-compat-derive-tests/rustfmt.toml b/snix/nix-compat-derive-tests/rustfmt.toml new file mode 100644 index 000000000..4dfc1d2b7 --- /dev/null +++ b/snix/nix-compat-derive-tests/rustfmt.toml @@ -0,0 +1,2 @@ +# FUTUREWORK: move to .. once all crates are migrated (#114) +edition = "2024" diff --git a/snix/nix-compat-derive-tests/tests/read_derive.rs b/snix/nix-compat-derive-tests/tests/read_derive.rs index 56123026f..c49eccf80 100644 --- a/snix/nix-compat-derive-tests/tests/read_derive.rs +++ b/snix/nix-compat-derive-tests/tests/read_derive.rs @@ -1,7 +1,7 @@ use std::str::FromStr; -use nix_compat::wire::de::mock::{Builder, Error}; use nix_compat::wire::de::NixRead; +use nix_compat::wire::de::mock::{Builder, Error}; use nix_compat_derive::NixDeserialize; #[derive(Debug, PartialEq, Eq, NixDeserialize)] diff --git a/snix/nix-compat-derive-tests/tests/ui/deserialize_from_str_error_not_display.rs b/snix/nix-compat-derive-tests/tests/ui/deserialize_from_str_error_not_display.rs index 36cd4b153..7f0df0e29 100644 --- a/snix/nix-compat-derive-tests/tests/ui/deserialize_from_str_error_not_display.rs +++ b/snix/nix-compat-derive-tests/tests/ui/deserialize_from_str_error_not_display.rs @@ -9,11 +9,7 @@ pub struct Test; impl FromStr for Test { type Err = (); fn from_str(s: &str) -> Result { - if s == "test" { - Ok(Test) - } else { - Err(()) - } + if s == "test" { Ok(Test) } else { Err(()) } } } diff --git a/snix/nix-compat-derive-tests/tests/ui/deserialize_try_from_error_not_display.rs b/snix/nix-compat-derive-tests/tests/ui/deserialize_try_from_error_not_display.rs index 7f8ad6bbf..caa062574 100644 --- a/snix/nix-compat-derive-tests/tests/ui/deserialize_try_from_error_not_display.rs +++ b/snix/nix-compat-derive-tests/tests/ui/deserialize_try_from_error_not_display.rs @@ -8,11 +8,7 @@ impl TryFrom for Test { type Error = (); fn try_from(value: u64) -> Result { - if value == 42 { - Ok(Test) - } else { - Err(()) - } + if value == 42 { Ok(Test) } else { Err(()) } } } diff --git a/snix/nix-compat-derive-tests/tests/write_derive.rs b/snix/nix-compat-derive-tests/tests/write_derive.rs index 435b7be75..a86933414 100644 --- a/snix/nix-compat-derive-tests/tests/write_derive.rs +++ b/snix/nix-compat-derive-tests/tests/write_derive.rs @@ -1,8 +1,8 @@ use std::fmt; use nix_compat::wire::ser::{ - mock::{Builder, Error}, NixWrite as _, + mock::{Builder, Error}, }; use nix_compat_derive::NixSerialize; diff --git a/snix/nix-compat-derive/Cargo.toml b/snix/nix-compat-derive/Cargo.toml index 746997561..eb5f16bd7 100644 --- a/snix/nix-compat-derive/Cargo.toml +++ b/snix/nix-compat-derive/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "nix-compat-derive" version = "0.1.0" -edition = "2021" +edition = "2024" [lib] proc-macro = true diff --git a/snix/nix-compat-derive/rustfmt.toml b/snix/nix-compat-derive/rustfmt.toml new file mode 100644 index 000000000..4dfc1d2b7 --- /dev/null +++ b/snix/nix-compat-derive/rustfmt.toml @@ -0,0 +1,2 @@ +# FUTUREWORK: move to .. once all crates are migrated (#114) +edition = "2024" diff --git a/snix/nix-compat-derive/src/de.rs b/snix/nix-compat-derive/src/de.rs index d9779713d..4f4fdd64f 100644 --- a/snix/nix-compat-derive/src/de.rs +++ b/snix/nix-compat-derive/src/de.rs @@ -1,11 +1,11 @@ use proc_macro2::{Span, TokenStream}; -use quote::{quote, quote_spanned, ToTokens}; +use quote::{ToTokens, quote, quote_spanned}; use syn::spanned::Spanned; use syn::{DeriveInput, Generics, Path, Type}; use crate::internal::attrs::Default; use crate::internal::inputs::RemoteInput; -use crate::internal::{attrs, Container, Context, Data, Field, Remote, Style, Variant}; +use crate::internal::{Container, Context, Data, Field, Remote, Style, Variant, attrs}; pub fn expand_nix_deserialize( crate_path: Path, diff --git a/snix/nix-compat-derive/src/internal/attrs.rs b/snix/nix-compat-derive/src/internal/attrs.rs index d0fa3b008..cad982a59 100644 --- a/snix/nix-compat-derive/src/internal/attrs.rs +++ b/snix/nix-compat-derive/src/internal/attrs.rs @@ -1,12 +1,12 @@ use quote::ToTokens; use syn::meta::ParseNestedMeta; use syn::parse::Parse; -use syn::{parse_quote, Attribute, Expr, ExprLit, ExprPath, Lit, Token}; +use syn::{Attribute, Expr, ExprLit, ExprPath, Lit, Token, parse_quote}; -use super::symbol::{ - Symbol, CRATE, DEFAULT, DISPLAY, FROM, FROM_STR, INTO, NIX, TRY_FROM, TRY_INTO, VERSION, -}; use super::Context; +use super::symbol::{ + CRATE, DEFAULT, DISPLAY, FROM, FROM_STR, INTO, NIX, Symbol, TRY_FROM, TRY_INTO, VERSION, +}; #[derive(Debug, PartialEq, Eq)] pub enum Default { @@ -209,7 +209,7 @@ pub fn parse_lit( #[cfg(test)] mod test { - use syn::{parse_quote, Attribute}; + use syn::{Attribute, parse_quote}; use crate::internal::Context; diff --git a/snix/nix-compat-derive/src/internal/mod.rs b/snix/nix-compat-derive/src/internal/mod.rs index aa42d9047..dca2ebc83 100644 --- a/snix/nix-compat-derive/src/internal/mod.rs +++ b/snix/nix-compat-derive/src/internal/mod.rs @@ -1,6 +1,6 @@ +use syn::Token; use syn::punctuated::Punctuated; use syn::spanned::Spanned; -use syn::Token; pub mod attrs; mod ctx; diff --git a/snix/nix-compat-derive/src/lib.rs b/snix/nix-compat-derive/src/lib.rs index 394473b1c..a118d9e8a 100644 --- a/snix/nix-compat-derive/src/lib.rs +++ b/snix/nix-compat-derive/src/lib.rs @@ -370,7 +370,7 @@ use internal::inputs::RemoteInput; use proc_macro::TokenStream; -use syn::{parse_quote, DeriveInput}; +use syn::{DeriveInput, parse_quote}; mod de; mod internal; diff --git a/snix/nix-compat-derive/src/ser.rs b/snix/nix-compat-derive/src/ser.rs index 52e777c28..53b154cef 100644 --- a/snix/nix-compat-derive/src/ser.rs +++ b/snix/nix-compat-derive/src/ser.rs @@ -5,7 +5,7 @@ use syn::{DeriveInput, Generics, Path, Type}; use crate::internal::attrs::Default; use crate::internal::inputs::RemoteInput; -use crate::internal::{attrs, Container, Context, Data, Field, Remote, Style, Variant}; +use crate::internal::{Container, Context, Data, Field, Remote, Style, Variant, attrs}; pub fn expand_nix_serialize(crate_path: Path, input: &mut DeriveInput) -> syn::Result { let cx = Context::new(); diff --git a/snix/nix-compat/Cargo.toml b/snix/nix-compat/Cargo.toml index 24805c4f4..6e3da2211 100644 --- a/snix/nix-compat/Cargo.toml +++ b/snix/nix-compat/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "nix-compat" version = "0.1.0" -edition = "2021" +edition = "2024" [features] # async NAR writer. Also needs the `wire` feature. diff --git a/snix/nix-compat/benches/derivation_parse_aterm.rs b/snix/nix-compat/benches/derivation_parse_aterm.rs index 6557dd17a..12dd3de39 100644 --- a/snix/nix-compat/benches/derivation_parse_aterm.rs +++ b/snix/nix-compat/benches/derivation_parse_aterm.rs @@ -1,6 +1,6 @@ use std::path::Path; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; +use criterion::{Criterion, black_box, criterion_group, criterion_main}; use mimalloc::MiMalloc; use nix_compat::derivation::Derivation; diff --git a/snix/nix-compat/benches/narinfo_parse.rs b/snix/nix-compat/benches/narinfo_parse.rs index ee2665a31..48e33f595 100644 --- a/snix/nix-compat/benches/narinfo_parse.rs +++ b/snix/nix-compat/benches/narinfo_parse.rs @@ -1,7 +1,7 @@ use std::sync::LazyLock; use std::{io, str}; -use criterion::{black_box, criterion_group, criterion_main, Criterion, Throughput}; +use criterion::{Criterion, Throughput, black_box, criterion_group, criterion_main}; use mimalloc::MiMalloc; use nix_compat::narinfo::NarInfo; diff --git a/snix/nix-compat/rustfmt.toml b/snix/nix-compat/rustfmt.toml new file mode 100644 index 000000000..4dfc1d2b7 --- /dev/null +++ b/snix/nix-compat/rustfmt.toml @@ -0,0 +1,2 @@ +# FUTUREWORK: move to .. once all crates are migrated (#114) +edition = "2024" diff --git a/snix/nix-compat/src/derivation/mod.rs b/snix/nix-compat/src/derivation/mod.rs index 7956c0084..9ef0ba566 100644 --- a/snix/nix-compat/src/derivation/mod.rs +++ b/snix/nix-compat/src/derivation/mod.rs @@ -1,5 +1,5 @@ use crate::store_path::{ - self, build_ca_path, build_output_path, build_text_path, StorePath, StorePathRef, + self, StorePath, StorePathRef, build_ca_path, build_output_path, build_text_path, }; use bstr::BString; use serde::{Deserialize, Serialize}; diff --git a/snix/nix-compat/src/derivation/parser.rs b/snix/nix-compat/src/derivation/parser.rs index d1d0ff0fe..258d3d837 100644 --- a/snix/nix-compat/src/derivation/parser.rs +++ b/snix/nix-compat/src/derivation/parser.rs @@ -3,17 +3,17 @@ //! //! [ATerm]: http://program-transformation.org/Tools/ATermFormat.html +use nom::Parser; use nom::bytes::streaming::tag; use nom::character::streaming::char as nomchar; use nom::combinator::{all_consuming, consumed, map_res}; use nom::multi::{separated_list0, separated_list1}; use nom::sequence::{delimited, preceded, separated_pair, terminated}; -use nom::Parser; -use std::collections::{btree_map, BTreeMap, BTreeSet}; +use std::collections::{BTreeMap, BTreeSet, btree_map}; use thiserror; -use crate::derivation::parse_error::{into_nomerror, ErrorKind, NomError, NomResult}; -use crate::derivation::{write, CAHash, Derivation, Output}; +use crate::derivation::parse_error::{ErrorKind, NomError, NomResult, into_nomerror}; +use crate::derivation::{CAHash, Derivation, Output, write}; use crate::store_path::{self, StorePath}; use crate::{aterm, nixhash, nixhash::NixHash}; @@ -386,7 +386,7 @@ mod tests { use crate::{ derivation::{ - parse_error::ErrorKind, parser::from_algo_and_mode_and_digest, CAHash, NixHash, Output, + CAHash, NixHash, Output, parse_error::ErrorKind, parser::from_algo_and_mode_and_digest, }, store_path::StorePath, }; diff --git a/snix/nix-compat/src/derivation/tests/mod.rs b/snix/nix-compat/src/derivation/tests/mod.rs index 17093f8f2..e599a8511 100644 --- a/snix/nix-compat/src/derivation/tests/mod.rs +++ b/snix/nix-compat/src/derivation/tests/mod.rs @@ -1,8 +1,8 @@ use super::parse_error::ErrorKind; +use crate::derivation::Derivation; use crate::derivation::output::Output; use crate::derivation::parse_error::NomError; use crate::derivation::parser::Error; -use crate::derivation::Derivation; use crate::store_path::StorePath; use bstr::{BStr, BString}; use hex_literal::hex; diff --git a/snix/nix-compat/src/derivation/write.rs b/snix/nix-compat/src/derivation/write.rs index a8b43fad4..b96c4bb44 100644 --- a/snix/nix-compat/src/derivation/write.rs +++ b/snix/nix-compat/src/derivation/write.rs @@ -6,7 +6,7 @@ use crate::aterm::escape_bytes; use crate::derivation::{ca_kind_prefix, output::Output}; use crate::nixbase32; -use crate::store_path::{StorePath, STORE_DIR_WITH_SLASH}; +use crate::store_path::{STORE_DIR_WITH_SLASH, StorePath}; use bstr::BString; use data_encoding::HEXLOWER; diff --git a/snix/nix-compat/src/nar/listing/mod.rs b/snix/nix-compat/src/nar/listing/mod.rs index 5a9a3b4d3..14468967d 100644 --- a/snix/nix-compat/src/nar/listing/mod.rs +++ b/snix/nix-compat/src/nar/listing/mod.rs @@ -68,7 +68,7 @@ impl ListingEntry { match component { Component::CurDir => continue, Component::RootDir | Component::Prefix(_) | Component::ParentDir => { - return Err(ListingError::UnsupportedPathComponent) + return Err(ListingError::UnsupportedPathComponent); } Component::Normal(file_or_dir_name) => { if let Self::Directory { entries } = cur { diff --git a/snix/nix-compat/src/narinfo/signature.rs b/snix/nix-compat/src/narinfo/signature.rs index 2005a5cb6..862f0fc19 100644 --- a/snix/nix-compat/src/narinfo/signature.rs +++ b/snix/nix-compat/src/narinfo/signature.rs @@ -202,9 +202,15 @@ mod test { } #[rstest] - #[case::wrong_length("cache.nixos.org-1:o1DTsjCz0PofLJ216P2RBuSulI8BAb6zHxWE4N+tzlcELk5Uk/GO2SCxWTRN5wJutLZZ+cHTMdWqOHF8")] - #[case::wrong_name_newline("test\n:u01BybwQhyI5H1bW1EIWXssMDhDDIvXOG5uh8Qzgdyjz6U1qg6DHhMAvXZOUStIj6X5t4/ufFgR8i3fjf0bMAw==")] - #[case::wrong_name_space("test :u01BybwQhyI5H1bW1EIWXssMDhDDIvXOG5uh8Qzgdyjz6U1qg6DHhMAvXZOUStIj6X5t4/ufFgR8i3fjf0bMAw==")] + #[case::wrong_length( + "cache.nixos.org-1:o1DTsjCz0PofLJ216P2RBuSulI8BAb6zHxWE4N+tzlcELk5Uk/GO2SCxWTRN5wJutLZZ+cHTMdWqOHF8" + )] + #[case::wrong_name_newline( + "test\n:u01BybwQhyI5H1bW1EIWXssMDhDDIvXOG5uh8Qzgdyjz6U1qg6DHhMAvXZOUStIj6X5t4/ufFgR8i3fjf0bMAw==" + )] + #[case::wrong_name_space( + "test :u01BybwQhyI5H1bW1EIWXssMDhDDIvXOG5uh8Qzgdyjz6U1qg6DHhMAvXZOUStIj6X5t4/ufFgR8i3fjf0bMAw==" + )] #[case::empty_name( ":u01BybwQhyI5H1bW1EIWXssMDhDDIvXOG5uh8Qzgdyjz6U1qg6DHhMAvXZOUStIj6X5t4/ufFgR8i3fjf0bMAw==" )] diff --git a/snix/nix-compat/src/narinfo/verifying_keys.rs b/snix/nix-compat/src/narinfo/verifying_keys.rs index f820cc55c..26df15464 100644 --- a/snix/nix-compat/src/narinfo/verifying_keys.rs +++ b/snix/nix-compat/src/narinfo/verifying_keys.rs @@ -137,8 +137,18 @@ mod test { } #[rstest] - #[case::correct_cache_nixos_org("cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=", FINGERPRINT, "cache.nixos.org-1:TsTTb3WGTZKphvYdBHXwo6weVILmTytUjLB+vcX89fOjjRicCHmKA4RCPMVLkj6TMJ4GMX3HPVWRdD1hkeKZBQ==", true)] - #[case::wrong_name_mismatch("cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=", FINGERPRINT, "cache.nixos.org:TsTTb3WGTZKphvYdBHXwo6weVILmTytUjLB+vcX89fOjjRicCHmKA4RCPMVLkj6TMJ4GMX3HPVWRdD1hkeKZBQ==", false)] + #[case::correct_cache_nixos_org( + "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=", + FINGERPRINT, + "cache.nixos.org-1:TsTTb3WGTZKphvYdBHXwo6weVILmTytUjLB+vcX89fOjjRicCHmKA4RCPMVLkj6TMJ4GMX3HPVWRdD1hkeKZBQ==", + true + )] + #[case::wrong_name_mismatch( + "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=", + FINGERPRINT, + "cache.nixos.org:TsTTb3WGTZKphvYdBHXwo6weVILmTytUjLB+vcX89fOjjRicCHmKA4RCPMVLkj6TMJ4GMX3HPVWRdD1hkeKZBQ==", + false + )] fn verify( #[case] pubkey_str: &'static str, #[case] fingerprint: &'static str, diff --git a/snix/nix-compat/src/nix_daemon/framing/framed_read.rs b/snix/nix-compat/src/nix_daemon/framing/framed_read.rs index 62e584e6d..56c571521 100644 --- a/snix/nix-compat/src/nix_daemon/framing/framed_read.rs +++ b/snix/nix-compat/src/nix_daemon/framing/framed_read.rs @@ -1,7 +1,7 @@ use std::{ num::NonZeroU64, pin::Pin, - task::{self, ready, Poll}, + task::{self, Poll, ready}, }; use pin_project_lite::pin_project; diff --git a/snix/nix-compat/src/nix_daemon/framing/stderr_read.rs b/snix/nix-compat/src/nix_daemon/framing/stderr_read.rs index 0074df901..26e871960 100644 --- a/snix/nix-compat/src/nix_daemon/framing/stderr_read.rs +++ b/snix/nix-compat/src/nix_daemon/framing/stderr_read.rs @@ -1,7 +1,7 @@ use std::{ io::Result, pin::Pin, - task::{ready, Poll}, + task::{Poll, ready}, }; use bytes::{BufMut, BytesMut}; @@ -264,7 +264,7 @@ mod tests { use std::time::Duration; use hex_literal::hex; - use tokio::io::{split, AsyncReadExt, BufReader}; + use tokio::io::{AsyncReadExt, BufReader, split}; use tokio_test::io::Builder; use crate::{nix_daemon::framing::StderrReadFramedReader, worker_protocol::STDERR_READ}; diff --git a/snix/nix-compat/src/nix_daemon/handler.rs b/snix/nix-compat/src/nix_daemon/handler.rs index 34fa570b9..5e88d3f04 100644 --- a/snix/nix-compat/src/nix_daemon/handler.rs +++ b/snix/nix-compat/src/nix_daemon/handler.rs @@ -2,24 +2,24 @@ use std::{future::Future, ops::DerefMut, sync::Arc}; use bytes::Bytes; use tokio::{ - io::{split, AsyncReadExt, AsyncWriteExt, ReadHalf, WriteHalf}, + io::{AsyncReadExt, AsyncWriteExt, ReadHalf, WriteHalf, split}, sync::Mutex, }; use tracing::{debug, warn}; use super::{ + NixDaemonIO, framing::{NixFramedReader, StderrReadFramedReader}, types::{AddToStoreNarRequest, QueryValidPaths}, - worker_protocol::{server_handshake_client, ClientSettings, Operation, Trust, STDERR_LAST}, - NixDaemonIO, + worker_protocol::{ClientSettings, Operation, STDERR_LAST, Trust, server_handshake_client}, }; use crate::{ store_path::StorePath, wire::{ + ProtocolVersion, de::{NixRead, NixReader}, ser::{NixSerialize, NixWrite, NixWriter, NixWriterBuilder}, - ProtocolVersion, }, }; diff --git a/snix/nix-compat/src/nix_daemon/mod.rs b/snix/nix-compat/src/nix_daemon/mod.rs index c6fdf95a8..95c59d817 100644 --- a/snix/nix-compat/src/nix_daemon/mod.rs +++ b/snix/nix-compat/src/nix_daemon/mod.rs @@ -82,7 +82,7 @@ mod tests { use crate::{nix_daemon::types::QueryValidPaths, store_path::StorePath}; - use super::{types::UnkeyedValidPathInfo, NixDaemonIO}; + use super::{NixDaemonIO, types::UnkeyedValidPathInfo}; // Very simple mock // Unable to use mockall as it does not support unboxed async traits. diff --git a/snix/nix-compat/src/nixcpp/conf.rs b/snix/nix-compat/src/nixcpp/conf.rs index 68308115f..f52d8a6d0 100644 --- a/snix/nix-compat/src/nixcpp/conf.rs +++ b/snix/nix-compat/src/nixcpp/conf.rs @@ -172,19 +172,27 @@ mod tests { require_sigs: Some(true), sandbox: Some(SandboxSetting::True), sandbox_fallback: Some(false), - substituters: Some(vec!["https://nix-community.cachix.org", "https://cache.nixos.org/"]), + substituters: Some(vec![ + "https://nix-community.cachix.org", + "https://cache.nixos.org/" + ]), system_features: Some(vec!["nixos-test", "benchmark", "big-parallel", "kvm"]), trusted_public_keys: Some(vec![ - VerifyingKey::parse("cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=") - .expect("failed to parse pubkey"), - VerifyingKey::parse("nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=") - .expect("failed to parse pubkey") + VerifyingKey::parse( + "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" + ) + .expect("failed to parse pubkey"), + VerifyingKey::parse( + "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" + ) + .expect("failed to parse pubkey") ]), trusted_substituters: Some(vec![]), trusted_users: Some(vec!["flokli"]), extra_platforms: Some(vec!["aarch64-linux", "i686-linux"]), extra_sandbox_paths: Some(vec![ - "/run/binfmt", "/nix/store/swwyxyqpazzvbwx8bv40z7ih144q841f-qemu-aarch64-binfmt-P-x86_64-unknown-linux-musl" + "/run/binfmt", + "/nix/store/swwyxyqpazzvbwx8bv40z7ih144q841f-qemu-aarch64-binfmt-P-x86_64-unknown-linux-musl" ]), experimental_features: Some(vec!["nix-command"]), builders_use_substitutes: Some(true) diff --git a/snix/nix-compat/src/nixhash/mod.rs b/snix/nix-compat/src/nixhash/mod.rs index 2689cfc67..944d33c0a 100644 --- a/snix/nix-compat/src/nixhash/mod.rs +++ b/snix/nix-compat/src/nixhash/mod.rs @@ -320,8 +320,9 @@ mod tests { "a5ce9c155ed09397614646c9717fc7cd94b1023d7b76b618d409e4fefd6e9d39" )); static NIXHASH_SHA512: LazyLock = LazyLock::new(|| { - NixHash::Sha512(Box::new(hex!("ab40d0be3541f0774bba7815d13d10b03252e96e95f7dbb4ee99a3b431c21662fd6971a020160e39848aa5f305b9be0f78727b2b0789e39f124d21e92b8f39ef")) - ) + NixHash::Sha512(Box::new(hex!( + "ab40d0be3541f0774bba7815d13d10b03252e96e95f7dbb4ee99a3b431c21662fd6971a020160e39848aa5f305b9be0f78727b2b0789e39f124d21e92b8f39ef" + ))) }); const NIXHASH_MD5: NixHash = NixHash::Md5(hex!("c4874a8897440b393d862d8fd459073f")); @@ -429,17 +430,29 @@ mod tests { /// Test parsing sha512 SRI hash with various paddings, Nix accepts all of them. #[rstest] - #[case::no_padding("sha512-7g91TBvYoYQorRTqo+rYD/i5YnWvUBLnqDhPHxBJDaBW7smuPMeRp6E6JOFuVN9bzN0QnH1ToUU0u9c2CjALEQ")] - #[case::too_little_padding("sha512-7g91TBvYoYQorRTqo+rYD/i5YnWvUBLnqDhPHxBJDaBW7smuPMeRp6E6JOFuVN9bzN0QnH1ToUU0u9c2CjALEQ=")] - #[case::correct_padding("sha512-7g91TBvYoYQorRTqo+rYD/i5YnWvUBLnqDhPHxBJDaBW7smuPMeRp6E6JOFuVN9bzN0QnH1ToUU0u9c2CjALEQ==")] - #[case::too_much_padding("sha512-7g91TBvYoYQorRTqo+rYD/i5YnWvUBLnqDhPHxBJDaBW7smuPMeRp6E6JOFuVN9bzN0QnH1ToUU0u9c2CjALEQ===")] - #[case::additional_suffix_ignored("sha512-7g91TBvYoYQorRTqo+rYD/i5YnWvUBLnqDhPHxBJDaBW7smuPMeRp6E6JOFuVN9bzN0QnH1ToUU0u9c2CjALEQ== cheesecake")] + #[case::no_padding( + "sha512-7g91TBvYoYQorRTqo+rYD/i5YnWvUBLnqDhPHxBJDaBW7smuPMeRp6E6JOFuVN9bzN0QnH1ToUU0u9c2CjALEQ" + )] + #[case::too_little_padding( + "sha512-7g91TBvYoYQorRTqo+rYD/i5YnWvUBLnqDhPHxBJDaBW7smuPMeRp6E6JOFuVN9bzN0QnH1ToUU0u9c2CjALEQ=" + )] + #[case::correct_padding( + "sha512-7g91TBvYoYQorRTqo+rYD/i5YnWvUBLnqDhPHxBJDaBW7smuPMeRp6E6JOFuVN9bzN0QnH1ToUU0u9c2CjALEQ==" + )] + #[case::too_much_padding( + "sha512-7g91TBvYoYQorRTqo+rYD/i5YnWvUBLnqDhPHxBJDaBW7smuPMeRp6E6JOFuVN9bzN0QnH1ToUU0u9c2CjALEQ===" + )] + #[case::additional_suffix_ignored( + "sha512-7g91TBvYoYQorRTqo+rYD/i5YnWvUBLnqDhPHxBJDaBW7smuPMeRp6E6JOFuVN9bzN0QnH1ToUU0u9c2CjALEQ== cheesecake" + )] fn from_sri_str_sha512_paddings(#[case] sri_str: &str) { let nix_hash = NixHash::from_sri(sri_str).expect("must succeed"); assert_eq!(HashAlgo::Sha512, nix_hash.algo()); assert_eq!( - &hex!("ee0f754c1bd8a18428ad14eaa3ead80ff8b96275af5012e7a8384f1f10490da056eec9ae3cc791a7a13a24e16e54df5bccdd109c7d53a14534bbd7360a300b11"), + &hex!( + "ee0f754c1bd8a18428ad14eaa3ead80ff8b96275af5012e7a8384f1f10490da056eec9ae3cc791a7a13a24e16e54df5bccdd109c7d53a14534bbd7360a300b11" + ), nix_hash.digest_as_bytes() ) } diff --git a/snix/nix-compat/src/store_path/mod.rs b/snix/nix-compat/src/store_path/mod.rs index 3c4d234eb..23f0d9020 100644 --- a/snix/nix-compat/src/store_path/mod.rs +++ b/snix/nix-compat/src/store_path/mod.rs @@ -1,5 +1,5 @@ use crate::nixbase32; -use data_encoding::{DecodeError, BASE64}; +use data_encoding::{BASE64, DecodeError}; use serde::{Deserialize, Serialize}; use std::{ fmt, @@ -341,7 +341,7 @@ mod tests { use std::cmp::Ordering; use std::path::PathBuf; - use crate::store_path::{StorePath, StorePathRef, DIGEST_SIZE}; + use crate::store_path::{DIGEST_SIZE, StorePath, StorePathRef}; use hex_literal::hex; use pretty_assertions::assert_eq; use rstest::rstest; diff --git a/snix/nix-compat/src/store_path/utils.rs b/snix/nix-compat/src/store_path/utils.rs index 1256ac43e..0046e2703 100644 --- a/snix/nix-compat/src/store_path/utils.rs +++ b/snix/nix-compat/src/store_path/utils.rs @@ -1,6 +1,6 @@ use crate::nixbase32; use crate::nixhash::{CAHash, NixHash}; -use crate::store_path::{Error, StorePath, STORE_DIR}; +use crate::store_path::{Error, STORE_DIR, StorePath}; use data_encoding::HEXLOWER; use sha2::{Digest, Sha256}; use thiserror; @@ -85,14 +85,14 @@ where } let (ty, inner_digest) = match &ca_hash { - CAHash::Text(ref digest) => (make_references_string("text", references, false), *digest), - CAHash::Nar(NixHash::Sha256(ref digest)) => ( + CAHash::Text(digest) => (make_references_string("text", references, false), *digest), + CAHash::Nar(NixHash::Sha256(digest)) => ( make_references_string("source", references, self_reference), *digest, ), // for all other CAHash::Nar, another custom scheme is used. - CAHash::Nar(ref hash) => { + CAHash::Nar(hash) => { if references.into_iter().next().is_some() { return Err(BuildStorePathError::InvalidReference()); } @@ -103,7 +103,7 @@ where ) } // CaHash::Flat is using something very similar, except the `r:` prefix. - CAHash::Flat(ref hash) => { + CAHash::Flat(hash) => { if references.into_iter().next().is_some() { return Err(BuildStorePathError::InvalidReference()); } diff --git a/snix/nix-compat/src/wire/bytes/mod.rs b/snix/nix-compat/src/wire/bytes/mod.rs index 9b981fbbd..597481ebc 100644 --- a/snix/nix-compat/src/wire/bytes/mod.rs +++ b/snix/nix-compat/src/wire/bytes/mod.rs @@ -138,7 +138,7 @@ where /// SAFETY: The bytes have to actually be initialized. #[cfg(feature = "async")] unsafe fn assume_init_bytes(slice: &[MaybeUninit]) -> &[u8] { - &*(slice as *const [MaybeUninit] as *const [u8]) + unsafe { &*(slice as *const [MaybeUninit] as *const [u8]) } } /// Read a "bytes wire packet" of from the AsyncRead and tries to parse as string. diff --git a/snix/nix-compat/src/wire/bytes/reader/mod.rs b/snix/nix-compat/src/wire/bytes/reader/mod.rs index 6939fe9d4..ae13bff44 100644 --- a/snix/nix-compat/src/wire/bytes/reader/mod.rs +++ b/snix/nix-compat/src/wire/bytes/reader/mod.rs @@ -4,11 +4,11 @@ use std::{ num::NonZeroU64, ops::RangeBounds, pin::Pin, - task::{self, ready, Poll}, + task::{self, Poll, ready}, }; use tokio::io::{AsyncBufRead, AsyncRead, AsyncReadExt, ReadBuf}; -use trailer::{read_trailer, ReadTrailer, Trailer}; +use trailer::{ReadTrailer, Trailer, read_trailer}; #[doc(hidden)] pub use self::trailer::Pad; diff --git a/snix/nix-compat/src/wire/bytes/reader/trailer.rs b/snix/nix-compat/src/wire/bytes/reader/trailer.rs index 3a5bb75e7..35badcbda 100644 --- a/snix/nix-compat/src/wire/bytes/reader/trailer.rs +++ b/snix/nix-compat/src/wire/bytes/reader/trailer.rs @@ -4,7 +4,7 @@ use std::{ marker::PhantomData, ops::Deref, pin::Pin, - task::{self, ready, Poll}, + task::{self, Poll, ready}, }; use tokio::io::{self, AsyncRead, ReadBuf}; @@ -189,9 +189,11 @@ mod tests { #[tokio::test] async fn no_padding() { - assert!(read_trailer::<_, Pad>(io::empty(), 0) - .await - .unwrap() - .is_empty()); + assert!( + read_trailer::<_, Pad>(io::empty(), 0) + .await + .unwrap() + .is_empty() + ); } } diff --git a/snix/nix-compat/src/wire/bytes/writer.rs b/snix/nix-compat/src/wire/bytes/writer.rs index 8b9b59aa1..7fc869a59 100644 --- a/snix/nix-compat/src/wire/bytes/writer.rs +++ b/snix/nix-compat/src/wire/bytes/writer.rs @@ -1,9 +1,9 @@ use pin_project_lite::pin_project; -use std::task::{ready, Poll}; +use std::task::{Poll, ready}; use tokio::io::AsyncWrite; -use super::{padding_len, EMPTY_BYTES, LEN_SIZE}; +use super::{EMPTY_BYTES, LEN_SIZE, padding_len}; pin_project! { /// Writes a "bytes wire packet" to the underlying writer. @@ -102,10 +102,9 @@ where BytesPacketPosition::Size(pos) => { let size_field = &this.payload_len.to_le_bytes(); - let bytes_written = ensure_nonzero_bytes_written(ready!(this - .inner - .as_mut() - .poll_write(cx, &size_field[pos..]))?)?; + let bytes_written = ensure_nonzero_bytes_written(ready!( + this.inner.as_mut().poll_write(cx, &size_field[pos..]) + )?)?; let new_pos = pos + bytes_written; if new_pos == LEN_SIZE { @@ -138,7 +137,7 @@ where return Poll::Ready(Err(std::io::Error::new( std::io::ErrorKind::InvalidData, "tried to write excess bytes", - ))) + ))); } } } @@ -156,10 +155,9 @@ where BytesPacketPosition::Size(pos) => { // More bytes to write in the size field let size_field = &this.payload_len.to_le_bytes()[..]; - let bytes_written = ensure_nonzero_bytes_written(ready!(this - .inner - .as_mut() - .poll_write(cx, &size_field[pos..]))?)?; + let bytes_written = ensure_nonzero_bytes_written(ready!( + this.inner.as_mut().poll_write(cx, &size_field[pos..]) + )?)?; let new_pos = pos + bytes_written; if new_pos == LEN_SIZE { // Size field written, now ready to receive payload @@ -184,10 +182,11 @@ where let total_padding_len = padding_len(*this.payload_len) as usize; if pos != total_padding_len { - let bytes_written = ensure_nonzero_bytes_written(ready!(this - .inner - .as_mut() - .poll_write(cx, &EMPTY_BYTES[pos..total_padding_len]))?)?; + let bytes_written = ensure_nonzero_bytes_written(ready!( + this.inner + .as_mut() + .poll_write(cx, &EMPTY_BYTES[pos..total_padding_len]) + )?)?; *this.state = BytesPacketPosition::Padding(pos + bytes_written); } else { // everything written, break diff --git a/snix/nix-compat/src/wire/de/reader.rs b/snix/nix-compat/src/wire/de/reader.rs index b7825f393..2c16cece4 100644 --- a/snix/nix-compat/src/wire/de/reader.rs +++ b/snix/nix-compat/src/wire/de/reader.rs @@ -2,13 +2,13 @@ use std::future::poll_fn; use std::io::{self, Cursor}; use std::ops::RangeInclusive; use std::pin::Pin; -use std::task::{ready, Context, Poll}; +use std::task::{Context, Poll, ready}; use bytes::{Buf, BufMut, Bytes, BytesMut}; use pin_project_lite::pin_project; use tokio::io::{AsyncBufRead, AsyncRead, AsyncReadExt, ReadBuf}; -use crate::wire::{ProtocolVersion, EMPTY_BYTES}; +use crate::wire::{EMPTY_BYTES, ProtocolVersion}; use super::{Error, NixRead}; diff --git a/snix/nix-compat/src/wire/ser/mock.rs b/snix/nix-compat/src/wire/ser/mock.rs index 7104a9423..15bcea856 100644 --- a/snix/nix-compat/src/wire/ser/mock.rs +++ b/snix/nix-compat/src/wire/ser/mock.rs @@ -367,7 +367,7 @@ mod proptest { use std::io; use proptest::{ - prelude::{any, Arbitrary, BoxedStrategy, Just, Strategy}, + prelude::{Arbitrary, BoxedStrategy, Just, Strategy, any}, prop_oneof, }; @@ -487,15 +487,15 @@ mod proptest { #[cfg(test)] mod test { use hex_literal::hex; - use proptest::prelude::any; use proptest::prelude::TestCaseError; + use proptest::prelude::any; use proptest::proptest; - use crate::wire::ser::mock::proptest::arb_extra_write; - use crate::wire::ser::mock::Operation; - use crate::wire::ser::mock::OperationType; use crate::wire::ser::Error as _; use crate::wire::ser::NixWrite; + use crate::wire::ser::mock::Operation; + use crate::wire::ser::mock::OperationType; + use crate::wire::ser::mock::proptest::arb_extra_write; use super::{Builder, Error}; diff --git a/snix/nix-compat/src/wire/ser/writer.rs b/snix/nix-compat/src/wire/ser/writer.rs index da1c2b18c..0e5704ba2 100644 --- a/snix/nix-compat/src/wire/ser/writer.rs +++ b/snix/nix-compat/src/wire/ser/writer.rs @@ -2,13 +2,13 @@ use std::fmt::{self, Write as _}; use std::future::poll_fn; use std::io::{self, Cursor}; use std::pin::Pin; -use std::task::{ready, Context, Poll}; +use std::task::{Context, Poll, ready}; use bytes::{Buf, BufMut, BytesMut}; use pin_project_lite::pin_project; use tokio::io::{AsyncWrite, AsyncWriteExt}; -use crate::wire::{padding_len, ProtocolVersion, EMPTY_BYTES}; +use crate::wire::{EMPTY_BYTES, ProtocolVersion, padding_len}; use super::{Error, NixWrite};