* 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.
This commit is contained in:
Eelco Dolstra 2007-04-27 22:40:59 +00:00
parent b7f0f65c19
commit 3d05166086
2 changed files with 11 additions and 3 deletions

View file

@ -108,10 +108,15 @@ sub addPkg {
# Symlink to the packages that have been installed explicitly by the user. # 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) { die if scalar @paths != scalar @active;
addPkg($pkgDir, 0);
for (my $n = 0; $n < scalar @paths; $n++) {
my $pkgDir = $paths[$n];
my $isActive = $active[$n];
addPkg($pkgDir, 0) if $isActive ne "false";
} }

View file

@ -6,4 +6,7 @@ derivation {
builder = ./builder.pl; builder = ./builder.pl;
derivations = derivations; derivations = derivations;
manifest = manifest; 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;
} }