summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/cooker.py86
1 files changed, 41 insertions, 45 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py
index ca53ff4eaa..3e4f8d8e5e 100644
--- a/bitbake/lib/bb/cooker.py
+++ b/bitbake/lib/bb/cooker.py
@@ -33,7 +33,7 @@ import threading
33from io import StringIO 33from io import StringIO
34from contextlib import closing 34from contextlib import closing
35from functools import wraps 35from functools import wraps
36from collections import defaultdict 36from collections import defaultdict, namedtuple
37import bb, bb.exceptions, bb.command 37import bb, bb.exceptions, bb.command
38from bb import utils, data, parse, event, cache, providers, taskdata, runqueue, build 38from bb import utils, data, parse, event, cache, providers, taskdata, runqueue, build
39import queue 39import queue
@@ -117,58 +117,52 @@ class CookerFeatures(object):
117 return next(self._features) 117 return next(self._features)
118 118
119 119
120class EventLogWriteHandler: 120class EventWriter:
121
122 def __init__(self, cooker, eventfile): 121 def __init__(self, cooker, eventfile):
123 # set our handler's event processor 122 self.file_inited = None
124 self.event = self.EventWriter(cooker, eventfile) 123 self.cooker = cooker
125 124 self.eventfile = eventfile
126 class EventWriter: 125 self.event_queue = []
127 def __init__(self, cooker, eventfile):
128 self.file_inited = None
129 self.cooker = cooker
130 self.eventfile = eventfile
131 self.event_queue = []
132
133 def init_file(self):
134 # write current configuration data
135 with open(eventfile, "w") as f:
136 f.write("%s\n" % json.dumps({ "allvariables" : self.cooker.getAllKeysWithFlags(["doc", "func"])}))
137
138 def write_event(self, event):
139 with open(self.eventfile, "a") as f:
140 try:
141 str_event = codecs.encode(pickle.dumps(event), 'base64').decode('utf-8')
142 f.write("%s\n" % json.dumps({"class": event.__module__ + "." + event.__class__.__name__,
143 "vars": str_event}))
144 except Exception as e:
145 import traceback
146 print(e, traceback.format_exc())
147 126
127 def init_file(self):
128 # write current configuration data
129 with open(eventfile, "w") as f:
130 f.write("%s\n" % json.dumps({ "allvariables" : self.cooker.getAllKeysWithFlags(["doc", "func"])}))
131
132 def write_event(self, event):
133 with open(self.eventfile, "a") as f:
134 try:
135 str_event = codecs.encode(pickle.dumps(event), 'base64').decode('utf-8')
136 f.write("%s\n" % json.dumps({"class": event.__module__ + "." + event.__class__.__name__,
137 "vars": str_event}))
138 except Exception as e:
139 import traceback
140 print(e, traceback.format_exc())
148 141
149 def send(self, event):
150 event_class = event.__module__ + "." + event.__class__.__name__
151 142
152 # init on bb.event.BuildStarted 143 def send(self, event):
153 if self.file_inited is None: 144 event_class = event.__module__ + "." + event.__class__.__name__
154 if event_class == "bb.event.BuildStarted":
155 self.init_file()
156 self.file_inited = True
157 145
158 # write pending events 146 # init on bb.event.BuildStarted
159 for e in self.event_queue: 147 if self.file_inited is None:
160 self.write_event(e) 148 if event_class == "bb.event.BuildStarted":
149 self.init_file()
150 self.file_inited = True
161 151
162 # also write the current event 152 # write pending events
163 self.write_event(event) 153 for e in self.event_queue:
154 self.write_event(e)
164 155
165 else: 156 # also write the current event
166 # queue all events until the file is inited 157 self.write_event(event)
167 self.event_queue.append(event)
168 158
169 else: 159 else:
170 # we have the file, just write the event 160 # queue all events until the file is inited
171 self.write_event(event) 161 self.event_queue.append(event)
162
163 else:
164 # we have the file, just write the event
165 self.write_event(event)
172 166
173#============================================================================# 167#============================================================================#
174# BBCooker 168# BBCooker
@@ -210,7 +204,9 @@ class BBCooker:
210 # we log all events to a file if so directed 204 # we log all events to a file if so directed
211 if self.configuration.writeeventlog: 205 if self.configuration.writeeventlog:
212 # register the log file writer as UI Handler 206 # register the log file writer as UI Handler
213 bb.event.register_UIHhandler(EventLogWriteHandler(self, self.configuration.writeeventlog)) 207 writer = EventWriter(self, self.configuration.writeeventlog)
208 EventLogWriteHandler = namedtuple('EventLogWriteHandler', ['event'])
209 bb.event.register_UIHhandler(EventLogWriteHandler(writer))
214 210
215 self.inotify_modified_files = [] 211 self.inotify_modified_files = []
216 212