diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2007-04-27 22:40:59 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2007-04-27 22:40:59 +0000 |
commit | 3d05166086682b39e013001bdaedb3e8b68a769f (patch) | |
tree | feb2c608b31cda127195a20c846a52229fe5cf4a | |
parent | b7f0f65c1934851b038826b2ab78c0378a36143a (diff) |
* Allow conflicting packages to be kept in a user environment, and
allow switching between them (NIX-80).
Example: two versions of Pan:
$ nix-env -q pan
pan-0.128
pan-0.14.2.91
$ readlink $(which pan)
/nix/store/l38jrbilw269drpjkx7kinhrxj6fjh59-pan-0.14.2.91/bin/pan
At most one of them can be active any given time. Assuming than
0.14.2.91 is active, you can active 0.128 as follows:
$ nix-env --set-flag active false pan-0.14.2.91
$ nix-env --set-flag active true pan-0.128
$ readlink $(which pan)
/nix/store/nziqwnlzy7xl385kglxhg75pfl5i936n-pan-0.128/bin/pan
More flags to follow.
-rwxr-xr-x | corepkgs/buildenv/builder.pl.in | 11 | ||||
-rw-r--r-- | corepkgs/buildenv/default.nix | 3 |
2 files changed, 11 insertions, 3 deletions
diff --git a/corepkgs/buildenv/builder.pl.in b/corepkgs/buildenv/builder.pl.in index 57fa56903..faebe27cc 100755 --- a/corepkgs/buildenv/builder.pl.in +++ b/corepkgs/buildenv/builder.pl.in @@ -108,10 +108,15 @@ sub addPkg { # Symlink to the packages that have been installed explicitly by the user. -my @args = split ' ', $ENV{"derivations"}; +my @paths = split ' ', $ENV{"derivations"}; +my @active = split ' ', $ENV{"active"}; -foreach my $pkgDir (sort @args) { - addPkg($pkgDir, 0); +die if scalar @paths != scalar @active; + +for (my $n = 0; $n < scalar @paths; $n++) { + my $pkgDir = $paths[$n]; + my $isActive = $active[$n]; + addPkg($pkgDir, 0) if $isActive ne "false"; } diff --git a/corepkgs/buildenv/default.nix b/corepkgs/buildenv/default.nix index 9bc704d8d..a5452db5e 100644 --- a/corepkgs/buildenv/default.nix +++ b/corepkgs/buildenv/default.nix @@ -6,4 +6,7 @@ derivation { builder = ./builder.pl; derivations = derivations; manifest = manifest; + + # !!! grmbl, need structured data for passing this in a clean way. + active = map (x: if x ? meta && x.meta ? active then x.meta.active else "true") derivations; } |