lib.fileset.toSource: Evaluate fileset even for empty directories

This commit is contained in:
Silvan Mosberger 2023-09-13 22:26:16 +02:00
parent 19b39dcc93
commit 7d4eb3f1b7
3 changed files with 7 additions and 1 deletions

View File

@ -92,6 +92,7 @@ The only way to change which files get added to the store is by changing the `fi
fileset = _coerce "lib.fileset.toSource: `fileset`" filesetPath;
rootFilesystemRoot = (splitRoot root).root;
filesetFilesystemRoot = (splitRoot fileset._internalBase).root;
filter = _toSourceFilter fileset;
in
if ! isPath root then
if isStringLike root then
@ -123,9 +124,10 @@ The only way to change which files get added to the store is by changing the `fi
- Set `root` to ${toString fileset._internalBase} or any directory higher up. This changes the layout of the resulting store path.
- Set `fileset` to a file set that cannot contain files outside the `root` ${toString root}. This could change the files included in the result.''
else
builtins.seq filter
cleanSourceWith {
name = "source";
src = root;
filter = _toSourceFilter fileset;
inherit filter;
};
}

View File

@ -294,6 +294,7 @@ rec {
in
# Special case because the code below assumes that the _internalBase is always included in the result
# which shouldn't be done when we have no files at all in the base
# This also forces the tree before returning the filter, leads to earlier error messages
if tree == null then
empty
else

View File

@ -246,6 +246,9 @@ expectFailure 'toSource { root = ./a; fileset = ./a; }' 'lib.fileset.toSource: `
\s*- If you want to import the file into the store _with_ a containing directory, set `root` to the containing directory, such as '"$work"', and set `fileset` to the file path.'
rm -rf *
# The fileset argument should be evaluated, even if the directory is empty
expectFailure 'toSource { root = ./.; fileset = abort "This should be evaluated"; }' 'evaluation aborted with the following error message: '\''This should be evaluated'\'
# Only paths under `root` should be able to influence the result
mkdir a
expectFailure 'toSource { root = ./a; fileset = ./.; }' 'lib.fileset.toSource: `fileset` could contain files in '"$work"', which is not under the `root` '"$work"'/a. Potential solutions: