From 5904262640199599122fcf563e7d1c7c3f3f3128 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 6 Sep 2013 14:58:05 +0200 Subject: [PATCH] nix-shell: Support a .drv as argument Fixes #161. --- scripts/nix-build.in | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/scripts/nix-build.in b/scripts/nix-build.in index 73c92c9a7..d7805f83c 100755 --- a/scripts/nix-build.in +++ b/scripts/nix-build.in @@ -157,17 +157,22 @@ foreach my $expr (@exprs) { # Instantiate. my @drvPaths; - # !!! would prefer the perl 5.8.0 pipe open feature here. - my $pid = open(DRVPATHS, "-|") || exec "$Nix::Config::binDir/nix-instantiate", "--add-root", $drvLink, "--indirect", @instArgs, $expr; - while () {chomp; push @drvPaths, $_;} - if (!close DRVPATHS) { - die "nix-instantiate killed by signal " . ($? & 127) . "\n" if ($? & 127); - exit 1; + if ($expr !~ /^\/.*\.drv$/) { + # !!! would prefer the perl 5.8.0 pipe open feature here. + my $pid = open(DRVPATHS, "-|") || exec "$Nix::Config::binDir/nix-instantiate", "--add-root", $drvLink, "--indirect", @instArgs, $expr; + while () {chomp; push @drvPaths, $_;} + if (!close DRVPATHS) { + die "nix-instantiate killed by signal " . ($? & 127) . "\n" if ($? & 127); + exit 1; + } + } else { + push @drvPaths, $expr; } if ($runEnv) { die "$0: a single derivation is required\n" if scalar @drvPaths != 1; - my $drvPath = readlink $drvPaths[0] or die "cannot read symlink `$drvPaths[0]'"; + my $drvPath = $drvPaths[0]; + $drvPath = readlink $drvPath or die "cannot read symlink `$drvPath'" if -l $drvPath; my $drv = derivationFromPath($drvPath); # Build or fetch all dependencies of the derivation. @@ -235,7 +240,7 @@ foreach my $expr (@exprs) { # Build. my @outPaths; - $pid = open(OUTPATHS, "-|") || exec "$Nix::Config::binDir/nix-store", "--add-root", $outLink, "--indirect", "-r", + my $pid = open(OUTPATHS, "-|") || exec "$Nix::Config::binDir/nix-store", "--add-root", $outLink, "--indirect", "-r", @buildArgs, @drvPaths2; while () {chomp; push @outPaths, $_;} if (!close OUTPATHS) {