about summary refs log tree commit diff
path: root/pkgs/build-support/mitm-cache/fetch.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/build-support/mitm-cache/fetch.nix')
-rw-r--r--pkgs/build-support/mitm-cache/fetch.nix49
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