summary refs log tree commit diff
path: root/pkgs/build-support/buildenv
diff options
context:
space:
mode:
authorMaximilian Bosch <maximilian@mbosch.me>2019-02-07 03:20:07 +0100
committerFrederik Rietdijk <freddyrietdijk@fridh.nl>2019-02-19 07:56:44 +0100
commit1cab56e01a284d8fb29ae6b07616732f5bd3079b (patch)
tree877c136094e21664141b045732299e657887a353 /pkgs/build-support/buildenv
parentb1bbd94bb680dbcb1c7b55128d129d5cdd3f81c3 (diff)
downloadnixpkgs-1cab56e01a284d8fb29ae6b07616732f5bd3079b.tar
nixpkgs-1cab56e01a284d8fb29ae6b07616732f5bd3079b.tar.gz
nixpkgs-1cab56e01a284d8fb29ae6b07616732f5bd3079b.tar.bz2
nixpkgs-1cab56e01a284d8fb29ae6b07616732f5bd3079b.tar.lz
nixpkgs-1cab56e01a284d8fb29ae6b07616732f5bd3079b.tar.xz
nixpkgs-1cab56e01a284d8fb29ae6b07616732f5bd3079b.tar.zst
nixpkgs-1cab56e01a284d8fb29ae6b07616732f5bd3079b.zip
buildEnv: break with a proper error if one path is actually a file
I noticed by creating `buildEnv` where I accidentally put a derivation
from `pkgs.writeText` into `paths` and got a broken build with the
following misleading error message:

```
Use of uninitialized value $stat1 in numeric ne (!=) at /nix/store/9g4wc31j7a2xp22xpgwr0qssfxahxdzl-builder.pl line 74.
Use of uninitialized value $stat1 in bitwise and (&) at /nix/store/9g4wc31j7a2xp22xpgwr0qssfxahxdzl-builder.pl line 75.
different permissions in `' and `/nix/store/0vy5ss91laxvwkyvrbld5hv27i88qk5w-noise': 0000 <-> 0444 at /nix/store/9g4wc31j7a2xp22xpgwr0qssfxahxdzl-builder.pl line 75.
```

It can be reproduced with an expression like this:

``` nix
{ pkgs ? import <nixpkgs> { } }:
let
  file = pkgs.writeText "test" ''
    content
  '';
in
  pkgs.buildEnv {
    name = "test-env";
    paths = [ /* ... */ file ];
  }
```
Diffstat (limited to 'pkgs/build-support/buildenv')
-rwxr-xr-xpkgs/build-support/buildenv/builder.pl4
1 files changed, 4 insertions, 0 deletions
diff --git a/pkgs/build-support/buildenv/builder.pl b/pkgs/build-support/buildenv/builder.pl
index 678f5a3fe9e..1f77edf86cb 100755
--- a/pkgs/build-support/buildenv/builder.pl
+++ b/pkgs/build-support/buildenv/builder.pl
@@ -84,6 +84,10 @@ 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!";
+    }
+
     # Urgh, hacky...
     return if
         $relName eq "/propagated-build-inputs" ||