nix-shell: Support a .drv as argument

Fixes #161.
This commit is contained in:
Eelco Dolstra 2013-09-06 14:58:05 +02:00
parent 2c1ecf8e81
commit 5904262640
1 changed files with 13 additions and 8 deletions

View File

@ -157,17 +157,22 @@ foreach my $expr (@exprs) {
# Instantiate. # Instantiate.
my @drvPaths; my @drvPaths;
# !!! would prefer the perl 5.8.0 pipe open feature here. if ($expr !~ /^\/.*\.drv$/) {
my $pid = open(DRVPATHS, "-|") || exec "$Nix::Config::binDir/nix-instantiate", "--add-root", $drvLink, "--indirect", @instArgs, $expr; # !!! would prefer the perl 5.8.0 pipe open feature here.
while (<DRVPATHS>) {chomp; push @drvPaths, $_;} my $pid = open(DRVPATHS, "-|") || exec "$Nix::Config::binDir/nix-instantiate", "--add-root", $drvLink, "--indirect", @instArgs, $expr;
if (!close DRVPATHS) { while (<DRVPATHS>) {chomp; push @drvPaths, $_;}
die "nix-instantiate killed by signal " . ($? & 127) . "\n" if ($? & 127); if (!close DRVPATHS) {
exit 1; die "nix-instantiate killed by signal " . ($? & 127) . "\n" if ($? & 127);
exit 1;
}
} else {
push @drvPaths, $expr;
} }
if ($runEnv) { if ($runEnv) {
die "$0: a single derivation is required\n" if scalar @drvPaths != 1; 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); my $drv = derivationFromPath($drvPath);
# Build or fetch all dependencies of the derivation. # Build or fetch all dependencies of the derivation.
@ -235,7 +240,7 @@ foreach my $expr (@exprs) {
# Build. # Build.
my @outPaths; 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; @buildArgs, @drvPaths2;
while (<OUTPATHS>) {chomp; push @outPaths, $_;} while (<OUTPATHS>) {chomp; push @outPaths, $_;}
if (!close OUTPATHS) { if (!close OUTPATHS) {