* 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:
		
							parent
							
								
									b7f0f65c19
								
							
						
					
					
						commit
						3d05166086
					
				
					 2 changed files with 11 additions and 3 deletions
				
			
		|  | @ -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"; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -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; | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue