mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Backed out changeset a2018012b3ee, may have broken tree (in an inscrutable way, unlike last time :-( )
This commit is contained in:
parent
289ea62e3d
commit
99efd28560
@ -41,11 +41,10 @@ import codecs
|
||||
from datetime import datetime
|
||||
import itertools
|
||||
import logging
|
||||
import shutil
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
import signal
|
||||
import subprocess
|
||||
import sys
|
||||
import threading
|
||||
|
||||
@ -104,18 +103,100 @@ log.addHandler(handler)
|
||||
# SUBPROCESSING #
|
||||
#################
|
||||
|
||||
class Process(subprocess.Popen):
|
||||
class Process:
|
||||
"""
|
||||
Represents our view of a subprocess.
|
||||
It adds a kill() method which allows it to be stopped explicitly.
|
||||
Represents a subprocess of this process. We don't just directly use the
|
||||
subprocess module here because we want compatibility with Python 2.3 on
|
||||
non-Windows platforms. :-(
|
||||
"""
|
||||
|
||||
def kill(self):
|
||||
def __init__(self, command, args, env, inputdata = None):
|
||||
"""
|
||||
Creates a process representing the execution of the given command, which
|
||||
must be an absolute path, with the given arguments in the given environment.
|
||||
The process is then started.
|
||||
"""
|
||||
command = os.path.abspath(command)
|
||||
if IS_WIN32:
|
||||
pid = "%i" % self.pid
|
||||
subprocess.Popen(["taskkill", "/F", "/PID", pid]).wait()
|
||||
import tempfile
|
||||
import subprocess
|
||||
|
||||
if inputdata:
|
||||
inputfile = tempfile.TemporaryFile()
|
||||
inputfile.write(inputdata)
|
||||
inputfile.seek(0)
|
||||
else:
|
||||
inputfile = None
|
||||
|
||||
cmd = [command]
|
||||
cmd.extend(args)
|
||||
p = subprocess.Popen(cmd, env = env,
|
||||
stdout = subprocess.PIPE,
|
||||
stderr = subprocess.STDOUT,
|
||||
stdin = inputfile)
|
||||
self._out = p.stdout
|
||||
else:
|
||||
os.kill(self.pid, signal.SIGTERM)
|
||||
import popen2
|
||||
cmd = []
|
||||
if env:
|
||||
for (k, v) in env.iteritems():
|
||||
cmd.append(k + "='" + v + "' ")
|
||||
|
||||
cmd.append("'" + command + "'")
|
||||
cmd.extend(map(lambda x: "'" + x + "'", args))
|
||||
cmd = " ".join(cmd)
|
||||
p = popen2.Popen4(cmd)
|
||||
self._out = p.fromchild
|
||||
|
||||
if inputdata:
|
||||
p.tochild.write(inputdata)
|
||||
p.tochild.close()
|
||||
|
||||
self._process = p
|
||||
self.pid = p.pid
|
||||
|
||||
self._thread = threading.Thread(target = lambda: self._run())
|
||||
self._thread.start()
|
||||
|
||||
def _run(self):
|
||||
"Continues execution of this process on a separate thread."
|
||||
p = self._process
|
||||
out = self._out
|
||||
|
||||
if IS_WIN32:
|
||||
running = lambda: p.poll() is None
|
||||
else:
|
||||
running = lambda: p.poll() == -1
|
||||
|
||||
# read in lines until the process finishes, then read in any last remaining
|
||||
# buffered lines
|
||||
while running():
|
||||
line = out.readline().rstrip()
|
||||
if len(line) > 0:
|
||||
log.info(line)
|
||||
for line in out:
|
||||
line = line.rstrip()
|
||||
if len(line) > 0:
|
||||
log.info(line)
|
||||
self._status = p.poll()
|
||||
|
||||
def wait(self):
|
||||
"Waits for this process to finish, then returns the process's status."
|
||||
self._thread.join()
|
||||
return self._status
|
||||
|
||||
def kill(self):
|
||||
"Kills this process."
|
||||
try:
|
||||
if not IS_WIN32:
|
||||
os.kill(self._process.pid, signal.SIGKILL)
|
||||
else:
|
||||
import subprocess
|
||||
pid = "%i" % self.pid
|
||||
process = subprocess.Popen(["taskkill", "/F", "/PID", pid])
|
||||
process.wait()
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
#################
|
||||
@ -351,7 +432,7 @@ def fillCertificateDB(profileDir):
|
||||
certutil = DIST_BIN + "/certutil" + BIN_SUFFIX
|
||||
pk12util = DIST_BIN + "/pk12util" + BIN_SUFFIX
|
||||
|
||||
status = Process([certutil, "-N", "-d", profileDir, "-f", pwfilePath], env = environment()).wait()
|
||||
status = Process(certutil, ["-N", "-d", profileDir, "-f", pwfilePath], environment()).wait()
|
||||
if status != 0:
|
||||
return status
|
||||
|
||||
@ -360,17 +441,12 @@ def fillCertificateDB(profileDir):
|
||||
for item in files:
|
||||
root, ext = os.path.splitext(item)
|
||||
if ext == ".ca":
|
||||
args = ["-A", "-i", os.path.join(CERTS_DIR, item),
|
||||
"-d", profileDir,
|
||||
"-f", pwfilePath,
|
||||
"-n", root,
|
||||
"-t", "CT,,"]
|
||||
Process([certutil] + args, env = environment()).wait()
|
||||
Process(certutil, ["-A", "-i", os.path.join(CERTS_DIR, item),
|
||||
"-d", profileDir, "-f", pwfilePath, "-n", root, "-t", "CT,,"],
|
||||
environment()).wait()
|
||||
if ext == ".client":
|
||||
args = ["-i", os.path.join(CERTS_DIR, item),
|
||||
"-w", pwfilePath,
|
||||
"-d", profileDir]
|
||||
Process([pk12util] + args, env = environment()).wait()
|
||||
Process(pk12util, ["-i", os.path.join(CERTS_DIR, item), "-w", pwfilePath,
|
||||
"-d", profileDir], environment()).wait()
|
||||
|
||||
os.unlink(pwfilePath)
|
||||
return 0
|
||||
@ -402,8 +478,7 @@ def runApp(testURL, env, app, profileDir, extraArgs):
|
||||
|
||||
# start ssltunnel to provide https:// URLs capability
|
||||
ssltunnel = DIST_BIN + "/ssltunnel" + BIN_SUFFIX
|
||||
args = [os.path.join(CERTS_DIR, "ssltunnel.cfg")]
|
||||
ssltunnelProcess = Process([ssltunnel] + args, env = environment())
|
||||
ssltunnelProcess = Process(ssltunnel, [os.path.join(CERTS_DIR, "ssltunnel.cfg")], environment())
|
||||
log.info("SSL tunnel pid: %d", ssltunnelProcess.pid)
|
||||
|
||||
"Run the app, returning the time at which it was started."
|
||||
@ -431,7 +506,7 @@ def runApp(testURL, env, app, profileDir, extraArgs):
|
||||
else:
|
||||
args.append((testURL))
|
||||
args.extend(extraArgs)
|
||||
proc = Process([cmd] + args, env = environment(env))
|
||||
proc = Process(cmd, args, env = environment(env))
|
||||
log.info("Application pid: %d", proc.pid)
|
||||
status = proc.wait()
|
||||
if status != 0:
|
||||
|
@ -77,11 +77,8 @@ def installDbFiles(path, dest):
|
||||
|
||||
|
||||
def runUtil(util, args, inputdata = None):
|
||||
if inputdata:
|
||||
proc = automation.Process([util] + args, env = automation.environment(), stdin = automation.PIPE)
|
||||
proc.communicate(inputdata)
|
||||
return proc.returncode
|
||||
return automation.Process([util] + args, env = automation.environment()).wait()
|
||||
proc = automation.Process(util, args, automation.environment(), inputdata)
|
||||
return proc.wait()
|
||||
|
||||
|
||||
def createRandomFile(randomFile):
|
||||
|
@ -222,7 +222,7 @@ class MochitestServer:
|
||||
"-f", "./" + "server.js"]
|
||||
|
||||
xpcshell = automation.DIST_BIN + "/" + "xpcshell";
|
||||
self._process = automation.Process([xpcshell] + args, env = env)
|
||||
self._process = automation.Process(xpcshell, args, env = env)
|
||||
pid = self._process.pid
|
||||
if pid < 0:
|
||||
print "Error starting server."
|
||||
|
Loading…
Reference in New Issue
Block a user