fetchzip: add extension parameter
fetchzip downloads the file from specified URL, renames it to basename of that url, and then relies on unzip to do the unpacking. The first consequence is that this requires URL to end with proper extension—otherwise it will fail to unpack. This is not always the case and input-fonts workarounds this by adding “&.zip” query parameter (which is obviously a hack and is not guaranteed to work with every URL). The second consequence is that basename of the url must be a valid filename. I’ve tried to build a custom configuration of input-fonts and I get an error from mv that the filename is too long: > trying https://input.djr.com/build/?fontSelection=fourStyleFamily®ular=InputMonoNarrow-Regular&italic=InputMonoNarrow-Italic&bold=InputMonoNarrow-Bold&boldItalic=InputMonoNarrow-BoldItalic&a=0&g=0&i=topserif&l=serifs_round&zero=0&asterisk=height&braces=straight&preset=default&line-height=1.2&accept=I+do&email=&.zip > % Total % Received % Xferd Average Speed Time Time Time Current > Dload Upload Total Spent Left Speed > 100 406k 100 406k 0 0 230k 0 0:00:01 0:00:01 --:--:-- 230k > mv: failed to access '/build/?fontSelection=fourStyleFamily®ular=InputMonoNarrow-Regular&italic=InputMonoNarrow-Italic&bold=InputMonoNarrow-Bold&boldItalic=InputMonoNarrow-BoldItalic&a=0&g=0&i=topserif&l=serifs_round&zero=0&asterisk=height&braces=straight&preset=default&line-height=1.2&accept=I+do&email=&.zip': File name too long We could use “name” parameter as the filename (that’s how it is used in fetchurl). However, the previous attempt to do so (fc01353703
) was reverted (24b5eb61eb
) because of the introduced regression—many fetchzip invocations use names without extension (also the default name is just “source”). This commit adds an optional “extension” parameter. If it is set, fetchzip renames the downloaded file to “download.${extension}” effectively solving both problems above without introducing a massive regression. This is a no-op for all existing packages. Tested by updating my NixOS setup + the extra inputs-fonts configuration mentioned above + tons of unstable emacs packages after a nix-collect-garbage (3Gb downloaded) with this patch applied.
This commit is contained in:
parent
3f7771d65c
commit
1893e2be4d
|
@ -13,10 +13,17 @@
|
|||
, urls ? []
|
||||
, extraPostFetch ? ""
|
||||
, name ? "source"
|
||||
, # Allows to set the extension for the intermediate downloaded
|
||||
# file. This can be used as a hint for the unpackCmdHooks to select
|
||||
# an appropriate unpacking tool.
|
||||
extension ? null
|
||||
, ... } @ args:
|
||||
|
||||
(fetchurl (let
|
||||
basename = baseNameOf (if url != "" then url else builtins.head urls);
|
||||
tmpFilename =
|
||||
if extension != null
|
||||
then "download.${extension}"
|
||||
else baseNameOf (if url != "" then url else builtins.head urls);
|
||||
in {
|
||||
inherit name;
|
||||
|
||||
|
@ -30,7 +37,7 @@ in {
|
|||
mkdir "$unpackDir"
|
||||
cd "$unpackDir"
|
||||
|
||||
renamed="$TMPDIR/${basename}"
|
||||
renamed="$TMPDIR/${tmpFilename}"
|
||||
mv "$downloadedFile" "$renamed"
|
||||
unpackFile "$renamed"
|
||||
''
|
||||
|
@ -56,7 +63,7 @@ in {
|
|||
+ ''
|
||||
chmod 755 "$out"
|
||||
'';
|
||||
} // removeAttrs args [ "stripRoot" "extraPostFetch" ])).overrideAttrs (x: {
|
||||
} // removeAttrs args [ "stripRoot" "extraPostFetch" "extension" ])).overrideAttrs (x: {
|
||||
# Hackety-hack: we actually need unzip hooks, too
|
||||
nativeBuildInputs = x.nativeBuildInputs ++ [ unzip ];
|
||||
})
|
||||
|
|
Loading…
Reference in a new issue