about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/version-management/mercurial/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/applications/version-management/mercurial/default.nix')
-rw-r--r--nixpkgs/pkgs/applications/version-management/mercurial/default.nix50
1 files changed, 40 insertions, 10 deletions
diff --git a/nixpkgs/pkgs/applications/version-management/mercurial/default.nix b/nixpkgs/pkgs/applications/version-management/mercurial/default.nix
index 26d263b060d4..3caf499d31ac 100644
--- a/nixpkgs/pkgs/applications/version-management/mercurial/default.nix
+++ b/nixpkgs/pkgs/applications/version-management/mercurial/default.nix
@@ -1,29 +1,59 @@
-{ lib, stdenv, fetchurl, python3Packages, makeWrapper, unzip
+{ lib, stdenv, fetchurl, fetchpatch, python3Packages, makeWrapper, gettext
+, re2Support ? true
+, rustSupport ? stdenv.hostPlatform.isLinux, rustPlatform
 , guiSupport ? false, tk ? null
 , ApplicationServices
 }:
 
 let
-  inherit (python3Packages) docutils python;
+  inherit (python3Packages) docutils python fb-re2;
 
 in python3Packages.buildPythonApplication rec {
   pname = "mercurial";
-  version = "5.6";
+  version = "5.8";
 
   src = fetchurl {
     url = "https://mercurial-scm.org/release/mercurial-${version}.tar.gz";
-    sha256 = "1hk2y30zzdnlv8f71kabvh0xi9c7qhp28ksh20vpd0r712sv79yz";
+    sha256 = "17rhlmmkqz5ll3k68jfzpcifg3nndbcbc2nx7kw8xn3qcj7nlpgw";
   };
 
+  patches = [
+    # https://phab.mercurial-scm.org/D10638, needed for below patch to apply
+    (fetchpatch {
+      url = "https://phab.mercurial-scm.org/file/data/oymk4awh2dd7q6cwjbzu/PHID-FILE-bfcr7qrp5spg42wspxpd/D10638.diff";
+      sha256 = "0mfi324is02l7cnd3j0gbmg5rpyyqn3afg3f73flnfwmz5njqa5f";
+    })
+    # https://phab.mercurial-scm.org/D10639, fixes https://bz.mercurial-scm.org/show_bug.cgi?id=6514
+    (fetchpatch {
+      url = "https://phab.mercurial-scm.org/file/data/re4uqdhtknjiacx2ogwu/PHID-FILE-4m26id65dno5gzix2ngh/D10639.diff";
+      sha256 = "0h5ilrd2x1789fr6sf4k1mcvxdh0xdyr94yawdacw87v3x12c8cb";
+    })
+  ];
+
   format = "other";
 
   passthru = { inherit python; }; # pass it so that the same version can be used in hg2git
 
-  nativeBuildInputs = [ makeWrapper unzip ];
+  cargoDeps = if rustSupport then rustPlatform.fetchCargoTarball {
+    inherit src;
+    name = "${pname}-${version}";
+    sha256 = "1kc2giqvfwsdl5fb0qmz96ws1gdrs3skfdzvpiif2i8f7r4nqlhd";
+    sourceRoot = "${pname}-${version}/rust";
+  } else null;
+  cargoRoot = if rustSupport then "rust" else null;
+
+  propagatedBuildInputs = lib.optional re2Support fb-re2;
+  nativeBuildInputs = [ makeWrapper gettext ]
+    ++ lib.optionals rustSupport (with rustPlatform; [
+         cargoSetupHook
+         rust.cargo
+         rust.rustc
+       ]);
   buildInputs = [ docutils ]
     ++ lib.optionals stdenv.isDarwin [ ApplicationServices ];
 
-  makeFlags = [ "PREFIX=$(out)" ];
+  makeFlags = [ "PREFIX=$(out)" ]
+    ++ lib.optional rustSupport "PURE=--rust";
 
   postInstall = (lib.optionalString guiSupport ''
     mkdir -p $out/etc/mercurial
@@ -52,14 +82,14 @@ in python3Packages.buildPythonApplication rec {
     install -v -m644 -D contrib/zsh_completion $out/share/zsh/site-functions/_hg
   '';
 
-  meta = {
+  meta = with lib; {
     inherit version;
     description = "A fast, lightweight SCM system for very large distributed projects";
     homepage = "https://www.mercurial-scm.org";
     downloadPage = "https://www.mercurial-scm.org/release/";
-    license = lib.licenses.gpl2;
-    maintainers = [ lib.maintainers.eelco ];
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ eelco lukegb ];
     updateWalker = true;
-    platforms = lib.platforms.unix;
+    platforms = platforms.unix;
   };
 }