about summary refs log tree commit diff
path: root/scripts/nix-populate
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2003-04-09T12·26+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2003-04-09T12·26+0000
commitaa8fda4b54fbd84b7bc6b11904c156367683e8f6 (patch)
tree736e0545b69f5062be1d8bb366bd0617e8469911 /scripts/nix-populate
parentf56b7312b273546871a1eca7d34c60474d3c4050 (diff)
* We no longer use nix-populate standalone, rather we use it as a
  build action for `system' packages (like system.fix) that have
  dependencies on all packages we want to activate.

  So the command sequence to switch to a new activation configuration
  of the system would be:

    $ fix -i .../fixdescriptors/system.fix
    ...
    system.fix -> 89cf4713b37cc66989304abeb9ea189f

    $ nix-switch 89cf4713b37cc66989304abeb9ea189f

* A nix-profile.sh script that can be included in .bashrc.

Diffstat (limited to 'scripts/nix-populate')
-rwxr-xr-xscripts/nix-populate49
1 files changed, 9 insertions, 40 deletions
diff --git a/scripts/nix-populate b/scripts/nix-populate
index 50819d6664d4..d375caa7d3d0 100755
--- a/scripts/nix-populate
+++ b/scripts/nix-populate
@@ -1,23 +1,16 @@
 #! /usr/bin/perl -w
 
 use strict;
+use Cwd;
 
-my $pkglist = $ENV{"NIX_ACTIVATIONS"};
-$pkglist or die "NIX_ACTIVATIONS not set";
-my $linkdir = $ENV{"NIX_LINKS"};
-$linkdir or die "NIX_LINKS not set";
-my @dirs = ("bin", "sbin", "lib", "include");
+my $selfdir = cwd;
 
-# Figure out a generation number.
-my $nr = 1;
-while (-e "$linkdir/$nr") { $nr++; }
-my $gendir = "$linkdir/$nr";
-print "populating $gendir\n";
+my @dirs = ("bin", "sbin", "lib", "include");
 
 # Create the subdirectories.
-mkdir $gendir;
+mkdir $selfdir;
 foreach my $dir (@dirs) {
-    mkdir "$gendir/$dir";
+    mkdir "$selfdir/$dir";
 }
 
 # For each activated package, create symlinks.
@@ -51,39 +44,15 @@ sub createLinks {
     }
 }
 
+foreach my $name (keys %ENV) {
 
-open PKGS, "< $pkglist";
+    next unless ($name =~ /^act.*$/);
 
-while (<PKGS>) {
-    chomp;
-    my $hash = $_;
-    
-    my $pkgdir = `nix getpkg $hash`;
-    if ($?) { die "`nix getpkg' failed"; }
-    chomp $pkgdir;
+    my $pkgdir = $ENV{$name};
 
     print "merging $pkgdir\n";
 
     foreach my $dir (@dirs) {
-	createLinks("$pkgdir/$dir", "$gendir/$dir");
+	createLinks("$pkgdir/$dir", "$selfdir/$dir");
     }
 }
-
-close PKGS;
-
-# Make $gendir the current generation by pointing $linkdir/current to
-# it.  The rename() system call is supposed to be essentially atomic
-# on Unix.  That is, if we have links `current -> X' and `new_current
-# -> Y', and we rename new_current to current, a process accessing
-# current will see X or Y, but never a file-not-found or other error
-# condition.  This is sufficient to atomically switch the current link
-# tree.
-
-my $current = "$linkdir/current";
-
-print "switching $current to $gendir\n"; 
-
-my $tmplink = "$linkdir/new_current";
-symlink($gendir, $tmplink) or die "cannot create $tmplink";
-rename($tmplink, $current) or die "cannot rename $tmplink";
-