diff --git a/corepkgs/nar/Makefile.am b/corepkgs/nar/Makefile.am index e369d29c58..3e0aab869d 100644 --- a/corepkgs/nar/Makefile.am +++ b/corepkgs/nar/Makefile.am @@ -1,12 +1,13 @@ all-local: nar.sh unnar.sh install-exec-local: - $(INSTALL) -d $(datadir)/fix/nar - $(INSTALL_DATA) nar.fix $(datadir)/fix/nar - $(INSTALL_PROGRAM) nar.sh $(datadir)/fix/nar - $(INSTALL_DATA) unnar.fix $(datadir)/fix/nar - $(INSTALL_PROGRAM) unnar.sh $(datadir)/fix/nar + $(INSTALL) -d $(datadir)/nix/corepkgs + $(INSTALL) -d $(datadir)/nix/corepkgs/nar + $(INSTALL_DATA) nar.nix $(datadir)/nix/corepkgs/nar + $(INSTALL_PROGRAM) nar.sh $(datadir)/nix/corepkgs/nar + $(INSTALL_DATA) unnar.nix $(datadir)/nix/corepkgs/nar + $(INSTALL_PROGRAM) unnar.sh $(datadir)/nix/corepkgs/nar include ../../substitute.mk -EXTRA_DIST = nar.fix nar.sh.in unnar.fix unnar.sh.in +EXTRA_DIST = nar.nix nar.sh.in unnar.nix unnar.sh.in diff --git a/corepkgs/nar/nar.fix b/corepkgs/nar/nar.fix deleted file mode 100644 index 429e7b5497..0000000000 --- a/corepkgs/nar/nar.fix +++ /dev/null @@ -1,8 +0,0 @@ -Function(["path"], - Package( - [ ("name", "nar") - , ("build", Relative("nar/nar.sh")) - , ("path", Var("path")) - ] - ) -) \ No newline at end of file diff --git a/corepkgs/nar/nar.nix b/corepkgs/nar/nar.nix new file mode 100644 index 0000000000..f288e0ed49 --- /dev/null +++ b/corepkgs/nar/nar.nix @@ -0,0 +1,6 @@ +{system, path}: derivation { + name = "nar"; + builder = ./nar.sh; + system = system; + path = path; +} diff --git a/corepkgs/nar/nar.sh.in b/corepkgs/nar/nar.sh.in index c92ef8e25a..8d3fdb51b2 100644 --- a/corepkgs/nar/nar.sh.in +++ b/corepkgs/nar/nar.sh.in @@ -5,7 +5,7 @@ export PATH=/bin:/usr/bin echo "packing $path into $out..." mkdir $out || exit 1 dst=$out/`basename $path`.nar.bz2 -@bindir@/nix --dump "$path" | bzip2 > $dst || exit 1 +@bindir@/nix-store --dump "$path" | bzip2 > $dst || exit 1 md5=$(md5sum -b $dst | cut -c1-32) if test $? != 0; then exit 1; fi diff --git a/corepkgs/nar/unnar.fix b/corepkgs/nar/unnar.fix deleted file mode 100644 index cd5079e50a..0000000000 --- a/corepkgs/nar/unnar.fix +++ /dev/null @@ -1,9 +0,0 @@ -Function(["nar", "outPath"], - Package( - [ ("name", "unnar") - , ("outPath", Var("outPath")) - , ("build", Relative("nar/unnar.sh")) - , ("nar", Var("nar")) - ] - ) -) \ No newline at end of file diff --git a/corepkgs/nar/unnar.nix b/corepkgs/nar/unnar.nix new file mode 100644 index 0000000000..a18e499b24 --- /dev/null +++ b/corepkgs/nar/unnar.nix @@ -0,0 +1,7 @@ +{system, narFile, outPath}: derivation { + name = "unnar"; + builder = ./unnar.sh; + system = system; + narFile = narFile; + outPath = outPath; +} diff --git a/corepkgs/nar/unnar.sh.in b/corepkgs/nar/unnar.sh.in index 8a4532af36..3081356497 100644 --- a/corepkgs/nar/unnar.sh.in +++ b/corepkgs/nar/unnar.sh.in @@ -3,4 +3,4 @@ export PATH=/bin:/usr/bin echo "unpacking $nar to $out..." -bunzip2 < $nar | @bindir@/nix --restore "$out" || exit 1 +bunzip2 < $nar | @bindir@/nix-store --restore "$out" || exit 1 diff --git a/scripts/nix-push.in b/scripts/nix-push.in index 2e8158a6a4..c1624d8355 100644 --- a/scripts/nix-push.in +++ b/scripts/nix-push.in @@ -7,14 +7,13 @@ my $tmpdir; do { $tmpdir = tmpnam(); } until mkdir $tmpdir, 0777; -my $fixfile = "$tmpdir/create-nars.fix"; +my $nixfile = "$tmpdir/create-nars.nix"; my $manifest = "$tmpdir/MANIFEST"; END { unlink $manifest; unlink $fixfile; rmdir $tmpdir; } -open FIX, ">$fixfile"; -print FIX "["; -my $first = 1; +open NIX, ">$nixfile"; +print NIX "["; my @paths; @@ -24,10 +23,10 @@ foreach my $id (@ARGV) { # Get all paths referenced by the normalisation of the given # Nix expression. - system "nix --install $id > /dev/null"; - if ($?) { die "`nix --install' failed"; } + system "nix-store --realise $id > /dev/null"; + die if ($?); - open PATHS, "nix --query --requisites --include-successors $id 2> /dev/null |" or die "nix -qr"; + open PATHS, "nix-store --query --requisites --include-successors $id 2> /dev/null |" or die; while () { chomp; die "bad: $_" unless /^\//; @@ -35,34 +34,31 @@ foreach my $id (@ARGV) { } close PATHS; - # For each path, create a Fix expression that turns the path into + # For each path, create a Nix expression that turns the path into # a Nix archive. foreach my $path (@paths) { - die unless ($path =~ /\/[0-9a-z]{32}.*$/); - print "$path\n"; - - # Construct a Fix expression that creates a Nix archive. - my $fixexpr = - "Call(IncludeFix(\"nar/nar.fix\"), " . - "[ (\"path\", Closure([\"$path\"], [(\"$path\", [])]))" . - "])"; - - print FIX "," unless ($first); - $first = 0; - print FIX $fixexpr; + die unless ($path =~ /\/[0-9a-z]{32}.*$/); + print "$path\n"; + # Construct a Nix expression that creates a Nix archive. + my $nixexpr = + "((import @datadir@/nix/corepkgs/nar/nar.nix) " . + # !!! $path should be represented as a closure + "{path = \"$path\"; system = \"@host@\"}) "; + + print NIX $nixexpr; } } -print FIX "]"; -close FIX; +print NIX "]"; +close NIX; -# Instantiate a Nix expression from the Fix expression. +# Instantiate a store expression from the Nix expression. my @nids; -print STDERR "running fix...\n"; -open NIDS, "fix $fixfile |" or die "cannot run fix"; +print STDERR "instantiating Nix expression...\n"; +open NIDS, "nix-instantiate $nixfile |" or die "cannot run nix-instantiate"; while () { chomp; die unless /^\//; @@ -71,13 +67,13 @@ while () { close NIDS; -# Realise the Nix expression. +# Realise the store expression. print STDERR "creating archives...\n"; -system "nix --install -v @nids > /dev/null"; -if ($?) { die "`nix --install' failed"; } +system "nix-store --realise -v @nids > /dev/null"; +if ($?) { die "`nix --realise' failed"; } my @narpaths; -open NIDS, "nix --query --list @nids |" or die "cannot run nix"; +open NIDS, "nix-store --query --list @nids |" or die "cannot run nix"; while () { chomp; die unless (/^\//); @@ -120,13 +116,13 @@ for (my $n = 0; $n < scalar @paths; $n++) { print MANIFEST " MD5: $hash\n"; if ($storepath =~ /\.nix$/) { - open PREDS, "nix --query --predecessors $storepath |" or die "cannot run nix"; - while () { - chomp; - die unless (/^\//); - print MANIFEST " SuccOf: $_\n"; - } - close PREDS; + open PREDS, "nix-store --query --predecessors $storepath |" or die "cannot run nix"; + while () { + chomp; + die unless (/^\//); + print MANIFEST " SuccOf: $_\n"; + } + close PREDS; } print MANIFEST "}\n"; diff --git a/src/nix-instantiate/main.cc b/src/nix-instantiate/main.cc index f63789fc4b..50a4991a53 100644 --- a/src/nix-instantiate/main.cc +++ b/src/nix-instantiate/main.cc @@ -53,8 +53,8 @@ static void printNixExpr(EvalState & state, Expr e) } } - if (ATgetType(e) == AT_LIST) { - for (ATermIterator i((ATermList) e); i; ++i) + if (atMatch(m, e) >> "List" >> es) { + for (ATermIterator i(es); i; ++i) printNixExpr(state, evalExpr(state, *i)); return; }