fetchzip, fetchgit: cleanup handling of optional features and whitespace

No intended functional difference, just trying to polish to make this easier to
extend and more aligned with other nix conventions.
This commit is contained in:
Benjamin Hipple 2020-02-02 16:56:11 -05:00
parent 8396961c9c
commit caff183402
3 changed files with 41 additions and 43 deletions

View file

@ -1,4 +1,4 @@
{stdenvNoCC, git, cacert}: let
{ stdenvNoCC, git, cacert }: let
urlToName = url: rev: let
inherit (stdenvNoCC.lib) removeSuffix splitString last;
base = last (splitString ":" (baseNameOf (removeSuffix "/" url)));

View file

@ -1,6 +1,5 @@
#! /usr/bin/env bash
set -e -o pipefail
#!/usr/bin/env bash
set -eo pipefail
url=
rev=
@ -38,17 +37,17 @@ usage(){
echo >&2 "syntax: nix-prefetch-git [options] [URL [REVISION [EXPECTED-HASH]]]
Options:
--out path Path where the output would be stored.
--url url Any url understood by 'git clone'.
--rev ref Any sha1 or references (such as refs/heads/master)
--hash h Expected hash.
--branch-name Branch name to check out into
--deepClone Clone the entire repository.
--no-deepClone Make a shallow clone of just the required ref.
--leave-dotGit Keep the .git directories.
--out path Path where the output would be stored.
--url url Any url understood by 'git clone'.
--rev ref Any sha1 or references (such as refs/heads/master).
--hash h Expected hash.
--branch-name Branch name to check out into.
--deepClone Clone the entire repository.
--no-deepClone Make a shallow clone of just the required ref.
--leave-dotGit Keep the .git directories.
--fetch-submodules Fetch submodules.
--builder Clone as fetchgit does, but url, rev, and out option are mandatory.
--quiet Only print the final json summary.
--builder Clone as fetchgit does, but url, rev, and out option are mandatory.
--quiet Only print the final json summary.
"
exit 1
}

View file

@ -5,47 +5,46 @@
# (e.g. due to minor changes in the compression algorithm, or changes
# in timestamps).
{ fetchurl, unzip }:
{ lib, fetchurl, unzip }:
{ # Optionally move the contents of the unpacked tree up one level.
stripRoot ? true
{ name ? "source"
, url
# Optionally move the contents of the unpacked tree up one level.
, stripRoot ? true
, extraPostFetch ? ""
, name ? "source"
, ... } @ args:
(fetchurl ({
inherit name;
recursiveHash = true;
downloadToTemp = true;
postFetch =
''
unpackDir="$TMPDIR/unpack"
mkdir "$unpackDir"
cd "$unpackDir"
postFetch = ''
unpackDir="$TMPDIR/unpack"
mkdir "$unpackDir"
cd "$unpackDir"
renamed="$TMPDIR/${baseNameOf url}"
mv "$downloadedFile" "$renamed"
unpackFile "$renamed"
result=$unpackDir
''
# Most src disted tarballs have a parent directory like foo-1.2.3/ to strip
+ lib.optionalString stripRoot ''
if [ $(ls "$unpackDir" | wc -l) != 1 ]; then
echo "error: zip file must contain a single file or directory."
echo "hint: Pass stripRoot=false; to fetchzip to assume flat list of files."
exit 1
fi
fn=$(cd "$unpackDir" && echo *)
result="$unpackDir/$fn"
'' + ''
mkdir $out
mv "$result" "$out"
''
+ extraPostFetch;
renamed="$TMPDIR/${baseNameOf url}"
mv "$downloadedFile" "$renamed"
unpackFile "$renamed"
''
+ (if stripRoot then ''
if [ $(ls "$unpackDir" | wc -l) != 1 ]; then
echo "error: zip file must contain a single file or directory."
echo "hint: Pass stripRoot=false; to fetchzip to assume flat list of files."
exit 1
fi
fn=$(cd "$unpackDir" && echo *)
if [ -f "$unpackDir/$fn" ]; then
mkdir $out
fi
mv "$unpackDir/$fn" "$out"
'' else ''
mv "$unpackDir" "$out"
'') #*/
+ extraPostFetch;
} // removeAttrs args [ "stripRoot" "extraPostFetch" ])).overrideAttrs (x: {
# Hackety-hack: we actually need unzip hooks, too
nativeBuildInputs = x.nativeBuildInputs ++ [ unzip ];