diff options
Diffstat (limited to 'pkgs/build-support/mitm-cache/fetch.nix')
-rw-r--r-- | pkgs/build-support/mitm-cache/fetch.nix | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/pkgs/build-support/mitm-cache/fetch.nix b/pkgs/build-support/mitm-cache/fetch.nix new file mode 100644 index 0000000000000..4e1f24ae7d7b2 --- /dev/null +++ b/pkgs/build-support/mitm-cache/fetch.nix @@ -0,0 +1,49 @@ +{ lib +, fetchurl +, runCommand +, writeText +}: + +{ name ? "deps" +, data +, dontFixup ? true +, ... +} +@ attrs: + +let + data' = builtins.removeAttrs + (if builtins.isPath data then lib.importJSON data else data) + [ "!version" ]; + + urlToPath = url: + if lib.hasPrefix "https://" url then ( + let + url' = lib.drop 2 (lib.splitString "/" url); + in "https/${builtins.concatStringsSep "/" url'}" + ) + else builtins.replaceStrings ["://"] ["/"] url; + code = '' + mkdir -p "$out" + cd "$out" + '' + builtins.concatStringsSep "" (lib.mapAttrsToList (url: info: + let + key = builtins.head (builtins.attrNames info); + val = info.${key}; + path = urlToPath url; + name = baseNameOf path; + source = { + redirect = "$out/${urlToPath val}"; + hash = fetchurl { inherit url; hash = val; }; + text = writeText name val; + }.${key} or (throw "Unknown key: ${url}"); + in '' + mkdir -p "${dirOf path}" + ln -s "${source}" "${path}" + '') data'); +in + runCommand name (builtins.removeAttrs attrs [ "name" "data" ] // { + passthru = (attrs.passthru or {}) // { + data = writeText "deps.json" (builtins.toJSON data); + }; + }) code |