about summary refs log tree commit diff
path: root/scripts
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2013-07-19T09·23+0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2013-07-19T09·23+0200
commitdc5f2e7da607bdf50bf710cbe0b5f6ff32980e19 (patch)
treeb5a805fbcde4741ba1b0bb2c15205034344ac00b /scripts
parenta4921b8ceb5bde3fbd1ae25ea4b367199796eded (diff)
nix-build --run-env: Add a ‘--pure’ flag
This causes the environment to be (almost) cleared, thus giving a
shell that more closely resembled the actual Nix derivation.
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/nix-build.in17
1 files changed, 15 insertions, 2 deletions
diff --git a/scripts/nix-build.in b/scripts/nix-build.in
index fb70331bfa13..899882952b12 100755
--- a/scripts/nix-build.in
+++ b/scripts/nix-build.in
@@ -10,6 +10,7 @@ use File::Temp qw(tempdir);
 my $dryRun = 0;
 my $verbose = 0;
 my $runEnv = 0;
+my $pure = 0;
 
 my @instArgs = ();
 my @buildArgs = ();
@@ -134,6 +135,10 @@ for (my $n = 0; $n < scalar @ARGV; $n++) {
         push @envExclude, $ARGV[$n];
     }
 
+    elsif ($arg eq "--pure") {
+        $pure = 1;
+    }
+
     elsif (substr($arg, 0, 1) eq "-") {
         push @buildArgs, $arg;
     }
@@ -169,6 +174,14 @@ foreach my $expr (@exprs) {
             or die "$0: failed to build all dependencies\n";
 
         # Set the environment.
+        if ($pure) {
+            foreach my $name (keys %ENV) {
+                next if $name eq "HOME" || $name eq "USER" || $name eq "LOGNAME" || $name eq "DISPLAY" || $name eq "PATH";
+                delete $ENV{$name};
+            }
+            # NixOS hack: prevent /etc/bashrc from sourcing /etc/profile.
+            $ENV{'__ETC_PROFILE_SOURCED'} = 1;
+        }
         $ENV{'NIX_BUILD_TOP'} = $ENV{'TMPDIR'} || "/tmp";
         $ENV{$_} = $drv->{env}->{$_} foreach keys %{$drv->{env}};
 
@@ -180,9 +193,9 @@ foreach my $expr (@exprs) {
         writeFile(
             $rcfile,
             '[ -e ~/.bashrc ] && source ~/.bashrc; ' .
-            'p=$PATH; ' .
+            ($pure ? '' : 'p=$PATH; ' ).
             '[ -e $stdenv/setup ] && source $stdenv/setup; ' .
-            'PATH=$PATH:$p; ' .
+            ($pure ? '' : 'PATH=$PATH:$p; ') .
             'set +e; ' .
             'PS1="\n\[\033[1;32m\][nix-build:\w]$\[\033[0m\] "; ' .
             $envCommand);