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:
parent
8396961c9c
commit
caff183402
@ -1,4 +1,4 @@
|
|||||||
{stdenvNoCC, git, cacert}: let
|
{ stdenvNoCC, git, cacert }: let
|
||||||
urlToName = url: rev: let
|
urlToName = url: rev: let
|
||||||
inherit (stdenvNoCC.lib) removeSuffix splitString last;
|
inherit (stdenvNoCC.lib) removeSuffix splitString last;
|
||||||
base = last (splitString ":" (baseNameOf (removeSuffix "/" url)));
|
base = last (splitString ":" (baseNameOf (removeSuffix "/" url)));
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#! /usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
set -eo pipefail
|
||||||
set -e -o pipefail
|
|
||||||
|
|
||||||
url=
|
url=
|
||||||
rev=
|
rev=
|
||||||
@ -38,17 +37,17 @@ usage(){
|
|||||||
echo >&2 "syntax: nix-prefetch-git [options] [URL [REVISION [EXPECTED-HASH]]]
|
echo >&2 "syntax: nix-prefetch-git [options] [URL [REVISION [EXPECTED-HASH]]]
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
--out path Path where the output would be stored.
|
--out path Path where the output would be stored.
|
||||||
--url url Any url understood by 'git clone'.
|
--url url Any url understood by 'git clone'.
|
||||||
--rev ref Any sha1 or references (such as refs/heads/master)
|
--rev ref Any sha1 or references (such as refs/heads/master).
|
||||||
--hash h Expected hash.
|
--hash h Expected hash.
|
||||||
--branch-name Branch name to check out into
|
--branch-name Branch name to check out into.
|
||||||
--deepClone Clone the entire repository.
|
--deepClone Clone the entire repository.
|
||||||
--no-deepClone Make a shallow clone of just the required ref.
|
--no-deepClone Make a shallow clone of just the required ref.
|
||||||
--leave-dotGit Keep the .git directories.
|
--leave-dotGit Keep the .git directories.
|
||||||
--fetch-submodules Fetch submodules.
|
--fetch-submodules Fetch submodules.
|
||||||
--builder Clone as fetchgit does, but url, rev, and out option are mandatory.
|
--builder Clone as fetchgit does, but url, rev, and out option are mandatory.
|
||||||
--quiet Only print the final json summary.
|
--quiet Only print the final json summary.
|
||||||
"
|
"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
@ -5,47 +5,46 @@
|
|||||||
# (e.g. due to minor changes in the compression algorithm, or changes
|
# (e.g. due to minor changes in the compression algorithm, or changes
|
||||||
# in timestamps).
|
# in timestamps).
|
||||||
|
|
||||||
{ fetchurl, unzip }:
|
{ lib, fetchurl, unzip }:
|
||||||
|
|
||||||
{ # Optionally move the contents of the unpacked tree up one level.
|
{ name ? "source"
|
||||||
stripRoot ? true
|
|
||||||
, url
|
, url
|
||||||
|
# Optionally move the contents of the unpacked tree up one level.
|
||||||
|
, stripRoot ? true
|
||||||
, extraPostFetch ? ""
|
, extraPostFetch ? ""
|
||||||
, name ? "source"
|
|
||||||
, ... } @ args:
|
, ... } @ args:
|
||||||
|
|
||||||
(fetchurl ({
|
(fetchurl ({
|
||||||
inherit name;
|
inherit name;
|
||||||
|
|
||||||
recursiveHash = true;
|
recursiveHash = true;
|
||||||
|
|
||||||
downloadToTemp = true;
|
downloadToTemp = true;
|
||||||
|
|
||||||
postFetch =
|
postFetch = ''
|
||||||
''
|
unpackDir="$TMPDIR/unpack"
|
||||||
unpackDir="$TMPDIR/unpack"
|
mkdir "$unpackDir"
|
||||||
mkdir "$unpackDir"
|
cd "$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: {
|
} // removeAttrs args [ "stripRoot" "extraPostFetch" ])).overrideAttrs (x: {
|
||||||
# Hackety-hack: we actually need unzip hooks, too
|
# Hackety-hack: we actually need unzip hooks, too
|
||||||
nativeBuildInputs = x.nativeBuildInputs ++ [ unzip ];
|
nativeBuildInputs = x.nativeBuildInputs ++ [ unzip ];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user