From 8416b6f2fcb6096e1fc34781d3e81454a9dfd956 Mon Sep 17 00:00:00 2001
From: Jean-Paul Calderone <exarkun@twistedmatrix.com>
Date: Thu, 26 Sep 2019 15:42:15 -0400
Subject: [PATCH] get a version of twisted with logging for gai errors

only useful for debugging failed test runs
---
 nixos/modules/overlays.nix | 17 +++++++++++++----
 nixos/pkgs/twisted.nix     |  7 +++++++
 nixos/pkgs/twisted.patch   | 23 +++++++++++++++++++++++
 3 files changed, 43 insertions(+), 4 deletions(-)
 create mode 100644 nixos/pkgs/twisted.nix
 create mode 100644 nixos/pkgs/twisted.patch

diff --git a/nixos/modules/overlays.nix b/nixos/modules/overlays.nix
index ad41b406..e510fbd7 100644
--- a/nixos/modules/overlays.nix
+++ b/nixos/modules/overlays.nix
@@ -1,11 +1,20 @@
+let
+  pythonTwistedOverride = python-self: python-super: {
+    twisted = python-super.callPackage ../pkgs/twisted.nix { inherit (python-super) twisted; };
+  };
+in
 self: super: {
-  privatestorage = super.python27.buildEnv.override
+  privatestorage = self.python27.buildEnv.override
   { extraLibs =
-    [ super.python27Packages.tahoe-lafs
-      super.python27Packages.zkapauthorizer
+    [ self.python27Packages.tahoe-lafs
+      self.python27Packages.zkapauthorizer
     ];
     # Twisted's dropin.cache always collides between different
     # plugin-providing packages.
-    ignoreCollisions = true;
+    # ignoreCollisions = true;
   };
+
+  python27 = super.python27.override (old: {
+    packageOverrides = super.lib.composeExtensions old.packageOverrides pythonTwistedOverride;
+  });
 }
diff --git a/nixos/pkgs/twisted.nix b/nixos/pkgs/twisted.nix
new file mode 100644
index 00000000..32fb3437
--- /dev/null
+++ b/nixos/pkgs/twisted.nix
@@ -0,0 +1,7 @@
+{ twisted }:
+twisted.overrideAttrs (old: {
+  version = old.version + "-0";
+  prePatch = old.patchPhase;
+  patchPhase = null;
+  patches = (if old ? "patches" then old.patches else []) ++ [ ./twisted.patch ];
+})
diff --git a/nixos/pkgs/twisted.patch b/nixos/pkgs/twisted.patch
new file mode 100644
index 00000000..9f50368c
--- /dev/null
+++ b/nixos/pkgs/twisted.patch
@@ -0,0 +1,23 @@
+diff --git a/src/twisted/internet/_resolver.py b/src/twisted/internet/_resolver.py
+index 1c16174a2..8c8249db4 100644
+--- a/src/twisted/internet/_resolver.py
++++ b/src/twisted/internet/_resolver.py
+@@ -74,6 +74,8 @@ class GAIResolver(object):
+     L{getaddrinfo} in a thread.
+     """
+ 
++    _log = Logger()
++
+     def __init__(self, reactor, getThreadPool=None, getaddrinfo=getaddrinfo):
+         """
+         Create a L{GAIResolver}.
+@@ -124,6 +126,9 @@ class GAIResolver(object):
+                                          socketType)
+             except gaierror:
+                 return []
++            except Exception as e:
++                self._log.failure("Problem resolving {hostName}", hostName=hostName)
++                return []
+         d = deferToThreadPool(self._reactor, pool, get)
+         resolution = HostResolution(hostName)
+         resolutionReceiver.resolutionBegan(resolution)
-- 
GitLab