154 lines
4.9 KiB
Diff
154 lines
4.9 KiB
Diff
From d69abfe510c77fa4cd01346e155c8a6e0e6de920 Mon Sep 17 00:00:00 2001
|
|
From: Luke Granger-Brown <git@lukegb.com>
|
|
Date: Sat, 8 Jan 2022 15:59:29 +0000
|
|
Subject: [PATCH] mercurial: move tests to passthru.tests
|
|
|
|
They're very expensive to run, especially if you don't have that many
|
|
cores, and can sometimes be a bit flaky (it looks like their CI doesn't
|
|
run things under the same constraints as we tend to).
|
|
|
|
Move them to a separate derivation, and make them test the actual
|
|
installed output rather than the local copy.
|
|
---
|
|
.../version-management/mercurial/default.nix | 100 ++++++++++++------
|
|
1 file changed, 65 insertions(+), 35 deletions(-)
|
|
|
|
diff --git a/pkgs/applications/version-management/mercurial/default.nix b/pkgs/applications/version-management/mercurial/default.nix
|
|
index cc00f68461be9..85993487fb37e 100644
|
|
--- a/pkgs/applications/version-management/mercurial/default.nix
|
|
+++ b/pkgs/applications/version-management/mercurial/default.nix
|
|
@@ -7,6 +7,7 @@
|
|
, highlightSupport ? fullBuild
|
|
, ApplicationServices
|
|
# test dependencies
|
|
+, runCommand
|
|
, unzip
|
|
, which
|
|
, sqlite
|
|
@@ -39,15 +40,6 @@ let
|
|
} else null;
|
|
cargoRoot = if rustSupport then "rust" else null;
|
|
|
|
- postPatch = ''
|
|
- patchShebangs .
|
|
-
|
|
- for f in **/*.{py,c,t}; do
|
|
- # not only used in shebangs
|
|
- substituteAllInPlace "$f" '/bin/sh' '${stdenv.shell}'
|
|
- done
|
|
- '';
|
|
-
|
|
propagatedBuildInputs = lib.optional re2Support fb-re2
|
|
++ lib.optional gitSupport pygit2
|
|
++ lib.optional highlightSupport pygments;
|
|
@@ -63,31 +55,6 @@ let
|
|
makeFlags = [ "PREFIX=$(out)" ]
|
|
++ lib.optional rustSupport "PURE=--rust";
|
|
|
|
- doCheck = stdenv.isLinux; # tests seem unstable on Darwin
|
|
- checkInputs = [
|
|
- unzip
|
|
- which
|
|
- sqlite
|
|
- git
|
|
- gnupg
|
|
- ];
|
|
- SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt"; # needed for git
|
|
- checkPhase = ''
|
|
- cat << EOF > tests/blacklists/nix
|
|
- # tests enforcing "/usr/bin/env" shebangs, which are patched for nix
|
|
- test-run-tests.t
|
|
- test-check-shbang.t
|
|
-
|
|
- # unstable experimental/unsupported features
|
|
- # https://bz.mercurial-scm.org/show_bug.cgi?id=6633#c1
|
|
- test-git-interop.t
|
|
- EOF
|
|
-
|
|
- # extended timeout necessary for tests to pass on the busy CI workers
|
|
- export HGTESTFLAGS="--blacklist blacklists/nix --timeout 600"
|
|
- make check
|
|
- '';
|
|
-
|
|
postInstall = (lib.optionalString guiSupport ''
|
|
mkdir -p $out/etc/mercurial
|
|
cp contrib/hgk $out/bin
|
|
@@ -115,7 +82,9 @@ let
|
|
--zsh contrib/zsh_completion
|
|
'';
|
|
|
|
- passthru.tests = {};
|
|
+ passthru.tests = {
|
|
+ mercurial-tests = makeTests { flags = "--with-hg=$MERCURIAL_BASE/bin/hg"; };
|
|
+ };
|
|
|
|
meta = with lib; {
|
|
description = "A fast, lightweight SCM system for very large distributed projects";
|
|
@@ -127,6 +96,67 @@ let
|
|
platforms = platforms.unix;
|
|
};
|
|
};
|
|
+
|
|
+ makeTests = { mercurial ? self, nameSuffix ? "", flags ? "" }: runCommand "${mercurial.pname}${nameSuffix}-tests" {
|
|
+ inherit (mercurial) src;
|
|
+
|
|
+ SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt"; # needed for git
|
|
+ MERCURIAL_BASE = mercurial;
|
|
+ nativeBuildInputs = [
|
|
+ python
|
|
+ unzip
|
|
+ which
|
|
+ sqlite
|
|
+ git
|
|
+ gnupg
|
|
+ ];
|
|
+
|
|
+ postPatch = ''
|
|
+ patchShebangs .
|
|
+
|
|
+ for f in **/*.{py,c,t}; do
|
|
+ # not only used in shebangs
|
|
+ substituteAllInPlace "$f" '/bin/sh' '${stdenv.shell}'
|
|
+ done
|
|
+
|
|
+ for f in **/*.t; do
|
|
+ substituteInPlace 2>/dev/null "$f" \
|
|
+ --replace '*/hg:' '*/*hg*:' \${/* paths emitted by our wrapped hg look like ..hg-wrapped-wrapped */""}
|
|
+ --replace '"$PYTHON" "$BINDIR"/hg' '"$BINDIR"/hg' ${/* 'hg' is a wrapper; don't run using python directly */""}
|
|
+ done
|
|
+ '';
|
|
+
|
|
+ # This runs Mercurial _a lot_ of times.
|
|
+ requiredSystemFeatures = [ "big-parallel" ];
|
|
+
|
|
+ # Don't run tests if not-Linux or if cross-compiling.
|
|
+ meta.broken = !stdenv.hostPlatform.isLinux || stdenv.buildPlatform != stdenv.hostPlatform;
|
|
+ } ''
|
|
+ addToSearchPathWithCustomDelimiter : PYTHONPATH "${mercurial}/${python.sitePackages}"
|
|
+
|
|
+ unpackPhase
|
|
+ cd "$sourceRoot"
|
|
+ patchPhase
|
|
+
|
|
+ cat << EOF > tests/blacklists/nix
|
|
+ # tests enforcing "/usr/bin/env" shebangs, which are patched for nix
|
|
+ test-run-tests.t
|
|
+ test-check-shbang.t
|
|
+
|
|
+ # unstable experimental/unsupported features
|
|
+ # https://bz.mercurial-scm.org/show_bug.cgi?id=6633#c1
|
|
+ test-git-interop.t
|
|
+
|
|
+ # doesn't like the extra setlocale warnings emitted by our bash wrappers
|
|
+ test-locale.t
|
|
+ EOF
|
|
+
|
|
+ export HGTEST_REAL_HG="${mercurial}/bin/hg"
|
|
+ # extended timeout necessary for tests to pass on the busy CI workers
|
|
+ export HGTESTFLAGS="--blacklist blacklists/nix --timeout 1800 -j$NIX_BUILD_CORES ${flags}"
|
|
+ make check
|
|
+ touch $out
|
|
+ '';
|
|
in
|
|
self.overridePythonAttrs (origAttrs: {
|
|
passthru = origAttrs.passthru // rec {
|