Show More
@@ -249,6 +249,8 b' def getparser():' | |||||
249 | metavar="HG", |
|
249 | metavar="HG", | |
250 | help="test using specified hg script rather than a " |
|
250 | help="test using specified hg script rather than a " | |
251 | "temporary installation") |
|
251 | "temporary installation") | |
|
252 | parser.add_option("--with-chg", metavar="CHG", | |||
|
253 | help="use specified chg wrapper in place of hg") | |||
252 | parser.add_option("-3", "--py3k-warnings", action="store_true", |
|
254 | parser.add_option("-3", "--py3k-warnings", action="store_true", | |
253 | help="enable Py3k warnings on Python 2.6+") |
|
255 | help="enable Py3k warnings on Python 2.6+") | |
254 | parser.add_option('--extra-config-opt', action="append", |
|
256 | parser.add_option('--extra-config-opt', action="append", | |
@@ -292,6 +294,15 b' def parseargs(args, parser):' | |||||
292 | % hgbin) |
|
294 | % hgbin) | |
293 | options.with_hg = hgbin |
|
295 | options.with_hg = hgbin | |
294 |
|
296 | |||
|
297 | if options.with_chg: | |||
|
298 | if os.name == 'nt': | |||
|
299 | parser.error('chg does not work on %s' % os.name) | |||
|
300 | options.with_chg = os.path.realpath( | |||
|
301 | os.path.expanduser(_bytespath(options.with_chg))) | |||
|
302 | if not (os.path.isfile(options.with_chg) and | |||
|
303 | os.access(options.with_chg, os.X_OK)): | |||
|
304 | parser.error('--with-chg must specify a chg executable') | |||
|
305 | ||||
295 | options.anycoverage = options.cover or options.annotate or options.htmlcov |
|
306 | options.anycoverage = options.cover or options.annotate or options.htmlcov | |
296 | if options.anycoverage: |
|
307 | if options.anycoverage: | |
297 | try: |
|
308 | try: | |
@@ -1811,6 +1822,7 b' class TestRunner(object):' | |||||
1811 | self._createdfiles = [] |
|
1822 | self._createdfiles = [] | |
1812 | self._hgcommand = None |
|
1823 | self._hgcommand = None | |
1813 | self._hgpath = None |
|
1824 | self._hgpath = None | |
|
1825 | self._chgsockdir = None | |||
1814 | self._portoffset = 0 |
|
1826 | self._portoffset = 0 | |
1815 | self._ports = {} |
|
1827 | self._ports = {} | |
1816 |
|
1828 | |||
@@ -1935,6 +1947,16 b' class TestRunner(object):' | |||||
1935 | self._tmpbindir = self._bindir |
|
1947 | self._tmpbindir = self._bindir | |
1936 | self._pythondir = os.path.join(self._installdir, b"lib", b"python") |
|
1948 | self._pythondir = os.path.join(self._installdir, b"lib", b"python") | |
1937 |
|
1949 | |||
|
1950 | # set up crafted chg environment, then replace "hg" command by "chg" | |||
|
1951 | chgbindir = self._bindir | |||
|
1952 | if self.options.with_chg: | |||
|
1953 | self._chgsockdir = d = os.path.join(self._hgtmp, b'chgsock') | |||
|
1954 | os.mkdir(d) | |||
|
1955 | osenvironb[b'CHGSOCKNAME'] = os.path.join(d, b"server") | |||
|
1956 | osenvironb[b'CHGHG'] = os.path.join(self._bindir, self._hgcommand) | |||
|
1957 | chgbindir = os.path.dirname(os.path.realpath(self.options.with_chg)) | |||
|
1958 | self._hgcommand = os.path.basename(self.options.with_chg) | |||
|
1959 | ||||
1938 | osenvironb[b"BINDIR"] = self._bindir |
|
1960 | osenvironb[b"BINDIR"] = self._bindir | |
1939 | osenvironb[b"PYTHON"] = PYTHON |
|
1961 | osenvironb[b"PYTHON"] = PYTHON | |
1940 |
|
1962 | |||
@@ -1951,6 +1973,8 b' class TestRunner(object):' | |||||
1951 | realfile = os.path.realpath(fileb) |
|
1973 | realfile = os.path.realpath(fileb) | |
1952 | realdir = os.path.abspath(os.path.dirname(realfile)) |
|
1974 | realdir = os.path.abspath(os.path.dirname(realfile)) | |
1953 | path.insert(2, realdir) |
|
1975 | path.insert(2, realdir) | |
|
1976 | if chgbindir != self._bindir: | |||
|
1977 | path.insert(1, chgbindir) | |||
1954 | if self._testdir != runtestdir: |
|
1978 | if self._testdir != runtestdir: | |
1955 | path = [self._testdir] + path |
|
1979 | path = [self._testdir] + path | |
1956 | if self._tmpbindir != self._bindir: |
|
1980 | if self._tmpbindir != self._bindir: | |
@@ -2119,6 +2143,8 b' class TestRunner(object):' | |||||
2119 |
|
2143 | |||
2120 | def _cleanup(self): |
|
2144 | def _cleanup(self): | |
2121 | """Clean up state from this test invocation.""" |
|
2145 | """Clean up state from this test invocation.""" | |
|
2146 | if self._chgsockdir: | |||
|
2147 | self._killchgdaemons() | |||
2122 |
|
2148 | |||
2123 | if self.options.keep_tmpdir: |
|
2149 | if self.options.keep_tmpdir: | |
2124 | return |
|
2150 | return | |
@@ -2318,6 +2344,13 b' class TestRunner(object):' | |||||
2318 |
|
2344 | |||
2319 | return self._hgpath |
|
2345 | return self._hgpath | |
2320 |
|
2346 | |||
|
2347 | def _killchgdaemons(self): | |||
|
2348 | """Kill all background chg command servers spawned by tests""" | |||
|
2349 | for f in os.listdir(self._chgsockdir): | |||
|
2350 | if not f.endswith(b'.pid'): | |||
|
2351 | continue | |||
|
2352 | killdaemons(os.path.join(self._chgsockdir, f)) | |||
|
2353 | ||||
2321 | def _outputcoverage(self): |
|
2354 | def _outputcoverage(self): | |
2322 | """Produce code coverage output.""" |
|
2355 | """Produce code coverage output.""" | |
2323 | from coverage import coverage |
|
2356 | from coverage import coverage |
General Comments 0
You need to be logged in to leave comments.
Login now