# HG changeset patch # User Siddharth Agarwal # Date 1496892608 25200 # Node ID 2146f01a25771abd46fabb7a1d618267a200ac02 # Parent a4d0e816a67270839c0102d0e43cc2034e4b3b3d run-tests: allow specifying an output dir to write .errs to I'm trying to use run-tests.py on a read-only file system. This series allows that to happen. diff -r a4d0e816a672 -r 2146f01a2577 tests/run-tests.py --- a/tests/run-tests.py Wed Jun 07 15:47:06 2017 -0700 +++ b/tests/run-tests.py Wed Jun 07 20:30:08 2017 -0700 @@ -274,6 +274,8 @@ help="run each test N times (default=1)", default=1) parser.add_option("-n", "--nodiff", action="store_true", help="skip showing test changes") + parser.add_option("--outputdir", type="string", + help="directory to write error logs to (default=test directory)") parser.add_option("-p", "--port", type="int", help="port on which servers should listen" " (default: $%s or %d)" % defaults['port']) @@ -564,7 +566,7 @@ # Status code reserved for skipped tests (used by hghave). SKIPPED_STATUS = 80 - def __init__(self, path, tmpdir, keeptmpdir=False, + def __init__(self, path, outputdir, tmpdir, keeptmpdir=False, debug=False, timeout=defaults['timeout'], startport=defaults['port'], extraconfigopts=None, @@ -605,8 +607,9 @@ self.bname = os.path.basename(path) self.name = _strpath(self.bname) self._testdir = os.path.dirname(path) + self._outputdir = outputdir self._tmpname = os.path.basename(path) - self.errpath = os.path.join(self._testdir, b'%s.err' % self.bname) + self.errpath = os.path.join(self._outputdir, b'%s.err' % self.bname) self._threadtmp = tmpdir self._keeptmpdir = keeptmpdir @@ -2133,6 +2136,7 @@ self.options = None self._hgroot = None self._testdir = None + self._outputdir = None self._hgtmp = None self._installdir = None self._bindir = None @@ -2212,6 +2216,10 @@ self._testdir = osenvironb[b'TESTDIR'] = getattr( os, 'getcwdb', os.getcwd)() + if self.options.outputdir: + self._outputdir = canonpath(_bytespath(self.options.outputdir)) + else: + self._outputdir = self._testdir if 'PYTHONHASHSEED' not in os.environ: # use a random python hash seed all the time @@ -2336,6 +2344,7 @@ vlog("# Using HGTMP", self._hgtmp) vlog("# Using PATH", os.environ["PATH"]) vlog("# Using", IMPL_PATH, osenvironb[IMPL_PATH]) + vlog("# Writing to directory", self._outputdir) try: return self._runtests(testdescs) or 0 @@ -2491,7 +2500,7 @@ # extra keyword parameters. 'case' is used by .t tests kwds = dict((k, testdesc[k]) for k in ['case'] if k in testdesc) - t = testcls(refpath, tmpdir, + t = testcls(refpath, self._outputdir, tmpdir, keeptmpdir=self.options.keep_tmpdir, debug=self.options.debug, timeout=self.options.timeout, diff -r a4d0e816a672 -r 2146f01a2577 tests/test-run-tests.t --- a/tests/test-run-tests.t Wed Jun 07 15:47:06 2017 -0700 +++ b/tests/test-run-tests.t Wed Jun 07 20:30:08 2017 -0700 @@ -166,6 +166,42 @@ python hash seed: * (glob) [1] +test --outputdir + $ mkdir output + $ rt --outputdir output + + --- $TESTTMP/test-failure.t + +++ $TESTTMP/output/test-failure.t.err + @@ -1,5 +1,5 @@ + $ echo babar + - rataxes + + babar + This is a noop statement so that + this test is still more bytes than success. + pad pad pad pad............................................................ + + ERROR: test-failure.t output changed + !. + --- $TESTTMP/test-failure-unicode.t + +++ $TESTTMP/output/test-failure-unicode.t.err + @@ -1,2 +1,2 @@ + $ echo babar\xce\xb1 (esc) + - l\xce\xb5\xce\xb5t (esc) + + babar\xce\xb1 (esc) + + ERROR: test-failure-unicode.t output changed + ! + Failed test-failure.t: output changed + Failed test-failure-unicode.t: output changed + # Ran 3 tests, 0 skipped, 0 warned, 2 failed. + python hash seed: * (glob) + [1] + $ ls -a output + . + .. + test-failure-unicode.t.err + test-failure.t.err + test --xunit support $ rt --xunit=xunit.xml @@ -306,6 +342,29 @@ python hash seed: * (glob) [1] +--retest works with --outputdir + $ rm -r output + $ mkdir output + $ mv test-failure.t.err output + $ rt --retest --outputdir output + + --- $TESTTMP/test-failure.t + +++ $TESTTMP/output/test-failure.t.err + @@ -1,5 +1,5 @@ + $ echo babar + - rataxes + + babar + This is a noop statement so that + this test is still more bytes than success. + pad pad pad pad............................................................ + + ERROR: test-failure.t output changed + ! + Failed test-failure.t: output changed + # Ran 2 tests, 1 skipped, 0 warned, 1 failed. + python hash seed: * (glob) + [1] + Selecting Tests To Run ======================