[PATCH 2 of 2] tests: make run-tests.py invokes tests with needed variables only (issue5069)
liscju
piotr.listkiewicz at gmail.com
Sat Mar 26 07:45:31 EDT 2016
# HG changeset patch
# User liscju <piotr.listkiewicz at gmail.com>
# Date 1458986707 -3600
# Sat Mar 26 11:05:07 2016 +0100
# Node ID 19a08baae8794c77f4876161ea4bbe3f5cb6b6ff
# Parent ffe9bc7aea5a63bc82e7322da9ff3448f13abaec
tests: make run-tests.py invokes tests with needed variables only (issue5069)
Before this patch tests were invoked with all environment variables
except fixed set of known problematic environment variables. This
commit makes run-tests.py pass to tests only that variables that
are actually used in run-tests.py
This commit is only proposal of solution. Class rememberusedkeyenv
is not implementing all dictionary methods, only ones that are
actually used in run-tests.py when accessing environment variables.
Other possible solution would be to make a fixed list of used
environment variables in run-tests.py.
I am looking forward for suggestions how this should be implemented.
diff -r ffe9bc7aea5a -r 19a08baae879 tests/run-tests.py
--- a/tests/run-tests.py Sat Mar 26 08:48:17 2016 +0100
+++ b/tests/run-tests.py Sat Mar 26 11:05:07 2016 +0100
@@ -69,8 +69,37 @@ except ImportError:
from xml.dom import minidom
import unittest
-osenviron = os.environ
-osenvironb = getattr(os, 'environb', os.environ)
+class rememberusedkeyenv(object):
+ def __init__(self, env):
+ self.usedkeys = set()
+ self.env = env
+
+ def __setitem__(self, key, value):
+ self.usedkeys.add(key)
+ self.env[key] = value
+
+ def __getitem__(self, key):
+ self.usedkeys.add(key)
+ return self.env[key]
+
+ def __delitem__(self, key):
+ self.usedkeys.remove(key)
+ del self.env[key]
+
+ def __contains__(self, key):
+ exists = key in self.env
+ if exists:
+ self.usedkeys.add(key)
+ return exists
+
+ def get(self, key, default=None):
+ if key in self:
+ return self[key]
+ else:
+ return default
+
+osenviron = rememberusedkeyenv(os.environ)
+osenvironb = rememberusedkeyenv(getattr(os, 'environb', os.environ))
processlock = threading.Lock()
if sys.version_info > (3, 5, 0):
@@ -785,12 +814,19 @@ class Test(unittest.TestCase):
else:
return re.escape(p)
+ def _addusedenv(self, env):
+ usedkeys = osenviron.usedkeys
+ usedkeys |= osenvironb.usedkeys
+ for key in usedkeys:
+ env[key] = osenviron[key]
+
def _getenv(self):
"""Obtain environment variables to use during test execution."""
def defineport(i):
offset = '' if i == 0 else '%s' % i
env["HGPORT%s" % offset] = '%s' % (self._startport + i)
- env = osenviron.copy()
+ env = {}
+ self._addusedenv(env)
env['TESTTMP'] = self._testtmp
env['HOME'] = self._testtmp
# This number should match portneeded in _getport
@@ -814,16 +850,6 @@ class Test(unittest.TestCase):
env['COLUMNS'] = '80'
env['TERM'] = 'xterm'
- for k in ('HG HGPROF CDPATH GREP_OPTIONS http_proxy no_proxy ' +
- 'NO_PROXY').split():
- if k in env:
- del env[k]
-
- # unset env related to hooks
- for k in env.keys():
- if k.startswith('HG_'):
- del env[k]
-
return env
def _createhgrc(self, path):
More information about the Mercurial-devel
mailing list