Mercurial > hg
changeset 18059:c135ab6413b4
run-tests: on windows, put correct python at front of PATH
The older approach of trying to copy the python executable into the test
directory was doomed to fail.
There remains one weakness with this approach: if you've run "make local",
tests may pick up the wrong extension DLLs from inside the source tree. I
don't know why this happens.
A reasonable workaround for now is to test either using --local or with
a working directory that does not contain built DLLs.
author | Bryan O'Sullivan <bryano@fb.com> |
---|---|
date | Wed, 12 Dec 2012 14:52:58 -0800 |
parents | fe5a41144982 |
children | d2e97d86e4db |
files | tests/run-tests.py |
diffstat | 1 files changed, 19 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/tests/run-tests.py Tue Dec 11 15:38:42 2012 -0800 +++ b/tests/run-tests.py Wed Dec 12 14:52:58 2012 -0800 @@ -328,7 +328,7 @@ # Before we go any further, check for pre-requisite tools # stuff from coreutils (cat, rm, etc) are not tested for p in requiredtools: - if os.name == 'nt': + if os.name == 'nt' and not p.endswith('.exe'): p += '.exe' found = findprogram(p) if found: @@ -365,18 +365,24 @@ exename = 'python' if sys.platform == 'win32': exename = 'python.exe' - vlog('# Making python executable in test path use correct Python') - mypython = os.path.join(BINDIR, exename) - try: - os.symlink(sys.executable, mypython) - except AttributeError: - # windows fallback - shutil.copyfile(sys.executable, mypython) - shutil.copymode(sys.executable, mypython) - except OSError, err: - # child processes may race, which is harmless - if err.errno != errno.EEXIST: - raise + if getattr(os, 'symlink', None): + vlog("# Making python executable in test path a symlink to '%s'" % + sys.executable) + mypython = os.path.join(BINDIR, exename) + try: + os.symlink(sys.executable, mypython) + except OSError, err: + # child processes may race, which is harmless + if err.errno != errno.EEXIST: + raise + else: + vlog("# Modifying search path to find %s in '%s'" % (exename, exedir)) + path = os.environ['PATH'].split(os.pathsep) + while exedir in path: + path.remove(exedir) + os.environ['PATH'] = os.pathsep.join([exedir] + path) + if not findprogram(exename): + print "WARNING: Cannot find %s in search path" % exename def installhg(options): vlog("# Performing temporary installation of HG")