From d072485d2895d01dbbab1d899418726e3349343f Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 10 Jul 2003 13:41:28 +0000 Subject: * Get `nix-push' working again. It now uses Nix/Fix to create Nix archives (using the package in corepkgs/nar). * queryPathByHash -> expandHash, and it takes an argument specifying the target path (which may be empty). * Install the core Fix packages in $prefix/share/fix. TODO: bootstrap Nix and install Nix as a Fix package. --- scripts/nix-push | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 scripts/nix-push (limited to 'scripts/nix-push') diff --git a/scripts/nix-push b/scripts/nix-push new file mode 100644 index 000000000000..14b7e2834675 --- /dev/null +++ b/scripts/nix-push @@ -0,0 +1,60 @@ +#! /usr/bin/perl -w + +my @pushlist; + +foreach my $hash (@ARGV) { + + die unless $hash =~ /^([0-9a-z]{32})$/; + + # Get all paths referenced by the normalisation of the given + # fstate expression. + my @paths; + open PATHS, "nix -qrh $hash 2> /dev/null |" or die "nix -qrh"; + while () { + chomp; + next unless /^\//; + push @paths, $_; + } + close PATHS; + + # For each path, create a Fix expression that turns the path into + # a Nix archive. + foreach my $path (@paths) { + + # Hash the path. + my $phash = `nix-hash $path`; + $? and die "nix-hash"; + chomp $phash; + die unless $phash =~ /^([0-9a-z]{32})$/; + + # Construct a Fix expression that creates a Nar archive. + my $fixexpr = + "App(IncludeFix(\"nar/nar.fix\"), " . + "[ (\"path\", Path(\"$path\", Hash(\"$phash\"), [Include(\"$hash\")]))" . + ", (\"name\", \"$phash.nar\")" . + "])"; + + my $fixfile = "/tmp/nix-push-tmp.fix"; + open FIX, ">$fixfile"; + print FIX $fixexpr; + close FIX; + + # Instantiate a Nix expression from the Fix expression. + my $nhash = `fix $fixfile`; + $? and die "instantiating Nix archive expression"; + chomp $nhash; + die unless $nhash =~ /^([0-9a-z]{32})$/; + + # Realise the Nix expression. + my $npath = `nix -qph $nhash 2> /dev/null`; + $? and die "creating Nix archive"; + chomp $npath; + + push @pushlist, $npath; + + print "$path -> $npath\n"; + } +} + +# Push the prebuilts to the server. !!! FIXME +system "rsync -av -e ssh @pushlist eelco\@losser.st-lab.cs.uu.nl:/home/eelco/public_html/nix-dist/"; -- cgit 1.4.1