summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/command.py7
-rw-r--r--bitbake/lib/bb/event.py17
-rw-r--r--bitbake/lib/bb/server/process.py12
-rw-r--r--bitbake/lib/bb/server/xmlrpc.py6
-rw-r--r--bitbake/lib/bb/ui/knotty.py12
5 files changed, 46 insertions, 8 deletions
diff --git a/bitbake/lib/bb/command.py b/bitbake/lib/bb/command.py
index 33a24406b5..bdf1c36636 100644
--- a/bitbake/lib/bb/command.py
+++ b/bitbake/lib/bb/command.py
@@ -240,6 +240,13 @@ class CommandsSync:
240 name = params[0] 240 name = params[0]
241 command.cooker.createConfigFile(name) 241 command.cooker.createConfigFile(name)
242 242
243 def setEventMask(self, command, params):
244 handlerNum = params[0]
245 llevel = params[1]
246 debug_domains = params[2]
247 mask = params[3]
248 return bb.event.set_UIHmask(handlerNum, llevel, debug_domains, mask)
249
243class CommandsAsync: 250class CommandsAsync:
244 """ 251 """
245 A class of asynchronous commands 252 A class of asynchronous commands
diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py
index 8ffd2c3e18..1169cbfb2b 100644
--- a/bitbake/lib/bb/event.py
+++ b/bitbake/lib/bb/event.py
@@ -193,7 +193,7 @@ def register(name, handler, mask=[]):
193 else: 193 else:
194 _handlers[name] = handler 194 _handlers[name] = handler
195 195
196 if not mask: 196 if not mask or '*' in mask:
197 _catchall_handlers[name] = True 197 _catchall_handlers[name] = True
198 else: 198 else:
199 for m in mask: 199 for m in mask:
@@ -225,7 +225,7 @@ class UIEventFilter(object):
225 self.update(None, level, debug_domains) 225 self.update(None, level, debug_domains)
226 226
227 def update(self, eventmask, level, debug_domains): 227 def update(self, eventmask, level, debug_domains):
228 self.eventmask = None 228 self.eventmask = eventmask
229 self.stdlevel = level 229 self.stdlevel = level
230 self.debug_domains = debug_domains 230 self.debug_domains = debug_domains
231 231
@@ -236,9 +236,20 @@ class UIEventFilter(object):
236 if event.name in self.debug_domains and event.levelno >= self.debug_domains[event.name]: 236 if event.name in self.debug_domains and event.levelno >= self.debug_domains[event.name]:
237 return True 237 return True
238 return False 238 return False
239 # Implement other event masking here on self.eventmask 239 eid = str(event.__class__)[8:-2]
240 if eid not in self.eventmask:
241 return False
240 return True 242 return True
241 243
244def set_UIHmask(handlerNum, level, debug_domains, mask):
245 if not handlerNum in _ui_handlers:
246 return False
247 if '*' in mask:
248 _ui_logfilters[handlerNum].update(None, level, debug_domains)
249 else:
250 _ui_logfilters[handlerNum].update(mask, level, debug_domains)
251 return True
252
242def getName(e): 253def getName(e):
243 """Returns the name of a class or class instance""" 254 """Returns the name of a class or class instance"""
244 if getattr(e, "__name__", None) == None: 255 if getattr(e, "__name__", None) == None:
diff --git a/bitbake/lib/bb/server/process.py b/bitbake/lib/bb/server/process.py
index 99a6bf55cc..e2cec49b74 100644
--- a/bitbake/lib/bb/server/process.py
+++ b/bitbake/lib/bb/server/process.py
@@ -37,8 +37,9 @@ from . import BitBakeBaseServer, BitBakeBaseServerConnection, BaseImplServer
37logger = logging.getLogger('BitBake') 37logger = logging.getLogger('BitBake')
38 38
39class ServerCommunicator(): 39class ServerCommunicator():
40 def __init__(self, connection): 40 def __init__(self, connection, event_handle):
41 self.connection = connection 41 self.connection = connection
42 self.event_handle = event_handle
42 43
43 def runCommand(self, command): 44 def runCommand(self, command):
44 # @todo try/except 45 # @todo try/except
@@ -54,6 +55,8 @@ class ServerCommunicator():
54 except KeyboardInterrupt: 55 except KeyboardInterrupt:
55 pass 56 pass
56 57
58 def getEventHandle(self):
59 return self.event_handle.value
57 60
58class EventAdapter(): 61class EventAdapter():
59 """ 62 """
@@ -84,11 +87,12 @@ class ProcessServer(Process, BaseImplServer):
84 87
85 self.keep_running = Event() 88 self.keep_running = Event()
86 self.keep_running.set() 89 self.keep_running.set()
90 self.event_handle = multiprocessing.Value("i")
87 91
88 def run(self): 92 def run(self):
89 for event in bb.event.ui_queue: 93 for event in bb.event.ui_queue:
90 self.event_queue.put(event) 94 self.event_queue.put(event)
91 self.event_handle = bb.event.register_UIHhandler(self) 95 self.event_handle.value = bb.event.register_UIHhandler(self)
92 bb.cooker.server_main(self.cooker, self.main) 96 bb.cooker.server_main(self.cooker, self.main)
93 97
94 def main(self): 98 def main(self):
@@ -106,7 +110,7 @@ class ProcessServer(Process, BaseImplServer):
106 logger.exception('Running command %s', command) 110 logger.exception('Running command %s', command)
107 111
108 self.event_queue.close() 112 self.event_queue.close()
109 bb.event.unregister_UIHhandler(self.event_handle) 113 bb.event.unregister_UIHhandler(self.event_handle.value)
110 self.command_channel.close() 114 self.command_channel.close()
111 self.cooker.stop() 115 self.cooker.stop()
112 self.idle_commands(.1) 116 self.idle_commands(.1)
@@ -147,7 +151,7 @@ class BitBakeProcessServerConnection(BitBakeBaseServerConnection):
147 self.procserver = serverImpl 151 self.procserver = serverImpl
148 self.ui_channel = ui_channel 152 self.ui_channel = ui_channel
149 self.event_queue = event_queue 153 self.event_queue = event_queue
150 self.connection = ServerCommunicator(self.ui_channel) 154 self.connection = ServerCommunicator(self.ui_channel, self.procserver.event_handle)
151 self.events = self.event_queue 155 self.events = self.event_queue
152 156
153 def terminate(self): 157 def terminate(self):
diff --git a/bitbake/lib/bb/server/xmlrpc.py b/bitbake/lib/bb/server/xmlrpc.py
index d290550e9f..4dee5d9fea 100644
--- a/bitbake/lib/bb/server/xmlrpc.py
+++ b/bitbake/lib/bb/server/xmlrpc.py
@@ -95,7 +95,8 @@ class BitBakeServerCommands():
95 """ 95 """
96 s, t = _create_server(host, port) 96 s, t = _create_server(host, port)
97 97
98 return bb.event.register_UIHhandler(s) 98 self.event_handle = bb.event.register_UIHhandler(s)
99 return self.event_handle
99 100
100 def unregisterEventHandler(self, handlerNum): 101 def unregisterEventHandler(self, handlerNum):
101 """ 102 """
@@ -109,6 +110,9 @@ class BitBakeServerCommands():
109 """ 110 """
110 return self.cooker.command.runCommand(command, self.server.readonly) 111 return self.cooker.command.runCommand(command, self.server.readonly)
111 112
113 def getEventHandle(self):
114 return self.event_handle
115
112 def terminateServer(self): 116 def terminateServer(self):
113 """ 117 """
114 Trigger the server to quit 118 Trigger the server to quit
diff --git a/bitbake/lib/bb/ui/knotty.py b/bitbake/lib/bb/ui/knotty.py
index 09ad99ebe8..1692e3295c 100644
--- a/bitbake/lib/bb/ui/knotty.py
+++ b/bitbake/lib/bb/ui/knotty.py
@@ -232,6 +232,15 @@ def _log_settings_from_server(server):
232 raise BaseException(error) 232 raise BaseException(error)
233 return includelogs, loglines, consolelogfile 233 return includelogs, loglines, consolelogfile
234 234
235_evt_list = [ "bb.runqueue.runQueueExitWait", "bb.event.LogExecTTY", "logging.LogRecord",
236 "bb.build.TaskFailed", "bb.build.TaskBase", "bb.event.ParseStarted",
237 "bb.event.ParseProgress", "bb.event.ParseCompleted", "bb.event.CacheLoadStarted",
238 "bb.event.CacheLoadProgress", "bb.event.CacheLoadCompleted", "bb.command.CommandFailed",
239 "bb.command.CommandExit", "bb.command.CommandCompleted", "bb.cooker.CookerExit",
240 "bb.event.MultipleProviders", "bb.event.NoProvider", "bb.runqueue.sceneQueueTaskStarted",
241 "bb.runqueue.runQueueTaskStarted", "bb.runqueue.runQueueTaskFailed", "bb.runqueue.sceneQueueTaskFailed",
242 "bb.event.BuildBase", "bb.build.TaskStarted", "bb.build.TaskSucceeded", "bb.build.TaskFailedSilent"]
243
235def main(server, eventHandler, params, tf = TerminalFilter): 244def main(server, eventHandler, params, tf = TerminalFilter):
236 245
237 includelogs, loglines, consolelogfile = _log_settings_from_server(server) 246 includelogs, loglines, consolelogfile = _log_settings_from_server(server)
@@ -262,6 +271,9 @@ def main(server, eventHandler, params, tf = TerminalFilter):
262 consolelog.setFormatter(conlogformat) 271 consolelog.setFormatter(conlogformat)
263 logger.addHandler(consolelog) 272 logger.addHandler(consolelog)
264 273
274 llevel, debug_domains = bb.msg.constructLogOptions()
275 server.runCommand(["setEventMask", server.getEventHandle(), llevel, debug_domains, _evt_list])
276
265 if not params.observe_only: 277 if not params.observe_only:
266 params.updateFromServer(server) 278 params.updateFromServer(server)
267 cmdline = params.parseActions() 279 cmdline = params.parseActions()