From a28b4445a4eb8108dfc028083d3939d5f3a42685 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 23 Oct 2012 18:04:00 +0200 Subject: [PATCH] nix-prefetch-url: Improve option handling --- doc/manual/nix-hash.xml | 5 +++-- doc/manual/nix-prefetch-url.xml | 24 +++++++++++++++++++----- scripts/nix-prefetch-url.in | 23 ++++++++++++++++++++--- 3 files changed, 42 insertions(+), 10 deletions(-) diff --git a/doc/manual/nix-hash.xml b/doc/manual/nix-hash.xml index 007fc5410..af4e361ff 100644 --- a/doc/manual/nix-hash.xml +++ b/doc/manual/nix-hash.xml @@ -91,8 +91,9 @@ cryptographic hash as nix-store --dump hashAlgo - Specify a cryptographic hash, which can be one of - md5, sha1, and + Use the specified cryptographic hash algorithm, + which can be one of md5, + sha1, and sha256. diff --git a/doc/manual/nix-prefetch-url.xml b/doc/manual/nix-prefetch-url.xml index 0d953e946..c416e675b 100644 --- a/doc/manual/nix-prefetch-url.xml +++ b/doc/manual/nix-prefetch-url.xml @@ -18,6 +18,7 @@ nix-prefetch-url + hashAlgo url hash @@ -45,11 +46,6 @@ download it again when you build your Nix expression. Since as nix-prefetch-url, the redundant download can be avoided. -The environment variable NIX_HASH_ALGO specifies -which hash algorithm to use. It can be either md5, -sha1, or sha256. The default is -sha256. - If hash is specified, then a download is not performed if the Nix store already contains a file with the same hash and base name. Otherwise, the file is downloaded, and an @@ -63,6 +59,24 @@ of the downloaded file in the Nix store is also printed. +Options + + + + hashAlgo + + Use the specified cryptographic hash algorithm, + which can be one of md5, + sha1, and + sha256. + + + + + + + + Examples diff --git a/scripts/nix-prefetch-url.in b/scripts/nix-prefetch-url.in index 64102e8ae..bcd9197bc 100755 --- a/scripts/nix-prefetch-url.in +++ b/scripts/nix-prefetch-url.in @@ -8,11 +8,28 @@ use Nix::Store; use Nix::Config; use Nix::Utils; -my $url = shift; -my $expHash = shift; -my $hashType = $ENV{'NIX_HASH_ALGO'} || "sha256"; +my $hashType = $ENV{'NIX_HASH_ALGO'} || "sha256"; # obsolete my $cacheDir = $ENV{'NIX_DOWNLOAD_CACHE'}; +my @args; +my $arg; +while ($arg = shift) { + if ($arg eq "--help") { + exec "man nix-prefetch-url" or die; + } elsif ($arg eq "--type") { + $hashType = shift; + die "$0: `$arg' requires an argument\n" unless defined $hashType; + } elsif (substr($arg, 0, 1) eq "-") { + die "$0: unknown flag `$arg'\n"; + } else { + push @args, $arg; + } +} + +my $url = $args[0]; +my $expHash = $args[1]; + + if (!defined $url || $url eq "") { print STDERR <