выбор списка файлов в качестве входных данных сборки - PullRequest
1 голос
/ 25 мая 2019

Я хотел бы ограничить количество файлов, включаемых в мою сборку src, до нескольких избранных.Непосредственная передача списка файлов в src или srcs недопустима, поскольку архив или каталог ожидаются.Я не смог найти функцию для этого, и builtins.filterSource, похоже, не работает для меня (понятия не имею, почему - промежуточный дериват, содержащий отфильтрованные файлы, оказывается пустым):

    files = [
        ./Cargo.toml
        ./Cargo.lock
        ./cpu.rs
    ];
    src = builtins.filterSource (p: t: builtins.elem p files) ./.;

Примечание:Я использую rustPlatform строитель, но я не думаю, что это имеет значение.

1 Ответ

0 голосов
/ 26 мая 2019

filterSource передает полный путь в виде строки. чтобы сравнить пути вашего списка с ним, вам нужно преобразовать строку в путь:

$ cd /Users/fghibellini/code/nix
$ nix-instantiate --eval -E './a == "/Users/fghibellini/code/nix/a"'
false
$ nix-instantiate --eval -E './a == (/. + "/Users/fghibellini/code/nix/a")'
true

т.е. следующий код должен работать нормально:

files = [
    ./Cargo.toml
    ./Cargo.lock
    ./cpu.rs
];
src = builtins.filterSource (p: t: builtins.elem (/. + p) files) ./.;

Вы можете использовать builtins.typeOf и builtins.trace для устранения таких проблем.

...