comparison tests/run-tests.py @ 19274:6f666780f846

run-tests: introduce threadtmp directory
author Matt Mackall <mpm@selenic.com>
date Sun, 02 Jun 2013 16:38:15 -0500
parents f3effc499288
children de44cf138761
comparison
equal deleted inserted replaced
19273:f3effc499288 19274:6f666780f846
360 assert '=' in key, ('extra config opt %s must ' 360 assert '=' in key, ('extra config opt %s must '
361 'have an = for assignment' % opt) 361 'have an = for assignment' % opt)
362 hgrc.write('[%s]\n%s\n' % (section, key)) 362 hgrc.write('[%s]\n%s\n' % (section, key))
363 hgrc.close() 363 hgrc.close()
364 364
365 def createenv(options, testtmp): 365 def createenv(options, testtmp, threadtmp):
366 env = os.environ.copy() 366 env = os.environ.copy()
367 env['TESTTMP'] = testtmp 367 env['TESTTMP'] = testtmp
368 env['HOME'] = testtmp 368 env['HOME'] = testtmp
369 env["HGPORT"] = str(options.port) 369 env["HGPORT"] = str(options.port)
370 env["HGPORT1"] = str(options.port + 1) 370 env["HGPORT1"] = str(options.port + 1)
371 env["HGPORT2"] = str(options.port + 2) 371 env["HGPORT2"] = str(options.port + 2)
372 env["HGRCPATH"] = os.path.join(HGTMP, '.hgrc') 372 env["HGRCPATH"] = os.path.join(threadtmp, '.hgrc')
373 env["DAEMON_PIDS"] = os.path.join(HGTMP, 'daemon.pids') 373 env["DAEMON_PIDS"] = os.path.join(threadtmp, 'daemon.pids')
374 env["HGEDITOR"] = sys.executable + ' -c "import sys; sys.exit(0)"' 374 env["HGEDITOR"] = sys.executable + ' -c "import sys; sys.exit(0)"'
375 env["HGMERGE"] = "internal:merge" 375 env["HGMERGE"] = "internal:merge"
376 env["HGUSER"] = "test" 376 env["HGUSER"] = "test"
377 env["HGENCODING"] = "ascii" 377 env["HGENCODING"] = "ascii"
378 env["HGENCODINGMODE"] = "strict" 378 env["HGENCODINGMODE"] = "strict"
868 868
869 for s, r in replacements: 869 for s, r in replacements:
870 output = re.sub(s, r, output) 870 output = re.sub(s, r, output)
871 return ret, output.splitlines(True) 871 return ret, output.splitlines(True)
872 872
873 def runone(options, test): 873 def runone(options, test, count):
874 '''returns a result element: (code, test, msg)''' 874 '''returns a result element: (code, test, msg)'''
875 875
876 def skip(msg): 876 def skip(msg):
877 if options.verbose: 877 if options.verbose:
878 log("\nSkipping %s: %s" % (testpath, msg)) 878 log("\nSkipping %s: %s" % (testpath, msg))
944 944
945 if os.path.exists(err): 945 if os.path.exists(err):
946 os.remove(err) # Remove any previous output files 946 os.remove(err) # Remove any previous output files
947 947
948 # Make a tmp subdirectory to work in 948 # Make a tmp subdirectory to work in
949 testtmp = os.path.join(HGTMP, os.path.basename(test)) 949 threadtmp = os.path.join(HGTMP, "child%d" % count)
950 testtmp = os.path.join(threadtmp, os.path.basename(test))
951 os.mkdir(threadtmp)
950 os.mkdir(testtmp) 952 os.mkdir(testtmp)
951 953
952 replacements = [ 954 replacements = [
953 (r':%s\b' % options.port, ':$HGPORT'), 955 (r':%s\b' % options.port, ':$HGPORT'),
954 (r':%s\b' % (options.port + 1), ':$HGPORT1'), 956 (r':%s\b' % (options.port + 1), ':$HGPORT1'),
962 '\\' + c 964 '\\' + c
963 for c in testtmp), '$TESTTMP')) 965 for c in testtmp), '$TESTTMP'))
964 else: 966 else:
965 replacements.append((re.escape(testtmp), '$TESTTMP')) 967 replacements.append((re.escape(testtmp), '$TESTTMP'))
966 968
967 env = createenv(options, testtmp) 969 env = createenv(options, testtmp, threadtmp)
968 createhgrc(env['HGRCPATH'], options) 970 createhgrc(env['HGRCPATH'], options)
969 971
970 if options.time: 972 if options.time:
971 starttime = time.time() 973 starttime = time.time()
972 ret, out = runner(testpath, testtmp, options, replacements, env) 974 ret, out = runner(testpath, testtmp, options, replacements, env)
1034 sys.stdout.write(result[0]) 1036 sys.stdout.write(result[0])
1035 sys.stdout.flush() 1037 sys.stdout.flush()
1036 iolock.release() 1038 iolock.release()
1037 1039
1038 if not options.keep_tmpdir: 1040 if not options.keep_tmpdir:
1039 shutil.rmtree(testtmp, True) 1041 shutil.rmtree(threadtmp, True)
1040 return result 1042 return result
1041 1043
1042 _hgpath = None 1044 _hgpath = None
1043 1045
1044 def _gethgpath(): 1046 def _gethgpath():
1187 iolock = threading.Lock() 1189 iolock = threading.Lock()
1188 abort = False 1190 abort = False
1189 1191
1190 def runqueue(options, tests): 1192 def runqueue(options, tests):
1191 for test in tests: 1193 for test in tests:
1192 code, test, msg = runone(options, test) 1194 code, test, msg = runone(options, test, 0)
1193 resultslock.acquire() 1195 resultslock.acquire()
1194 results[code].append((test, msg)) 1196 results[code].append((test, msg))
1195 resultslock.release() 1197 resultslock.release()
1196 1198
1197 if options.first and code not in '.si': 1199 if options.first and code not in '.si':