nix-filter icon indicating copy to clipboard operation
nix-filter copied to clipboard

Support exact filer matching

Open ollie-etl opened this issue 1 year ago • 1 comments

I'd like to be able to specify exact files such as

rec { 
  artifact_a = nix-filter {
     root = ../../;
     include = [
        ./relative/path/to/a.ext
        ./another/path/to/b.ext
     ];
  };
  
  artifact_b = nix-filter {
     root = ../../;
     include = [
        artifact_a
        ./third/path/to/c.ext
     ];
  };
}

And i'd expect the output for artifact_b to contain

relative/path/to/a.ext, another/path/to/b.ext,
third/path/to/c.ext,

keeping the directory heirarchy.

Why?

It would allow the user to composable build src lists. Artifact A needs files x, y, artifact B needs A + file z, whilst maintaining their relative paths. Unsure how to achieve file level granularity currently

ollie-etl avatar Jun 23 '23 18:06 ollie-etl

I'm currently working on a file set combinator library for Nixpkgs which allows you to do essentially this!

let
  commonFiles = lib.fileset.unions [
    ./relative/path/to/a.ext
    ./another/path/to/b.ext
  ];
in {
  a = lib.fileset.toSource {
    root = ../..;
    fileset = commonFiles;
  };
  b = lib.fileset.toSource {
    root = ../..;
    fileset = lib.fileset.union
      commonFiles
      ./third/path/to/c.ext;
  };
}

infinisil avatar Oct 10 '23 18:10 infinisil