diff options
Diffstat (limited to 'tvix/utils.nix')
-rw-r--r-- | tvix/utils.nix | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/tvix/utils.nix b/tvix/utils.nix index ed751566bd9c..5edc1dc2e856 100644 --- a/tvix/utils.nix +++ b/tvix/utils.nix @@ -20,4 +20,23 @@ ); }) (powerset features)); + + # Filters the given source, only keeping files related to the build, preventing unnecessary rebuilds. + # Includes src in the root, all other .rs files, as well as Cargo.toml. + # Additional files to be included can be specified in extraFileset. + filterRustCrateSrc = + { root # The original src + , extraFileset ? null # Additional filesets to include (e.g. fileFilter for proto files) + }: + lib.fileset.toSource { + inherit root; + fileset = (lib.fileset.intersection + (lib.fileset.fromSource root) # We build our final fileset from the original src + (lib.fileset.unions ([ + (root + "/src") + (lib.fileset.fileFilter (f: f.hasExt "rs") root) + # We assume that every Rust crate will at a minimum have .rs files and a Cargo.toml + (lib.fileset.fileFilter (f: f.name == "Cargo.toml") root) + ] ++ lib.optional (extraFileset != null) extraFileset))); + }; } |