depot/third_party/nixpkgs/patches/pr154021.patch

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 {