|
|
|
@ -1,4 +1,4 @@ |
|
|
|
|
{ lib, stdenv, fetchurl, fetchpatch, python3Packages, makeWrapper, gettext |
|
|
|
|
{ lib, stdenv, fetchurl, fetchpatch, python3Packages, makeWrapper, gettext, installShellFiles |
|
|
|
|
, re2Support ? true |
|
|
|
|
, rustSupport ? stdenv.hostPlatform.isLinux, rustPlatform |
|
|
|
|
, fullBuild ? false |
|
|
|
@ -11,90 +11,148 @@ |
|
|
|
|
let |
|
|
|
|
inherit (python3Packages) docutils python fb-re2 pygit2 pygments; |
|
|
|
|
|
|
|
|
|
in python3Packages.buildPythonApplication rec { |
|
|
|
|
pname = "mercurial"; |
|
|
|
|
version = "5.8"; |
|
|
|
|
self = python3Packages.buildPythonApplication rec { |
|
|
|
|
pname = "mercurial"; |
|
|
|
|
version = "5.8"; |
|
|
|
|
|
|
|
|
|
src = fetchurl { |
|
|
|
|
url = "https://mercurial-scm.org/release/mercurial-${version}.tar.gz"; |
|
|
|
|
sha256 = "17rhlmmkqz5ll3k68jfzpcifg3nndbcbc2nx7kw8xn3qcj7nlpgw"; |
|
|
|
|
}; |
|
|
|
|
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://www.mercurial-scm.org/repo/hg/raw-rev/c365850b611490a5fdb235eb1cea310a542c2f84"; |
|
|
|
|
sha256 = "1gn3xvahbjdhbglffqpmj559w1bkqqsk70wqcanwv7nh972aqy9g"; |
|
|
|
|
}) |
|
|
|
|
# https://phab.mercurial-scm.org/D10639, fixes https://bz.mercurial-scm.org/show_bug.cgi?id=6514 |
|
|
|
|
(fetchpatch { |
|
|
|
|
url = "https://www.mercurial-scm.org/repo/hg/raw-rev/c8f62920f07a40af3403ba9aefa1dac8a97d53ea"; |
|
|
|
|
sha256 = "1kw0xjg2c4jby0ncarjvpa5qafsyl1wzbk6jxls4hnxlxdl53nmn"; |
|
|
|
|
}) |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
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 |
|
|
|
|
++ lib.optional highlightSupport pygments; |
|
|
|
|
nativeBuildInputs = [ makeWrapper gettext installShellFiles ] |
|
|
|
|
++ lib.optionals rustSupport (with rustPlatform; [ |
|
|
|
|
cargoSetupHook |
|
|
|
|
rust.cargo |
|
|
|
|
rust.rustc |
|
|
|
|
]); |
|
|
|
|
buildInputs = [ docutils ] |
|
|
|
|
++ lib.optionals stdenv.isDarwin [ ApplicationServices ]; |
|
|
|
|
|
|
|
|
|
patches = [ |
|
|
|
|
# https://phab.mercurial-scm.org/D10638, needed for below patch to apply |
|
|
|
|
(fetchpatch { |
|
|
|
|
url = "https://www.mercurial-scm.org/repo/hg/raw-rev/c365850b611490a5fdb235eb1cea310a542c2f84"; |
|
|
|
|
sha256 = "1gn3xvahbjdhbglffqpmj559w1bkqqsk70wqcanwv7nh972aqy9g"; |
|
|
|
|
}) |
|
|
|
|
# https://phab.mercurial-scm.org/D10639, fixes https://bz.mercurial-scm.org/show_bug.cgi?id=6514 |
|
|
|
|
(fetchpatch { |
|
|
|
|
url = "https://www.mercurial-scm.org/repo/hg/raw-rev/c8f62920f07a40af3403ba9aefa1dac8a97d53ea"; |
|
|
|
|
sha256 = "1kw0xjg2c4jby0ncarjvpa5qafsyl1wzbk6jxls4hnxlxdl53nmn"; |
|
|
|
|
}) |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
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 |
|
|
|
|
++ lib.optional highlightSupport pygments; |
|
|
|
|
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; |
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
installShellCompletion --cmd hg \ |
|
|
|
|
--bash contrib/bash_completion \ |
|
|
|
|
--zsh contrib/zsh_completion |
|
|
|
|
''; |
|
|
|
|
|
|
|
|
|
passthru.tests = {}; |
|
|
|
|
|
|
|
|
|
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; |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
in |
|
|
|
|
self.overridePythonAttrs (origAttrs: { |
|
|
|
|
passthru = origAttrs.passthru // rec { |
|
|
|
|
# withExtensions takes a function which takes the python packages set and |
|
|
|
|
# returns a list of extensions to install. |
|
|
|
|
# |
|
|
|
|
# for instance: mercurial.withExtension (pm: [ pm.hg-evolve ]) |
|
|
|
|
withExtensions = f: let |
|
|
|
|
python = self.python; |
|
|
|
|
mercurialHighPrio = ps: (ps.toPythonModule self).overrideAttrs (oldAttrs: { |
|
|
|
|
meta = oldAttrs.meta // { |
|
|
|
|
priority = 50; |
|
|
|
|
}; |
|
|
|
|
}); |
|
|
|
|
plugins = (f python.pkgs) ++ [ (mercurialHighPrio python.pkgs) ]; |
|
|
|
|
env = python.withPackages (ps: plugins); |
|
|
|
|
in stdenv.mkDerivation { |
|
|
|
|
pname = "${self.pname}-with-extensions"; |
|
|
|
|
|
|
|
|
|
inherit (self) src version meta; |
|
|
|
|
|
|
|
|
|
buildInputs = self.buildInputs ++ self.propagatedBuildInputs; |
|
|
|
|
nativeBuildInputs = self.nativeBuildInputs; |
|
|
|
|
|
|
|
|
|
phases = [ "installPhase" "installCheckPhase" ]; |
|
|
|
|
|
|
|
|
|
installPhase = '' |
|
|
|
|
runHook preInstall |
|
|
|
|
|
|
|
|
|
mkdir -p $out/bin |
|
|
|
|
|
|
|
|
|
for bindir in ${lib.concatStringsSep " " (map (d: "${lib.getBin d}/bin") plugins)}; do |
|
|
|
|
for bin in $bindir/*; do |
|
|
|
|
ln -s ${env}/bin/$(basename $bin) $out/bin/ |
|
|
|
|
done |
|
|
|
|
done |
|
|
|
|
|
|
|
|
|
ln -s ${self}/share $out/share |
|
|
|
|
|
|
|
|
|
runHook postInstall |
|
|
|
|
''; |
|
|
|
|
|
|
|
|
|
installCheckPhase = '' |
|
|
|
|
runHook preInstallCheck |
|
|
|
|
|
|
|
|
|
$out/bin/hg help >/dev/null || exit 1 |
|
|
|
|
|
|
|
|
|
runHook postInstallCheck |
|
|
|
|
''; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
tests = origAttrs.passthru.tests // { |
|
|
|
|
withExtensions = withExtensions (pm: [ pm.hg-evolve ]); |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
}) |
|
|
|
|