numtide / nix-filter

a small self-contained source filtering lib
MIT License
200 stars 17 forks source link

Support exact filer matching #40

Open ollie-etl opened 1 year ago

ollie-etl commented 1 year ago

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

infinisil commented 1 year ago

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;
  };
}