tests/run-tests.py
changeset 44144 bd0de73cf810
parent 44021 6d3b67a837a6
child 44446 109322cd322a
equal deleted inserted replaced
44143:7f86426fdd2c 44144:bd0de73cf810
   553         "--pure",
   553         "--pure",
   554         action="store_true",
   554         action="store_true",
   555         help="use pure Python code instead of C extensions",
   555         help="use pure Python code instead of C extensions",
   556     )
   556     )
   557     hgconf.add_argument(
   557     hgconf.add_argument(
   558         "-3",
       
   559         "--py3-warnings",
       
   560         action="store_true",
       
   561         help="enable Py3k warnings on Python 2.7+",
       
   562     )
       
   563     hgconf.add_argument(
       
   564         "--with-chg",
   558         "--with-chg",
   565         metavar="CHG",
   559         metavar="CHG",
   566         help="use specified chg wrapper in place of hg",
   560         help="use specified chg wrapper in place of hg",
   567     )
   561     )
   568     hgconf.add_argument(
   562     hgconf.add_argument(
   746             sys.stderr.write(
   740             sys.stderr.write(
   747                 'warning: --slowtimeout option ignored with --debug\n'
   741                 'warning: --slowtimeout option ignored with --debug\n'
   748             )
   742             )
   749         options.timeout = 0
   743         options.timeout = 0
   750         options.slowtimeout = 0
   744         options.slowtimeout = 0
   751     if options.py3_warnings:
       
   752         if PYTHON3:
       
   753             parser.error('--py3-warnings can only be used on Python 2.7')
       
   754 
   745 
   755     if options.blacklist:
   746     if options.blacklist:
   756         options.blacklist = parselistfiles(options.blacklist, 'blacklist')
   747         options.blacklist = parselistfiles(options.blacklist, 'blacklist')
   757     if options.whitelist:
   748     if options.whitelist:
   758         options.whitelisted = parselistfiles(options.whitelist, 'whitelist')
   749         options.whitelisted = parselistfiles(options.whitelist, 'whitelist')
   907         debug=False,
   898         debug=False,
   908         first=False,
   899         first=False,
   909         timeout=None,
   900         timeout=None,
   910         startport=None,
   901         startport=None,
   911         extraconfigopts=None,
   902         extraconfigopts=None,
   912         py3warnings=False,
       
   913         shell=None,
   903         shell=None,
   914         hgcommand=None,
   904         hgcommand=None,
   915         slowtimeout=None,
   905         slowtimeout=None,
   916         usechg=False,
   906         usechg=False,
   917         useipv6=False,
   907         useipv6=False,
   939         instances.
   929         instances.
   940 
   930 
   941         extraconfigopts is an iterable of extra hgrc config options. Values
   931         extraconfigopts is an iterable of extra hgrc config options. Values
   942         must have the form "key=value" (something understood by hgrc). Values
   932         must have the form "key=value" (something understood by hgrc). Values
   943         of the form "foo.key=value" will result in "[foo] key=value".
   933         of the form "foo.key=value" will result in "[foo] key=value".
   944 
       
   945         py3warnings enables Py3k warnings.
       
   946 
   934 
   947         shell is the shell to execute tests in.
   935         shell is the shell to execute tests in.
   948         """
   936         """
   949         if timeout is None:
   937         if timeout is None:
   950             timeout = defaults['timeout']
   938             timeout = defaults['timeout']
   966         self._first = first
   954         self._first = first
   967         self._timeout = timeout
   955         self._timeout = timeout
   968         self._slowtimeout = slowtimeout
   956         self._slowtimeout = slowtimeout
   969         self._startport = startport
   957         self._startport = startport
   970         self._extraconfigopts = extraconfigopts or []
   958         self._extraconfigopts = extraconfigopts or []
   971         self._py3warnings = py3warnings
       
   972         self._shell = _bytespath(shell)
   959         self._shell = _bytespath(shell)
   973         self._hgcommand = hgcommand or b'hg'
   960         self._hgcommand = hgcommand or b'hg'
   974         self._usechg = usechg
   961         self._usechg = usechg
   975         self._useipv6 = useipv6
   962         self._useipv6 = useipv6
   976 
   963 
  1513     @property
  1500     @property
  1514     def refpath(self):
  1501     def refpath(self):
  1515         return os.path.join(self._testdir, b'%s.out' % self.bname)
  1502         return os.path.join(self._testdir, b'%s.out' % self.bname)
  1516 
  1503 
  1517     def _run(self, env):
  1504     def _run(self, env):
  1518         py3switch = self._py3warnings and b' -3' or b''
       
  1519         # Quote the python(3) executable for Windows
  1505         # Quote the python(3) executable for Windows
  1520         cmd = b'"%s"%s "%s"' % (PYTHON, py3switch, self.path)
  1506         cmd = b'"%s" "%s"' % (PYTHON, self.path)
  1521         vlog("# Running", cmd.decode("utf-8"))
  1507         vlog("# Running", cmd.decode("utf-8"))
  1522         normalizenewlines = os.name == 'nt'
  1508         normalizenewlines = os.name == 'nt'
  1523         result = self._runcommand(cmd, env, normalizenewlines=normalizenewlines)
  1509         result = self._runcommand(cmd, env, normalizenewlines=normalizenewlines)
  1524         if self._aborted:
  1510         if self._aborted:
  1525             raise KeyboardInterrupt()
  1511             raise KeyboardInterrupt()
  3364             debug=self.options.debug,
  3350             debug=self.options.debug,
  3365             first=self.options.first,
  3351             first=self.options.first,
  3366             timeout=self.options.timeout,
  3352             timeout=self.options.timeout,
  3367             startport=self._getport(count),
  3353             startport=self._getport(count),
  3368             extraconfigopts=self.options.extra_config_opt,
  3354             extraconfigopts=self.options.extra_config_opt,
  3369             py3warnings=self.options.py3_warnings,
       
  3370             shell=self.options.shell,
  3355             shell=self.options.shell,
  3371             hgcommand=self._hgcommand,
  3356             hgcommand=self._hgcommand,
  3372             usechg=bool(self.options.with_chg or self.options.chg),
  3357             usechg=bool(self.options.with_chg or self.options.chg),
  3373             useipv6=useipv6,
  3358             useipv6=useipv6,
  3374             **kwds
  3359             **kwds
  3510             sys.exit(1)
  3495             sys.exit(1)
  3511         os.chdir(self._testdir)
  3496         os.chdir(self._testdir)
  3512 
  3497 
  3513         self._usecorrectpython()
  3498         self._usecorrectpython()
  3514 
  3499 
  3515         if self.options.py3_warnings and not self.options.anycoverage:
       
  3516             vlog("# Updating hg command to enable Py3k Warnings switch")
       
  3517             with open(os.path.join(self._bindir, 'hg'), 'rb') as f:
       
  3518                 lines = [line.rstrip() for line in f]
       
  3519                 lines[0] += ' -3'
       
  3520             with open(os.path.join(self._bindir, 'hg'), 'wb') as f:
       
  3521                 for line in lines:
       
  3522                     f.write(line + '\n')
       
  3523 
       
  3524         hgbat = os.path.join(self._bindir, b'hg.bat')
  3500         hgbat = os.path.join(self._bindir, b'hg.bat')
  3525         if os.path.isfile(hgbat):
  3501         if os.path.isfile(hgbat):
  3526             # hg.bat expects to be put in bin/scripts while run-tests.py
  3502             # hg.bat expects to be put in bin/scripts while run-tests.py
  3527             # installation layout put it in bin/ directly. Fix it
  3503             # installation layout put it in bin/ directly. Fix it
  3528             with open(hgbat, 'rb') as f:
  3504             with open(hgbat, 'rb') as f: