* 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. | # 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"; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -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; | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue