c83a5bce66
The git extension is bundled in-tree, similarly to the hg gui, but also requires pygit2. Enable it for mercurialFull, but don't bother with it for the stock mercurial install. Alas, it doesn't (yet?) work on nixpkgs because it doesn't support octopus merges: mercurial.error.ProgrammingError: git support can't handle octopus merges, found a commit with 16 parents :( I'm sure that commit is loved equally by all 16 parents.
97 lines
3.3 KiB
Nix
97 lines
3.3 KiB
Nix
{ lib, stdenv, fetchurl, fetchpatch, python3Packages, makeWrapper, gettext
|
|
, re2Support ? true
|
|
, rustSupport ? stdenv.hostPlatform.isLinux, rustPlatform
|
|
, gitSupport ? false
|
|
, guiSupport ? false, tk
|
|
, ApplicationServices
|
|
}:
|
|
|
|
let
|
|
inherit (python3Packages) docutils python fb-re2 pygit2;
|
|
|
|
in python3Packages.buildPythonApplication rec {
|
|
pname = "mercurial";
|
|
version = "5.8";
|
|
|
|
src = fetchurl {
|
|
url = "https://mercurial-scm.org/release/mercurial-${version}.tar.gz";
|
|
sha256 = "17rhlmmkqz5ll3k68jfzpcifg3nndbcbc2nx7kw8xn3qcj7nlpgw";
|
|
};
|
|
|
|
patches = [
|
|
# https://phab.mercurial-scm.org/D10638, needed for below patch to apply
|
|
(fetchpatch {
|
|
url = "https://phab.mercurial-scm.org/file/data/l7p2r4zcctcr3pzlybv2/PHID-FILE-bwjzxlz6sbegk3s4irik/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/v53nhburhtkhpccyecei/PHID-FILE-6v34oll6r2gkqo4ng5nt/D10639.diff";
|
|
sha256 = "0h5ilrd2x1789fr6sf4k1mcvxdh0xdyr94yawdacw87v3x12c8cb";
|
|
})
|
|
];
|
|
|
|
format = "other";
|
|
|
|
passthru = { inherit python; }; # pass it so that the same version can be used in hg2git
|
|
|
|
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 ++ lib.optional gitSupport pygit2;
|
|
nativeBuildInputs = [ makeWrapper gettext ]
|
|
++ lib.optionals rustSupport (with rustPlatform; [
|
|
cargoSetupHook
|
|
rust.cargo
|
|
rust.rustc
|
|
]);
|
|
buildInputs = [ docutils ]
|
|
++ lib.optionals stdenv.isDarwin [ ApplicationServices ];
|
|
|
|
makeFlags = [ "PREFIX=$(out)" ]
|
|
++ lib.optional rustSupport "PURE=--rust";
|
|
|
|
postInstall = (lib.optionalString guiSupport ''
|
|
mkdir -p $out/etc/mercurial
|
|
cp contrib/hgk $out/bin
|
|
cat >> $out/etc/mercurial/hgrc << EOF
|
|
[extensions]
|
|
hgk=$out/lib/${python.libPrefix}/site-packages/hgext/hgk.py
|
|
EOF
|
|
# setting HG so that hgk can be run itself as well (not only hg view)
|
|
WRAP_TK=" --set TK_LIBRARY ${tk}/lib/${tk.libPrefix}
|
|
--set HG $out/bin/hg
|
|
--prefix PATH : ${tk}/bin "
|
|
'') + ''
|
|
for i in $(cd $out/bin && ls); do
|
|
wrapProgram $out/bin/$i \
|
|
$WRAP_TK
|
|
done
|
|
|
|
# copy hgweb.cgi to allow use in apache
|
|
mkdir -p $out/share/cgi-bin
|
|
cp -v hgweb.cgi contrib/hgweb.wsgi $out/share/cgi-bin
|
|
chmod u+x $out/share/cgi-bin/hgweb.cgi
|
|
|
|
# install bash/zsh completions
|
|
install -v -m644 -D contrib/bash_completion $out/share/bash-completion/completions/_hg
|
|
install -v -m644 -D contrib/zsh_completion $out/share/zsh/site-functions/_hg
|
|
'';
|
|
|
|
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 = licenses.gpl2Plus;
|
|
maintainers = with maintainers; [ eelco lukegb ];
|
|
updateWalker = true;
|
|
platforms = platforms.unix;
|
|
};
|
|
}
|