From caff18340206c4e5c466c16a534f13505d1098ee Mon Sep 17 00:00:00 2001 From: Benjamin Hipple Date: Sun, 2 Feb 2020 16:56:11 -0500 Subject: 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. --- pkgs/build-support/fetchgit/default.nix | 2 +- pkgs/build-support/fetchgit/nix-prefetch-git | 25 ++++++------ pkgs/build-support/fetchzip/default.nix | 57 ++++++++++++++-------------- 3 files changed, 41 insertions(+), 43 deletions(-) diff --git a/pkgs/build-support/fetchgit/default.nix b/pkgs/build-support/fetchgit/default.nix index 0405951a9e40..ee662154cc7b 100644 --- a/pkgs/build-support/fetchgit/default.nix +++ b/pkgs/build-support/fetchgit/default.nix @@ -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))); diff --git a/pkgs/build-support/fetchgit/nix-prefetch-git b/pkgs/build-support/fetchgit/nix-prefetch-git index 8020ba46f3f1..a211b6a31e6f 100755 --- a/pkgs/build-support/fetchgit/nix-prefetch-git +++ b/pkgs/build-support/fetchgit/nix-prefetch-git @@ -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 } diff --git a/pkgs/build-support/fetchzip/default.nix b/pkgs/build-support/fetchzip/default.nix index c61df8ceb001..9d829e43ccbc 100644 --- a/pkgs/build-support/fetchzip/default.nix +++ b/pkgs/build-support/fetchzip/default.nix @@ -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 ]; -- cgit 1.4.1