diff options
author | Robert Hensing <roberth@users.noreply.github.com> | 2022-06-30 21:10:57 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-30 21:10:57 +0200 |
commit | 1e17bb943e4de2d0d08e910216d1df73ffa78754 (patch) | |
tree | fe2736d354e6b8bfb3cb49c9a29bb008bd18bc97 /pkgs/build-support/fetchurl | |
parent | ff3d914ad786bf484e04dfaf3990e5d6efaea12b (diff) | |
parent | 588439e1311c41a5779877d4d8ef603410b79cd4 (diff) | |
download | nixpkgs-1e17bb943e4de2d0d08e910216d1df73ffa78754.tar nixpkgs-1e17bb943e4de2d0d08e910216d1df73ffa78754.tar.gz nixpkgs-1e17bb943e4de2d0d08e910216d1df73ffa78754.tar.bz2 nixpkgs-1e17bb943e4de2d0d08e910216d1df73ffa78754.tar.lz nixpkgs-1e17bb943e4de2d0d08e910216d1df73ffa78754.tar.xz nixpkgs-1e17bb943e4de2d0d08e910216d1df73ffa78754.tar.zst nixpkgs-1e17bb943e4de2d0d08e910216d1df73ffa78754.zip |
Merge pull request #164662 from infinisil/fetchurl-curlOpts-list
fetchurl: Allow passing curl options with spaces
Diffstat (limited to 'pkgs/build-support/fetchurl')
-rw-r--r-- | pkgs/build-support/fetchurl/builder.sh | 2 | ||||
-rw-r--r-- | pkgs/build-support/fetchurl/default.nix | 14 | ||||
-rw-r--r-- | pkgs/build-support/fetchurl/tests.nix | 13 |
3 files changed, 28 insertions, 1 deletions
diff --git a/pkgs/build-support/fetchurl/builder.sh b/pkgs/build-support/fetchurl/builder.sh index 5b04a702aff..5ca09b6fc77 100644 --- a/pkgs/build-support/fetchurl/builder.sh +++ b/pkgs/build-support/fetchurl/builder.sh @@ -22,6 +22,8 @@ if ! [ -f "$SSL_CERT_FILE" ]; then curl+=(--insecure) fi +eval "curl+=($curlOptsList)" + curl+=( $curlOpts $NIX_CURL_FLAGS diff --git a/pkgs/build-support/fetchurl/default.nix b/pkgs/build-support/fetchurl/default.nix index 6dd8a685aee..7ec831c61ac 100644 --- a/pkgs/build-support/fetchurl/default.nix +++ b/pkgs/build-support/fetchurl/default.nix @@ -46,8 +46,13 @@ in urls ? [] , # Additional curl options needed for the download to succeed. + # Warning: Each space (no matter the escaping) will start a new argument. + # If you wish to pass arguments with spaces, use `curlOptsList` curlOpts ? "" +, # Additional curl options needed for the download to succeed. + curlOptsList ? [] + , # Name of the file. If empty, use the basename of `url' (or of the # first element of `urls'). name ? "" @@ -147,7 +152,14 @@ stdenvNoCC.mkDerivation { outputHashMode = if (recursiveHash || executable) then "recursive" else "flat"; - inherit curlOpts showURLs mirrorsFile postFetch downloadToTemp executable; + curlOpts = lib.warnIf (lib.isList curlOpts) '' + fetchurl for ${toString (builtins.head urls_)}: curlOpts is a list (${lib.generators.toPretty { multiline = false; } curlOpts}), which is not supported anymore. + - 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: + curlOpts = ${lib.strings.escapeNixString (toString curlOpts)}; + - If you wish for each list element to be passed as a separate curl argument, allowing arguments to contain spaces, use curlOptsList instead: + curlOptsList = [ ${lib.concatMapStringsSep " " lib.strings.escapeNixString curlOpts} ];'' curlOpts; + curlOptsList = lib.escapeShellArgs curlOptsList; + inherit showURLs mirrorsFile postFetch downloadToTemp executable; impureEnvVars = impureEnvVars ++ netrcImpureEnvVars; diff --git a/pkgs/build-support/fetchurl/tests.nix b/pkgs/build-support/fetchurl/tests.nix new file mode 100644 index 00000000000..fc7fb25e158 --- /dev/null +++ b/pkgs/build-support/fetchurl/tests.nix @@ -0,0 +1,13 @@ +{ invalidateFetcherByDrvHash, fetchurl, jq, moreutils, ... }: { + # Tests that we can send custom headers with spaces in them + header = + let headerValue = "Test '\" <- These are some quotes"; + in invalidateFetcherByDrvHash fetchurl { + url = "https://httpbin.org/headers"; + sha256 = builtins.hashString "sha256" (headerValue + "\n"); + curlOptsList = [ "-H" "Hello: ${headerValue}" ]; + postFetch = '' + ${jq}/bin/jq -r '.headers.Hello' $out | ${moreutils}/bin/sponge $out + ''; + }; +} |