From 3c92ea399d717dc45b3fa91424c0dadc0239ebf2 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Sat, 2 Aug 2008 12:54:35 +0000 Subject: * Make nix-env --dry-run print the paths to be substituted correctly again. (After the previous substituter mechanism refactoring I didn't update the code that obtains the references of substitutable paths.) This required some refactoring: the substituter programs are now kept running and receive/respond to info requests via stdin/stdout. --- scripts/download-using-manifests.pl.in | 77 ++++++++++++++++++---------------- 1 file changed, 42 insertions(+), 35 deletions(-) (limited to 'scripts/download-using-manifests.pl.in') diff --git a/scripts/download-using-manifests.pl.in b/scripts/download-using-manifests.pl.in index c0b822b91..e862a2d9f 100644 --- a/scripts/download-using-manifests.pl.in +++ b/scripts/download-using-manifests.pl.in @@ -5,27 +5,18 @@ use readmanifest; use POSIX qw(strftime); use File::Temp qw(tempdir); +STDOUT->autoflush(1); + my $manifestDir = "@localstatedir@/nix/manifests"; my $logFile = "@localstatedir@/log/nix/downloads"; -# Create a temporary directory. -my $tmpDir = tempdir("nix-download.XXXXXX", CLEANUP => 1, TMPDIR => 1) - or die "cannot create a temporary directory"; - -chdir $tmpDir or die "cannot change to `$tmpDir': $!"; - -my $tmpNar = "$tmpDir/nar"; -my $tmpNar2 = "$tmpDir/nar2"; - - # Load all manifests. my %narFiles; my %localPaths; my %patches; for my $manifest (glob "$manifestDir/*.nixmanifest") { -# print STDERR "reading $manifest\n"; if (readManifest($manifest, \%narFiles, \%localPaths, \%patches) < 3) { print STDERR "you have an old-style manifest `$manifest'; please delete it\n"; exit 1; @@ -35,34 +26,40 @@ for my $manifest (glob "$manifestDir/*.nixmanifest") { # Parse the arguments. -if ($ARGV[0] eq "--query-paths") { - foreach my $storePath (keys %narFiles) { print "$storePath\n"; } - foreach my $storePath (keys %localPaths) { print "$storePath\n"; } - exit 0; -} +if ($ARGV[0] eq "--query") { -elsif ($ARGV[0] eq "--query-info") { - shift @ARGV; - foreach my $storePath (@ARGV) { - my $info; - if (defined $narFiles{$storePath}) { - $info = @{$narFiles{$storePath}}[0]; - } - elsif (defined $localPaths{$storePath}) { - $info = @{$localPaths{$storePath}}[0]; - } - else { - next; # not an error + while () { + my $cmd = $_; chomp $cmd; + + if ($cmd eq "have") { + my $storePath = ; chomp $storePath; + print STDOUT ((defined $narFiles{$storePath} or defined $localPaths{$storePath}) + ? "1\n" : "0\n"); } - print "$storePath\n"; - print "$info->{deriver}\n"; - my @references = split " ", $info->{references}; - my $count = scalar @references; - print "$count\n"; - foreach my $reference (@references) { - print "$reference\n"; + + elsif ($cmd eq "info") { + my $storePath = ; chomp $storePath; + my $info; + if (defined $narFiles{$storePath}) { + $info = @{$narFiles{$storePath}}[0]; + } + elsif (defined $localPaths{$storePath}) { + $info = @{$localPaths{$storePath}}[0]; + } + else { + print "0\n"; + next; # not an error + } + print "1\n"; + print "$info->{deriver}\n"; + my @references = split " ", $info->{references}; + print scalar @references, "\n"; + print "$_\n" foreach @references; } + + else { die "unknown command `$cmd'"; } } + exit 0; } @@ -75,6 +72,16 @@ die unless scalar @ARGV == 2; my $targetPath = $ARGV[1]; +# Create a temporary directory. +my $tmpDir = tempdir("nix-download.XXXXXX", CLEANUP => 1, TMPDIR => 1) + or die "cannot create a temporary directory"; + +chdir $tmpDir or die "cannot change to `$tmpDir': $!"; + +my $tmpNar = "$tmpDir/nar"; +my $tmpNar2 = "$tmpDir/nar2"; + + open LOGFILE, ">>$logFile" or die "cannot open log file $logFile"; my $date = strftime ("%F %H:%M:%S UTC", gmtime (time)); -- cgit v1.2.3