about summary refs log tree commit diff
path: root/pkgs/build-support
diff options
context:
space:
mode:
authorRyan Lahfa <masterancpp@gmail.com>2023-07-17 19:31:53 +0200
committerGitHub <noreply@github.com>2023-07-17 19:31:53 +0200
commit8fbe8379b304d3b4f2717ab324afcff0b62ac87c (patch)
treed3703fa3142f38f7d549d5b0e54b54b07456c9f2 /pkgs/build-support
parent84a907b9c68d68d2d87638a950fe95b348956e86 (diff)
parent080e97c7f970544d5dbb94164b1df3a5a62da864 (diff)
Merge pull request #240808 from nrabulinski/fetchpijul
Diffstat (limited to 'pkgs/build-support')
-rw-r--r--pkgs/build-support/fetchpijul/default.nix56
1 files changed, 56 insertions, 0 deletions
diff --git a/pkgs/build-support/fetchpijul/default.nix b/pkgs/build-support/fetchpijul/default.nix
new file mode 100644
index 0000000000000..ca7e1a7926e80
--- /dev/null
+++ b/pkgs/build-support/fetchpijul/default.nix
@@ -0,0 +1,56 @@
+{ lib, stdenvNoCC, pijul }:
+
+lib.makeOverridable (
+{ url
+, hash ? ""
+, change ? null
+, state ? null
+, channel ? "main"
+, name ? "fetchpijul"
+, # TODO: Changes in pijul are unordered so there's many ways to end up with the same repository state.
+  # This makes leaveDotPijul unfeasible to implement until pijul CLI implements
+  # a way of reordering changes to sort them in a consistent and deterministic manner.
+  # leaveDotPijul ? false
+}:
+if change != null && state != null then
+  throw "Only one of 'change' or 'state' can be set"
+else
+  stdenvNoCC.mkDerivation {
+    inherit name;
+    nativeBuildInputs = [ pijul ];
+
+    dontUnpack = true;
+    dontConfigure = true;
+    dontBuild = true;
+
+    installPhase = ''
+      runHook preInstall
+
+      pijul clone \
+        ''${change:+--change "$change"} \
+        ''${state:+--state "$state"} \
+        --channel "$channel" \
+        "$url" \
+        "$out"
+
+      runHook postInstall
+    '';
+
+    fixupPhase = ''
+      runHook preFixup
+
+      rm -rf "$out/.pijul"
+
+      runHook postFixup
+    '';
+
+    outputHashAlgo = if hash != "" then null else "sha256";
+    outputHashMode = "recursive";
+    outputHash = if hash != "" then
+      hash
+    else
+      lib.fakeSha256;
+
+    inherit url change state channel;
+  }
+)