From c7bdb76fe461e2335caeea01c16b39a2784fa506 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 21 Jul 2003 21:34:56 +0000 Subject: [PATCH] * Syntax fixes. * When pushing, put the hash in the file name so that the client can verify (proof-carrying file names?). --- corepkgs/nar/nar.fix | 4 ++-- corepkgs/nar/nar.sh.in | 7 ++++++- scripts/nix-push.in | 30 ++++++++++++++++++++---------- scripts/nix-switch.in | 8 ++++---- 4 files changed, 32 insertions(+), 17 deletions(-) diff --git a/corepkgs/nar/nar.fix b/corepkgs/nar/nar.fix index 3db6a48a0..429e7b549 100644 --- a/corepkgs/nar/nar.fix +++ b/corepkgs/nar/nar.fix @@ -1,6 +1,6 @@ -Function(["path", "name"], +Function(["path"], Package( - [ ("name", Var("name")) + [ ("name", "nar") , ("build", Relative("nar/nar.sh")) , ("path", Var("path")) ] diff --git a/corepkgs/nar/nar.sh.in b/corepkgs/nar/nar.sh.in index bffbbaf5e..d21668553 100644 --- a/corepkgs/nar/nar.sh.in +++ b/corepkgs/nar/nar.sh.in @@ -1,5 +1,10 @@ #! /bin/sh echo "packing $path into $out..." -@bindir@/nix --dump --file "$path" | bzip2 > $out || exit 1 +mkdir $out || exit 1 +tmp=$out/tmp +@bindir@/nix --dump --path "$path" | bzip2 > $out/tmp || exit 1 +md5=$(md5sum -b $tmp | cut -c1-32) +if test $? != 0; then exit 1; fi +mv $out/tmp $out/$md5-`basename $path`.nar.bz2 || exit 1 diff --git a/scripts/nix-push.in b/scripts/nix-push.in index bb25019e8..4a6426fe0 100644 --- a/scripts/nix-push.in +++ b/scripts/nix-push.in @@ -8,17 +8,28 @@ foreach my $id (@ARGV) { # Get all paths referenced by the normalisation of the given # fstate expression. - system "nix -ih $id"; - if ($?) { die "`nix -ih' failed"; } + system "nix --install $id"; + if ($?) { die "`nix --install' failed"; } + my @paths; - open PATHS, "nix -qrh $id 2> /dev/null |" or die "nix -qrh"; + + open PATHS, "nix --query --refs $id 2> /dev/null |" or die "nix -qr"; while () { chomp; - next unless /^\//; + die "bad: $_" unless /^\//; push @paths, $_; } close PATHS; + # Also add all normal forms that are contained in these paths. + open PATHS, "nix --query --generators --path @paths |" or die "nix -qg"; + while () { + chomp; + die "bad: $_" unless /^\//; + push @paths, $_; + } + close PATHS; + # For each path, create a Fix expression that turns the path into # a Nix archive. foreach my $path (@paths) { @@ -38,7 +49,6 @@ foreach my $id (@ARGV) { my $fixexpr = "App(IncludeFix(\"nar/nar.fix\"), " . "[ (\"path\", Slice([\"$pathid\"], [(\"$path\", \"$pathid\", [])]))" . - ", (\"name\", \"$name\")" . "])"; my $fixfile = "/tmp/nix-push-tmp.fix"; @@ -53,13 +63,13 @@ foreach my $id (@ARGV) { die unless $nid =~ /^([0-9a-z]{32})$/; # Realise the Nix expression. - system "nix -ih $nid"; - if ($?) { die "`nix -ih' failed"; } - my $npath = `nix -qph $nid 2> /dev/null`; - $? and die "creating Nix archive"; + system "nix --install $nid"; + if ($?) { die "`nix --install' failed"; } + my $npath = `nix --query --list $nid 2> /dev/null`; + $? and die "`nix --query --list' failed"; chomp $npath; - push @pushlist, $npath; + push @pushlist, "$npath/*"; print "$path -> $npath\n"; } diff --git a/scripts/nix-switch.in b/scripts/nix-switch.in index 2ccb6b4e5..ddaca4e22 100755 --- a/scripts/nix-switch.in +++ b/scripts/nix-switch.in @@ -15,11 +15,11 @@ $hash || die "no package hash specified"; my $linkdir = "@localstatedir@/nix/links"; # Build the specified package, and all its dependencies. -system "nix -ih $hash"; -if ($?) { die "`nix -ih' failed"; } +system "nix --install $hash"; +if ($?) { die "`nix --install' failed"; } -my $pkgdir = `nix -qph $hash`; -if ($?) { die "`nix -qph' failed"; } +my $pkgdir = `nix --query --list $hash`; +if ($?) { die "`nix --query --list' failed"; } chomp $pkgdir; # Figure out a generation number.