Merge pull request #247527 from oxij/metrics/fetchzip

fetchzip: cleanup and improve metrics

authored by

Adam Joseph and committed by
GitHub
be547cb3 6c15f71a

+29 -40
+8 -6
pkgs/build-support/fetchurl/default.nix
··· 132 132 else throw "fetchurl requires a hash for fixed-output derivation: ${lib.concatStringsSep ", " urls_}"; 133 133 in 134 134 135 + assert (lib.isList curlOpts) -> lib.warn '' 136 + fetchurl for ${toString (builtins.head urls_)}: curlOpts is a list (${lib.generators.toPretty { multiline = false; } curlOpts}), which is not supported anymore. 137 + - If you wish to get the same effect as before, for elements with spaces (even if escaped) to expand to multiple curl arguments, use a string argument instead: 138 + curlOpts = ${lib.strings.escapeNixString (toString curlOpts)}; 139 + - If you wish for each list element to be passed as a separate curl argument, allowing arguments to contain spaces, use curlOptsList instead: 140 + curlOptsList = [ ${lib.concatMapStringsSep " " lib.strings.escapeNixString curlOpts} ];'' true; 141 + 135 142 stdenvNoCC.mkDerivation (( 136 143 if (pname != "" && version != "") then 137 144 { inherit pname version; } ··· 161 168 162 169 outputHashMode = if (recursiveHash || executable) then "recursive" else "flat"; 163 170 164 - curlOpts = lib.warnIf (lib.isList curlOpts) '' 165 - fetchurl for ${toString (builtins.head urls_)}: curlOpts is a list (${lib.generators.toPretty { multiline = false; } curlOpts}), which is not supported anymore. 166 - - If you wish to get the same effect as before, for elements with spaces (even if escaped) to expand to multiple curl arguments, use a string argument instead: 167 - curlOpts = ${lib.strings.escapeNixString (toString curlOpts)}; 168 - - If you wish for each list element to be passed as a separate curl argument, allowing arguments to contain spaces, use curlOptsList instead: 169 - curlOptsList = [ ${lib.concatMapStringsSep " " lib.strings.escapeNixString curlOpts} ];'' curlOpts; 171 + inherit curlOpts; 170 172 curlOptsList = lib.escapeShellArgs curlOptsList; 171 173 inherit showURLs mirrorsFile postFetch downloadToTemp executable; 172 174
+21 -34
pkgs/build-support/fetchzip/default.nix
··· 7 7 8 8 { lib, fetchurl, unzip, glibcLocalesUtf8 }: 9 9 10 - { # Optionally move the contents of the unpacked tree up one level. 11 - stripRoot ? true 10 + { name ? "source" 12 11 , url ? "" 13 12 , urls ? [] 14 - , extraPostFetch ? "" 13 + , nativeBuildInputs ? [] 15 14 , postFetch ? "" 16 - , name ? "source" 17 - , pname ? "" 18 - , version ? "" 19 - , nativeBuildInputs ? [ ] 20 - , # Allows to set the extension for the intermediate downloaded 21 - # file. This can be used as a hint for the unpackCmdHooks to select 22 - # an appropriate unpacking tool. 23 - extension ? null 24 - , ... } @ args: 15 + , extraPostFetch ? "" 25 16 17 + # Optionally move the contents of the unpacked tree up one level. 18 + , stripRoot ? true 19 + # Allows to set the extension for the intermediate downloaded 20 + # file. This can be used as a hint for the unpackCmdHooks to select 21 + # an appropriate unpacking tool. 22 + , extension ? null 26 23 27 - lib.warnIf (extraPostFetch != "") "use 'postFetch' instead of 'extraPostFetch' with 'fetchzip' and 'fetchFromGitHub'." 24 + # the rest are given to fetchurl as is 25 + , ... } @ args: 26 + 27 + assert (extraPostFetch != "") -> lib.warn "use 'postFetch' instead of 'extraPostFetch' with 'fetchzip' and 'fetchFromGitHub'." true; 28 28 29 - (let 29 + let 30 30 tmpFilename = 31 31 if extension != null 32 32 then "download.${extension}" 33 33 else baseNameOf (if url != "" then url else builtins.head urls); 34 34 in 35 35 36 - fetchurl (( 37 - if (pname != "" && version != "") then 38 - { 39 - name = "${pname}-${version}"; 40 - inherit pname version; 41 - } 42 - else 43 - { inherit name; } 44 - ) // { 36 + fetchurl ({ 37 + inherit name; 45 38 recursiveHash = true; 46 39 47 40 downloadToTemp = true; ··· 61 54 mv "$downloadedFile" "$renamed" 62 55 unpackFile "$renamed" 63 56 chmod -R +w "$unpackDir" 64 - '' 65 - + (if stripRoot then '' 57 + '' + (if stripRoot then '' 66 58 if [ $(ls -A "$unpackDir" | wc -l) != 1 ]; then 67 59 echo "error: zip file must contain a single file or directory." 68 60 echo "hint: Pass stripRoot=false; to fetchzip to assume flat list of files." ··· 75 67 mv "$unpackDir/$fn" "$out" 76 68 '' else '' 77 69 mv "$unpackDir" "$out" 78 - '') 79 - + '' 70 + '') + '' 80 71 ${postFetch} 81 - '' + '' 82 72 ${extraPostFetch} 83 - '' 84 - 85 - # Remove non-owner write permissions 86 - # Fixes https://github.com/NixOS/nixpkgs/issues/38649 87 - + '' 88 73 chmod 755 "$out" 89 74 ''; 90 - } // removeAttrs args [ "stripRoot" "extraPostFetch" "postFetch" "extension" "nativeBuildInputs" ])) 75 + # ^ Remove non-owner write permissions 76 + # Fixes https://github.com/NixOS/nixpkgs/issues/38649 77 + } // removeAttrs args [ "stripRoot" "extraPostFetch" "postFetch" "extension" "nativeBuildInputs" ])