mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-07-14 06:00:33 +03:00
Merge pull request #79581 from bhipple/feature/fetcher-whitespace-clean
fetchzip, fetchgit: cleanup handling of optional features and whitespace
This commit is contained in:
commit
368ea2eb5e
3 changed files with 41 additions and 43 deletions
|
@ -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…
Add table
Add a link
Reference in a new issue