terminal: Fix gnome-terminal to work with recent versions
Currently gnome-terminal just returns straight away, opening a terminal in a new separate process we have no insight into. For patch resolution, this leads to spawning many different terminal windows, for pydevshell, it just flashes a window up and then closes. We need to block until the command completes but gnome-terminal gives us no way to do this. We therefore write the pid to a file using a "phonehome" wrapper script, then monitor the pid until it exits. [YOCTO #7254] (also fixing do_devpyshell) (From OE-Core rev: 76e8ab47c936674b8bb9bf1c48de53b30f5bf74a) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
9df3cdf42d
commit
c706bfbabb
|
@ -66,7 +66,28 @@ class Gnome(XTerminal):
|
||||||
if vernum and LooseVersion(vernum) >= '3.10':
|
if vernum and LooseVersion(vernum) >= '3.10':
|
||||||
logger.debug(1, 'Gnome-Terminal 3.10 or later does not support --disable-factory')
|
logger.debug(1, 'Gnome-Terminal 3.10 or later does not support --disable-factory')
|
||||||
self.command = 'gnome-terminal -t "{title}" -x {command}'
|
self.command = 'gnome-terminal -t "{title}" -x {command}'
|
||||||
XTerminal.__init__(self, sh_cmd, title, env, d)
|
|
||||||
|
# We need to know when the command completes but gnome-terminal gives us no way
|
||||||
|
# to do this. We therefore write the pid to a file using a "phonehome" wrapper
|
||||||
|
# script, then monitor the pid until it exits. Thanks gnome!
|
||||||
|
|
||||||
|
import tempfile
|
||||||
|
pidfile = tempfile.NamedTemporaryFile(delete = False).name
|
||||||
|
try:
|
||||||
|
sh_cmd = "oe-gnome-terminal-phonehome " + pidfile + " " + sh_cmd
|
||||||
|
XTerminal.__init__(self, sh_cmd, title, env, d)
|
||||||
|
while os.stat(pidfile).st_size <= 0:
|
||||||
|
continue
|
||||||
|
with open(pidfile, "r") as f:
|
||||||
|
pid = int(f.readline())
|
||||||
|
finally:
|
||||||
|
os.unlink(pidfile)
|
||||||
|
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
os.kill(pid, 0)
|
||||||
|
except OSError:
|
||||||
|
return
|
||||||
|
|
||||||
class Mate(XTerminal):
|
class Mate(XTerminal):
|
||||||
command = 'mate-terminal -t "{title}" -x {command}'
|
command = 'mate-terminal -t "{title}" -x {command}'
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Gnome terminal won't tell us which PID a given command is run as
|
||||||
|
# or allow a single instance so we can't tell when it completes.
|
||||||
|
# This allows us to figure out the PID of the target so we can tell
|
||||||
|
# when its done.
|
||||||
|
#
|
||||||
|
echo $$ > $1
|
||||||
|
shift
|
||||||
|
exec $@
|
Loading…
Reference in New Issue