diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2004-04-21T14·54+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2004-04-21T14·54+0000 |
commit | 21655a70f5a6e80b477d8bf758aa24eb0fcbdbfe (patch) | |
tree | 6a322bfa5291ede4d00d5d07c4d2c5a3ae395dac /scripts/nix-prefetch-url.in | |
parent | f79e9c2d22345eeb0c721a8cf5375101d33dc4c9 (diff) |
* Channels. These allow you to stay current with an evolving set of
Nix expressions. To subscribe to a channel (needs to be done only once): nix-channel --add \ http://catamaran.labs.cs.uu.nl/dist/nix/channels/nixpkgs-unstable This just adds the given URL to ~/.nix-channels (which can also be edited manually). To update from all channels: nix-channel --update This fetches the latest expressions and pulls cache manifests. The default Nix expression (~/.nix-defexpr) is made to point to the conjunction of the expressions downloaded from all channels. So to update all installed derivations in the current user environment: nix-channel --update nix-env --upgrade '*' If you are really courageous, you can put this in a cronjob or something. You can subscribe to multiple channels. It is not entirely clear what happens when there are name clashes between derivations from different channels. From nix-env/main.cc it appears that the one with the lowest (highest?) hash will be used, which is pretty meaningless.
Diffstat (limited to 'scripts/nix-prefetch-url.in')
-rw-r--r-- | scripts/nix-prefetch-url.in | 71 |
1 files changed, 26 insertions, 45 deletions
diff --git a/scripts/nix-prefetch-url.in b/scripts/nix-prefetch-url.in index df6a1c86a5a0..6a90e787c3f5 100644 --- a/scripts/nix-prefetch-url.in +++ b/scripts/nix-prefetch-url.in @@ -1,56 +1,37 @@ -#! @perl@ -w +#! @shell@ -e -use strict; -use IPC::Open2; +url=$1 -my $url = shift @ARGV; -defined $url or die; +if test -z "$url"; then + echo "syntax: nix-prefetch-url URL" >&2 + exit 1 +fi -print "fetching $url...\n"; +# !!! race? should be relatively safe, `svn export' barfs if $tmpPath exists. +tmpPath1=@storedir@/nix-prefetch-url-$$ -my $out = "@storedir@/nix-prefetch-url-$$"; +# Perform the checkout. +@curl@ --fail --location --max-redirs 20 "$url" > $tmpPath1 -system "@curl@ --fail --location --max-redirs 20 \"$url\" > \"$out\""; -$? == 0 or die "unable to fetch $url"; +# Compute the hash. +hash=$(@bindir@/nix-hash --flat $tmpPath1) +echo "hash is $hash" >&2 -my $hash=`@bindir@/nix-hash --flat $out`; -$? == 0 or die "unable to hash $out"; -chomp $hash; +# Rename it so that the fetchsvn builder can find it. +tmpPath2=@storedir@/nix-prefetch-url-$hash +test -e $tmpPath2 || mv $tmpPath1 $tmpPath2 # !!! race -print "file has hash $hash\n"; +# Create a Nix expression that does a fetchsvn. +storeExpr=$( \ + echo "(import @datadir@/nix/corepkgs/fetchurl) \ + {url = $url; md5 = \"$hash\"; system = \"@system@\";}" \ + | nix-instantiate -) -my $out2 = "@storedir@/nix-prefetch-url-$hash"; -rename $out, $out2; +# Realise it. +finalPath=$(nix-store -qnB --force-realise $storeExpr) -# Create a Nix expression. -my $nixexpr = - "(import @datadir@/nix/corepkgs/fetchurl) " . - "{url = $url; md5 = \"$hash\"; system = \"@system@\";}"; +echo "path is $finalPath" >&2 -#print STDERR "expr: $nixexpr\n"; +rm -rf $tmpPath2 || true -# Instantiate a Nix expression. -#print STDERR "instantiating Nix expression...\n"; -my $pid = open2(\*READ, \*WRITE, "@bindir@/nix-instantiate -") - or die "cannot run nix-instantiate"; - -print WRITE $nixexpr; -close WRITE; - -my $drvpath = <READ>; -chomp $drvpath; - -waitpid $pid, 0; -$? == 0 or die "nix-instantiate failed"; - -# Run Nix. -#print STDERR "realising store expression $drvpath...\n"; -system "@bindir@/nix-store --realise $drvpath > /dev/null"; -$? == 0 or die "realisation failed"; - -my $path = `@bindir@/nix-store -qn $drvpath`; -$? == 0 or die "query failed"; - -print "path is $path"; - -unlink $out2; +echo $hash |