Commit Graph

24 Commits

Author SHA1 Message Date
Maximilian Bosch
9fcd3bffc2 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.
2019-02-21 10:37:42 +01:00
Maximilian Bosch
1cab56e01a 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 ];
  }
```
2019-02-19 07:56:44 +01:00
Alexey Shmalko
0172558e82 buildEnv: build the whole tree of directories to pathsToLink
This patch fixes #16614 and #16741.

The first issue was caused by the fact that both `/share` and
`/share/fish/vendor_completions.d` end in the `pathsToLink`. The
`pkgs/build-support/buildenv/builder.pl` creates `/share`, then links
`/share/fish` under `/share` and then tries to create the directory
`/share/fish/vendor_completions.d` and fails because it already exists.

The simplest way to reproduce the issue is to build the next Nix
expression:

```nix
let pkgs = import <nixpkgs> { };
in pkgs.buildEnv {
  name = "buildenv-issue";

  paths = [
    pkgs.fish
    pkgs.vim
  ];

  pathsToLink = [
    "/share"
    "/share/fish/vendor_completions.d"
  ];
}
```

The second issue is more critical and was caused by the fact findFiles
doesn't recurse deep enough. It stops at first unique directory for the
package (e.g., "/share" or even "/") and later the scripts decides it
shouldn't link it as it doesn't match pathsToLink (e.g., "/share/fish"),
so the result is empty.

The test:
```nix
let pkgs = import <nixpkgs> { };
in pkgs.buildEnv {
  name = "buildenv-issue";

  paths = [
    pkgs.fish
    pkgs.vim
  ];

  pathsToLink = [
    "/share/fish/functions"
  ];
}
```

or

```nix
let pkgs = import <nixpkgs> { };
in pkgs.buildEnv {
  name = "buildenv-issue";

  paths = [
    pkgs.vim
  ];

  pathsToLink = [
    "/share"
  ];
}
```
2016-07-13 03:54:11 +03:00
aszlig
ab84149c99
buildEnv: Pass the right number of args to addPkg
Regression introduced by 4529ed1259.

I've missed this in #5096, not because of a messed up rebase as I have
guessed from a comment on #12635 but missed this in the first place.

The testing I did while working on the pull request weren't exhaustive
enough to cover this, because I haven't tested with packages that use
the propagatedUserEnvPkgs attribute.

In order to make the test a bit more exhaustive this time, let's test it
using:

nix-build -E 'with import ./. {}; buildEnv {
  name = "testenv";
  paths = [
    pkgs.hello pkgs.binutils pkgs.libsoup pkgs.gnome3.yelp
    pkgs.gnome3.totem
  ];
}'

And with this commit the errors no longer show up and the environment is
built correctly.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Fixes: #12635
2016-01-28 14:50:44 +01:00
aszlig
bfb11fd030
buildEnv: Skip content check on ignoreCollisions.
Checking file contents is redundant in this case, because we will go
ahead anyway, regardless of whether the content is the same.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
2016-01-18 03:56:09 +01:00
aszlig
4529ed1259
buildEnv: Check the content of colliding paths.
Originally wanted to include ignoreCollisions in cups-progs, but I think
it's better if we use ignoreCollisions only if there are _real_
collisions between files with different contents.

Of course, we also check whether the file permissions match, so you get
a collision if contents are the same but the permissions are different.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
2016-01-18 03:54:22 +01:00
Nikolay Amiantov
d49140f3e4 buildenv: support very long paths 2015-10-22 15:35:39 +03:00
Vladimír Čunát
fa33b083eb buildEnv: add new parameters: extraPrefix and buildInputs 2015-09-17 17:43:18 +02:00
Eelco Dolstra
e2a9541efc buildEnv: Fix handling of empty list of packages 2015-08-25 11:13:34 +02:00
Eelco Dolstra
e4610f2965 buildEnv: Support package priorities like nix-env
This gets rid of a bunch of collision warnings.
2015-08-25 00:40:40 +02:00
Eelco Dolstra
03f9026ac5 buildEnv: don't warn about collisions in propagated packages
This mimicks buildenv in Nix more closely.
2012-07-25 23:18:39 -04:00
Eelco Dolstra
a2102af6df * buildEnv: use $SHELL (i.e. bash) rather than /bin/sh. This allows
NixOS VM tests to be built on Ubuntu, where /bin/sh is dash rather
  than bash.

svn path=/nixpkgs/trunk/; revision=24592
2010-11-03 22:37:00 +00:00
Eelco Dolstra
e875ec2524 * Make sure that if pathsToLink contains an element such as
"/share/info" that it doesn't match "/share/information.nix".

svn path=/nixpkgs/trunk/; revision=23059
2010-08-09 16:08:02 +00:00
Eelco Dolstra
4ed96dfbc2 * Ignore non-existant directories.
svn path=/nixpkgs/trunk/; revision=23026
2010-08-07 18:41:43 +00:00
Eelco Dolstra
3c824666fd * Remove the call to update-mime-database, which doesn't belong here
but in the postBuild hook.

svn path=/nixpkgs/trunk/; revision=22527
2010-07-08 12:55:03 +00:00
Eelco Dolstra
a6fcf45726 * First figure out what symlinks need to be created, then create
them.  This prevents unnecessary unlink operations to resolve
  collisions between directories.

svn path=/nixpkgs/trunk/; revision=22526
2010-07-08 12:52:17 +00:00
Yury G. Kudryashov
99e825a42c Build MIME database from all available packages
svn path=/nixpkgs/trunk/; revision=21076
2010-04-14 19:26:50 +00:00
Yury G. Kudryashov
295af6ab17 Ignore fake collisions
svn path=/nixpkgs/trunk/; revision=21075
2010-04-14 19:26:31 +00:00
Yury G. Kudryashov
31d047a83f Remove tabs
svn path=/nixpkgs/trunk/; revision=21004
2010-04-10 20:27:09 +00:00
Marc Weber
349de9bafe revrting my accident only keeping rubygem updates and ruby libs
This partially reverts commit -r 16100

svn path=/nixpkgs/trunk/; revision=16107
2009-06-30 15:58:02 +00:00
Marc Weber
d1e39e78f9 adding rubygems support to nix - implemented target libraries/apps: sup mail client
svn path=/nixpkgs/trunk/; revision=16100
2009-06-30 14:29:20 +00:00
Eelco Dolstra
2d89fb4fee * Support a post-install hook.
svn path=/nixpkgs/trunk/; revision=14142
2009-02-20 15:40:11 +00:00
Eelco Dolstra
69b62bf2d6 * Process packages in the specified order (i.e., don't sort).
svn path=/nixpkgs/trunk/; revision=8166
2007-03-04 01:20:07 +00:00
Eelco Dolstra
153d4e65a1 * Fork of build-env in the Nix distribution. This one supports
ignoring collisions and selectively including directories.

svn path=/nixpkgs/trunk/; revision=7160
2006-11-28 16:46:12 +00:00