buildEnv: improve file check to avoid false-positives
The original change in #55372 was supposed to fix the case where a store path which is a file should be placed into `buildEnv` which broke with a fairly misleading Perl error. Unfortunately this introduced a regression, `findFiles` can have targets that are files if the file isn't a store path. Rather than adding more obscure checks with probably further regressions, I figured that it's better to replicate the behavior of `lib.isStorePath` and explicitly check if the store path is a file and break in this case only. This should also fix recent staging issues.
This commit is contained in:
committed by
Frederik Rietdijk
parent
e2cd07b997
commit
9fcd3bffc2
@@ -26,6 +26,13 @@ sub isInPathsToLink {
|
||||
return 0;
|
||||
}
|
||||
|
||||
# Similar to `lib.isStorePath`
|
||||
sub isStorePath {
|
||||
my $path = shift;
|
||||
my $storePath = "@storeDir@";
|
||||
|
||||
return substr($path, 0, 1) eq "/" && dirname($path) eq $storePath;
|
||||
}
|
||||
|
||||
# For each activated package, determine what symlinks to create.
|
||||
|
||||
@@ -84,8 +91,9 @@ sub checkCollision {
|
||||
sub findFiles {
|
||||
my ($relName, $target, $baseName, $ignoreCollisions, $checkCollisionContents, $priority) = @_;
|
||||
|
||||
if (-f $target) {
|
||||
die "Path $target is a file and can't be merged into an environment using pkgs.buildEnv!";
|
||||
# The store path must not be a file
|
||||
if (-f $target && isStorePath $target) {
|
||||
die "The store path $target is a file and can't be merged into an environment using pkgs.buildEnv!";
|
||||
}
|
||||
|
||||
# Urgh, hacky...
|
||||
|
||||
Reference in New Issue
Block a user