refactor(snix/utils): use filterRustCrateSrc directly

Move this into a let binding and reuse it further down in
defaultCrateOverridesForPkgs, rather than going through the fixpoint.

Change-Id: I9df86189ee788adbecfabf64a09463103e4a626f
Reviewed-on: https://cl.snix.dev/c/snix/+/30103
Autosubmit: Florian Klink <flokli@flokli.de>
Tested-by: besadii
Reviewed-by: Vova Kryachko <v.kryachko@gmail.com>
This commit is contained in:
Florian Klink 2025-03-18 14:57:08 +00:00 committed by clbot
parent aefa1eaa28
commit 0b7d0e7989

View file

@ -1,26 +1,6 @@
{ pkgs, lib, depot, ... }: { pkgs, lib, depot, ... }:
{ let
mkFeaturePowerset = { crateName, features, override ? { } }:
let
powerset = xs:
let
addElement = set: element:
set ++ map (e: [ element ] ++ e) set;
in
lib.foldl' addElement [ [ ] ] xs;
in
lib.listToAttrs (map
(featuresPowerset: {
name = if featuresPowerset != [ ] then "with-features-${lib.concatStringsSep "-" featuresPowerset}" else "no-features";
value = depot.snix.crates.workspaceMembers.${crateName}.build.override (old: {
runTests = true;
features = featuresPowerset;
} // (if lib.isFunction override then override old else override)
);
})
(powerset features));
# Filters the given source, only keeping files related to the build, preventing unnecessary rebuilds. # Filters the given source, only keeping files related to the build, preventing unnecessary rebuilds.
# Includes src in the root, all other .rs files and optionally Cargo specific files. # Includes src in the root, all other .rs files and optionally Cargo specific files.
# Additional files to be included can be specified in extraFileset. # Additional files to be included can be specified in extraFileset.
@ -42,31 +22,55 @@
] ++ lib.optional (extraFileset != null) extraFileset)); ] ++ lib.optional (extraFileset != null) extraFileset));
}; };
in
{
mkFeaturePowerset = { crateName, features, override ? { } }:
let
powerset = xs:
let
addElement = set: element:
set ++ map (e: [ element ] ++ e) set;
in
lib.foldl' addElement [ [ ] ] xs;
in
lib.listToAttrs (map
(featuresPowerset: {
name = if featuresPowerset != [ ] then "with-features-${lib.concatStringsSep "-" featuresPowerset}" else "no-features";
value = depot.snix.crates.workspaceMembers.${crateName}.build.override (old: {
runTests = true;
features = featuresPowerset;
} // (if lib.isFunction override then override old else override)
);
})
(powerset features));
inherit filterRustCrateSrc;
# A function which takes a pkgs instance and returns an overriden defaultCrateOverrides with support for snix crates. # A function which takes a pkgs instance and returns an overriden defaultCrateOverrides with support for snix crates.
# This can be used throughout the rest of the repo. # This can be used throughout the rest of the repo.
defaultCrateOverridesForPkgs = pkgs: defaultCrateOverridesForPkgs = pkgs:
pkgs.defaultCrateOverrides // { pkgs.defaultCrateOverrides // {
nar-bridge = prev: { nar-bridge = prev: {
src = depot.snix.utils.filterRustCrateSrc { root = prev.src.origSrc; }; src = filterRustCrateSrc { root = prev.src.origSrc; };
}; };
nix-compat = prev: { nix-compat = prev: {
src = depot.snix.utils.filterRustCrateSrc rec { src = filterRustCrateSrc rec {
root = prev.src.origSrc; root = prev.src.origSrc;
extraFileset = root + "/testdata"; extraFileset = root + "/testdata";
}; };
}; };
nix-compat-derive = prev: { nix-compat-derive = prev: {
src = depot.snix.utils.filterRustCrateSrc { root = prev.src.origSrc; }; src = filterRustCrateSrc { root = prev.src.origSrc; };
}; };
nix-compat-derive-tests = prev: { nix-compat-derive-tests = prev: {
src = depot.snix.utils.filterRustCrateSrc { root = prev.src.origSrc; }; src = filterRustCrateSrc { root = prev.src.origSrc; };
}; };
snix-build = prev: { snix-build = prev: {
src = depot.snix.utils.filterRustCrateSrc rec { src = filterRustCrateSrc rec {
root = prev.src.origSrc; root = prev.src.origSrc;
extraFileset = lib.fileset.fileFilter (f: f.hasExt "proto") root; extraFileset = lib.fileset.fileFilter (f: f.hasExt "proto") root;
}; };
@ -76,7 +80,7 @@
}; };
snix-castore = prev: { snix-castore = prev: {
src = depot.snix.utils.filterRustCrateSrc rec { src = filterRustCrateSrc rec {
root = prev.src.origSrc; root = prev.src.origSrc;
extraFileset = lib.fileset.fileFilter (f: f.hasExt "proto") root; extraFileset = lib.fileset.fileFilter (f: f.hasExt "proto") root;
}; };
@ -85,14 +89,14 @@
}; };
snix-cli = prev: { snix-cli = prev: {
src = depot.snix.utils.filterRustCrateSrc rec { src = filterRustCrateSrc rec {
root = prev.src.origSrc; root = prev.src.origSrc;
extraFileset = root + "/tests"; extraFileset = root + "/tests";
}; };
}; };
snix-store = prev: { snix-store = prev: {
src = depot.snix.utils.filterRustCrateSrc rec { src = filterRustCrateSrc rec {
root = prev.src.origSrc; root = prev.src.origSrc;
extraFileset = lib.fileset.fileFilter (f: f.hasExt "proto") root; extraFileset = lib.fileset.fileFilter (f: f.hasExt "proto") root;
}; };
@ -101,28 +105,28 @@
}; };
snix-eval-builtin-macros = prev: { snix-eval-builtin-macros = prev: {
src = depot.snix.utils.filterRustCrateSrc { root = prev.src.origSrc; }; src = filterRustCrateSrc { root = prev.src.origSrc; };
}; };
snix-eval = prev: { snix-eval = prev: {
src = depot.snix.utils.filterRustCrateSrc rec { src = filterRustCrateSrc rec {
root = prev.src.origSrc; root = prev.src.origSrc;
extraFileset = root + "/proptest-regressions"; extraFileset = root + "/proptest-regressions";
}; };
}; };
snix-glue = prev: { snix-glue = prev: {
src = depot.snix.utils.filterRustCrateSrc { src = filterRustCrateSrc {
root = prev.src.origSrc; root = prev.src.origSrc;
}; };
}; };
snix-serde = prev: { snix-serde = prev: {
src = depot.snix.utils.filterRustCrateSrc { root = prev.src.origSrc; }; src = filterRustCrateSrc { root = prev.src.origSrc; };
}; };
snix-tracing = prev: { snix-tracing = prev: {
src = depot.snix.utils.filterRustCrateSrc { root = prev.src.origSrc; }; src = filterRustCrateSrc { root = prev.src.origSrc; };
}; };
}; };