comparison tests/run-tests.py @ 40930:fcdff048a8e5

py3: teach run-tests.py to handle exe with spaces when --local isn't specified This was the reason that no amount of quoting worked in test-hghave.t. `os.popen()` needed to be swapped out because while the added quoting around line 3124 worked on py3, it failed on py2. See 38d51371792b. The problem with `os.system()` was wrongly splitting the command on the space in 'Program Files', regardless of quoting. It looks like there are a few other instances of `os.system()` in core code, so presumably those should be replaced?
author Matt Harbison <matt_harbison@yahoo.com>
date Thu, 13 Dec 2018 00:18:47 -0500
parents c311424ea579
children 2465e0b27a0d
comparison
equal deleted inserted replaced
40929:43ca24b772d6 40930:fcdff048a8e5
3017 # The --home="" trick works only on OS where os.sep == '/' 3017 # The --home="" trick works only on OS where os.sep == '/'
3018 # because of a distutils convert_path() fast-path. Avoid it at 3018 # because of a distutils convert_path() fast-path. Avoid it at
3019 # least on Windows for now, deal with .pydistutils.cfg bugs 3019 # least on Windows for now, deal with .pydistutils.cfg bugs
3020 # when they happen. 3020 # when they happen.
3021 nohome = b'' 3021 nohome = b''
3022 cmd = (b'%(exe)s setup.py %(pure)s clean --all' 3022 cmd = (b'"%(exe)s" setup.py %(pure)s clean --all'
3023 b' build %(compiler)s --build-base="%(base)s"' 3023 b' build %(compiler)s --build-base="%(base)s"'
3024 b' install --force --prefix="%(prefix)s"' 3024 b' install --force --prefix="%(prefix)s"'
3025 b' --install-lib="%(libdir)s"' 3025 b' --install-lib="%(libdir)s"'
3026 b' --install-scripts="%(bindir)s" %(nohome)s >%(logfile)s 2>&1' 3026 b' --install-scripts="%(bindir)s" %(nohome)s >%(logfile)s 2>&1'
3027 % {b'exe': exe, b'pure': pure, 3027 % {b'exe': exe, b'pure': pure,
3040 raise 3040 raise
3041 makedirs(self._pythondir) 3041 makedirs(self._pythondir)
3042 makedirs(self._bindir) 3042 makedirs(self._bindir)
3043 3043
3044 vlog("# Running", cmd) 3044 vlog("# Running", cmd)
3045 if os.system(_strpath(cmd)) == 0: 3045 if subprocess.call(_strpath(cmd), shell=True) == 0:
3046 if not self.options.verbose: 3046 if not self.options.verbose:
3047 try: 3047 try:
3048 os.remove(installerrs) 3048 os.remove(installerrs)
3049 except OSError as e: 3049 except OSError as e:
3050 if e.errno != errno.ENOENT: 3050 if e.errno != errno.ENOENT:
3119 """Return the path to the mercurial package that is actually found by 3119 """Return the path to the mercurial package that is actually found by
3120 the current Python interpreter.""" 3120 the current Python interpreter."""
3121 if self._hgpath is not None: 3121 if self._hgpath is not None:
3122 return self._hgpath 3122 return self._hgpath
3123 3123
3124 cmd = b'%s -c "import mercurial; print (mercurial.__path__[0])"' 3124 cmd = b'"%s" -c "import mercurial; print (mercurial.__path__[0])"'
3125 cmd = cmd % PYTHON 3125 cmd = cmd % PYTHON
3126 if PYTHON3: 3126 if PYTHON3:
3127 cmd = _strpath(cmd) 3127 cmd = _strpath(cmd)
3128 pipe = os.popen(cmd) 3128
3129 try: 3129 p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
3130 self._hgpath = _bytespath(pipe.read().strip()) 3130 out, err = p.communicate()
3131 finally: 3131
3132 pipe.close() 3132 self._hgpath = out.strip()
3133 3133
3134 return self._hgpath 3134 return self._hgpath
3135 3135
3136 def _installchg(self): 3136 def _installchg(self):
3137 """Install chg into the test environment""" 3137 """Install chg into the test environment"""