diff options
| -rw-r--r-- | bitbake/lib/bb/cooker.py | 36 |
1 files changed, 11 insertions, 25 deletions
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index d658db9bd8..c5bfef55d6 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
| @@ -102,12 +102,15 @@ class CookerFeatures(object): | |||
| 102 | 102 | ||
| 103 | class EventWriter: | 103 | class EventWriter: |
| 104 | def __init__(self, cooker, eventfile): | 104 | def __init__(self, cooker, eventfile): |
| 105 | self.file_inited = None | ||
| 106 | self.cooker = cooker | 105 | self.cooker = cooker |
| 107 | self.eventfile = eventfile | 106 | self.eventfile = eventfile |
| 108 | self.event_queue = [] | 107 | self.event_queue = [] |
| 109 | 108 | ||
| 110 | def write_event(self, event): | 109 | def write_variables(self): |
| 110 | with open(self.eventfile, "a") as f: | ||
| 111 | f.write("%s\n" % json.dumps({ "allvariables" : self.cooker.getAllKeysWithFlags(["doc", "func"])})) | ||
| 112 | |||
| 113 | def send(self, event): | ||
| 111 | with open(self.eventfile, "a") as f: | 114 | with open(self.eventfile, "a") as f: |
| 112 | try: | 115 | try: |
| 113 | str_event = codecs.encode(pickle.dumps(event), 'base64').decode('utf-8') | 116 | str_event = codecs.encode(pickle.dumps(event), 'base64').decode('utf-8') |
| @@ -117,28 +120,6 @@ class EventWriter: | |||
| 117 | import traceback | 120 | import traceback |
| 118 | print(err, traceback.format_exc()) | 121 | print(err, traceback.format_exc()) |
| 119 | 122 | ||
| 120 | def send(self, event): | ||
| 121 | if self.file_inited: | ||
| 122 | # we have the file, just write the event | ||
| 123 | self.write_event(event) | ||
| 124 | else: | ||
| 125 | # init on bb.event.BuildStarted | ||
| 126 | name = "%s.%s" % (event.__module__, event.__class__.__name__) | ||
| 127 | if name in ("bb.event.BuildStarted", "bb.cooker.CookerExit"): | ||
| 128 | with open(self.eventfile, "w") as f: | ||
| 129 | f.write("%s\n" % json.dumps({ "allvariables" : self.cooker.getAllKeysWithFlags(["doc", "func"])})) | ||
| 130 | |||
| 131 | self.file_inited = True | ||
| 132 | |||
| 133 | # write pending events | ||
| 134 | for evt in self.event_queue: | ||
| 135 | self.write_event(evt) | ||
| 136 | |||
| 137 | # also write the current event | ||
| 138 | self.write_event(event) | ||
| 139 | else: | ||
| 140 | # queue all events until the file is inited | ||
| 141 | self.event_queue.append(event) | ||
| 142 | 123 | ||
| 143 | #============================================================================# | 124 | #============================================================================# |
| 144 | # BBCooker | 125 | # BBCooker |
| @@ -416,6 +397,7 @@ class BBCooker: | |||
| 416 | def setupEventLog(self, eventlog): | 397 | def setupEventLog(self, eventlog): |
| 417 | if self.eventlog and self.eventlog[0] != eventlog: | 398 | if self.eventlog and self.eventlog[0] != eventlog: |
| 418 | bb.event.unregister_UIHhandler(self.eventlog[1]) | 399 | bb.event.unregister_UIHhandler(self.eventlog[1]) |
| 400 | self.eventlog = None | ||
| 419 | if not self.eventlog or self.eventlog[0] != eventlog: | 401 | if not self.eventlog or self.eventlog[0] != eventlog: |
| 420 | # we log all events to a file if so directed | 402 | # we log all events to a file if so directed |
| 421 | # register the log file writer as UI Handler | 403 | # register the log file writer as UI Handler |
| @@ -423,7 +405,7 @@ class BBCooker: | |||
| 423 | bb.utils.mkdirhier(os.path.dirname(eventlog)) | 405 | bb.utils.mkdirhier(os.path.dirname(eventlog)) |
| 424 | writer = EventWriter(self, eventlog) | 406 | writer = EventWriter(self, eventlog) |
| 425 | EventLogWriteHandler = namedtuple('EventLogWriteHandler', ['event']) | 407 | EventLogWriteHandler = namedtuple('EventLogWriteHandler', ['event']) |
| 426 | self.eventlog = (eventlog, bb.event.register_UIHhandler(EventLogWriteHandler(writer))) | 408 | self.eventlog = (eventlog, bb.event.register_UIHhandler(EventLogWriteHandler(writer)), writer) |
| 427 | 409 | ||
| 428 | def updateConfigOpts(self, options, environment, cmdline): | 410 | def updateConfigOpts(self, options, environment, cmdline): |
| 429 | self.ui_cmdline = cmdline | 411 | self.ui_cmdline = cmdline |
| @@ -1404,6 +1386,8 @@ class BBCooker: | |||
| 1404 | buildname = self.databuilder.mcdata[mc].getVar("BUILDNAME") | 1386 | buildname = self.databuilder.mcdata[mc].getVar("BUILDNAME") |
| 1405 | if fireevents: | 1387 | if fireevents: |
| 1406 | bb.event.fire(bb.event.BuildStarted(buildname, [item]), self.databuilder.mcdata[mc]) | 1388 | bb.event.fire(bb.event.BuildStarted(buildname, [item]), self.databuilder.mcdata[mc]) |
| 1389 | if self.eventlog: | ||
| 1390 | self.eventlog[2].write_variables() | ||
| 1407 | bb.event.enable_heartbeat() | 1391 | bb.event.enable_heartbeat() |
| 1408 | 1392 | ||
| 1409 | # Execute the runqueue | 1393 | # Execute the runqueue |
| @@ -1547,6 +1531,8 @@ class BBCooker: | |||
| 1547 | 1531 | ||
| 1548 | for mc in self.multiconfigs: | 1532 | for mc in self.multiconfigs: |
| 1549 | bb.event.fire(bb.event.BuildStarted(buildname, ntargets), self.databuilder.mcdata[mc]) | 1533 | bb.event.fire(bb.event.BuildStarted(buildname, ntargets), self.databuilder.mcdata[mc]) |
| 1534 | if self.eventlog: | ||
| 1535 | self.eventlog[2].write_variables() | ||
| 1550 | bb.event.enable_heartbeat() | 1536 | bb.event.enable_heartbeat() |
| 1551 | 1537 | ||
| 1552 | rq = bb.runqueue.RunQueue(self, self.data, self.recipecaches, taskdata, runlist) | 1538 | rq = bb.runqueue.RunQueue(self, self.data, self.recipecaches, taskdata, runlist) |
