Commit graph

26 commits

Author SHA1 Message Date
José Romildo Malaquias 4a1ef63c55 buildenv: paths to link resolving to the same absolute path is not a conflict
When building an environment if two paths conflict but one or both are
symbolic links and they resolve to the same real path, the conflict is
discarded because the contents of both paths are the same. One of them
is chosen and there is no need to recur into them in order to build
deeper symbolic links.
2020-06-10 06:42:48 -03:00
Linus Heckemann 3125ab3afe buildEnv: check pathsToLink before checking collisions
Fixes #32683
2019-09-18 15:13:50 +02:00
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