mirror of
https://git.yoctoproject.org/git/poky
synced 2026-01-04 16:10:04 +00:00
bitbake: cooker: use enum for cooker state to improve readability
enum was introduced in Python 3.4 (Bitbake rev: 35b71a94f8757fcca830f972a42edab1dd000c16) Signed-off-by: Chris Laplante <chris.laplante@agilent.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
2a34c96b8b
commit
9cabda06ab
|
|
@ -109,7 +109,7 @@ class Command:
|
|||
|
||||
def runAsyncCommand(self, _, process_server, halt):
|
||||
try:
|
||||
if self.cooker.state in (bb.cooker.state.error, bb.cooker.state.shutdown, bb.cooker.state.forceshutdown):
|
||||
if self.cooker.state in (bb.cooker.State.ERROR, bb.cooker.State.SHUTDOWN, bb.cooker.State.FORCE_SHUTDOWN):
|
||||
# updateCache will trigger a shutdown of the parser
|
||||
# and then raise BBHandledException triggering an exit
|
||||
self.cooker.updateCache()
|
||||
|
|
@ -119,7 +119,7 @@ class Command:
|
|||
(command, options) = cmd
|
||||
commandmethod = getattr(CommandsAsync, command)
|
||||
needcache = getattr( commandmethod, "needcache" )
|
||||
if needcache and self.cooker.state != bb.cooker.state.running:
|
||||
if needcache and self.cooker.state != bb.cooker.State.RUNNING:
|
||||
self.cooker.updateCache()
|
||||
return True
|
||||
else:
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
|
||||
import enum
|
||||
import sys, os, glob, os.path, re, time
|
||||
import itertools
|
||||
import logging
|
||||
|
|
@ -48,16 +48,15 @@ class CollectionError(bb.BBHandledException):
|
|||
Exception raised when layer configuration is incorrect
|
||||
"""
|
||||
|
||||
class state:
|
||||
initial, parsing, running, shutdown, forceshutdown, stopped, error = list(range(7))
|
||||
|
||||
@classmethod
|
||||
def get_name(cls, code):
|
||||
for name in dir(cls):
|
||||
value = getattr(cls, name)
|
||||
if type(value) == type(cls.initial) and value == code:
|
||||
return name
|
||||
raise ValueError("Invalid status code: %s" % code)
|
||||
class State(enum.Enum):
|
||||
INITIAL = 0,
|
||||
PARSING = 1,
|
||||
RUNNING = 2,
|
||||
SHUTDOWN = 3,
|
||||
FORCE_SHUTDOWN = 4,
|
||||
STOPPED = 5,
|
||||
ERROR = 6
|
||||
|
||||
|
||||
class SkippedPackage:
|
||||
|
|
@ -180,7 +179,7 @@ class BBCooker:
|
|||
pass
|
||||
|
||||
self.command = bb.command.Command(self, self.process_server)
|
||||
self.state = state.initial
|
||||
self.state = State.INITIAL
|
||||
|
||||
self.parser = None
|
||||
|
||||
|
|
@ -226,23 +225,22 @@ class BBCooker:
|
|||
bb.warn("Cooker received SIGTERM, shutting down...")
|
||||
elif signum == signal.SIGHUP:
|
||||
bb.warn("Cooker received SIGHUP, shutting down...")
|
||||
self.state = state.forceshutdown
|
||||
self.state = State.FORCE_SHUTDOWN
|
||||
bb.event._should_exit.set()
|
||||
|
||||
def setFeatures(self, features):
|
||||
# we only accept a new feature set if we're in state initial, so we can reset without problems
|
||||
if not self.state in [state.initial, state.shutdown, state.forceshutdown, state.stopped, state.error]:
|
||||
if not self.state in [State.INITIAL, State.SHUTDOWN, State.FORCE_SHUTDOWN, State.STOPPED, State.ERROR]:
|
||||
raise Exception("Illegal state for feature set change")
|
||||
original_featureset = list(self.featureset)
|
||||
for feature in features:
|
||||
self.featureset.setFeature(feature)
|
||||
bb.debug(1, "Features set %s (was %s)" % (original_featureset, list(self.featureset)))
|
||||
if (original_featureset != list(self.featureset)) and self.state != state.error and hasattr(self, "data"):
|
||||
if (original_featureset != list(self.featureset)) and self.state != State.ERROR and hasattr(self, "data"):
|
||||
self.reset()
|
||||
|
||||
def initConfigurationData(self):
|
||||
|
||||
self.state = state.initial
|
||||
self.state = State.INITIAL
|
||||
self.caches_array = []
|
||||
|
||||
sys.path = self.orig_syspath.copy()
|
||||
|
|
@ -1398,11 +1396,11 @@ class BBCooker:
|
|||
|
||||
msg = None
|
||||
interrupted = 0
|
||||
if halt or self.state == state.forceshutdown:
|
||||
if halt or self.state == State.FORCE_SHUTDOWN:
|
||||
rq.finish_runqueue(True)
|
||||
msg = "Forced shutdown"
|
||||
interrupted = 2
|
||||
elif self.state == state.shutdown:
|
||||
elif self.state == State.SHUTDOWN:
|
||||
rq.finish_runqueue(False)
|
||||
msg = "Stopped build"
|
||||
interrupted = 1
|
||||
|
|
@ -1472,12 +1470,12 @@ class BBCooker:
|
|||
def buildTargetsIdle(server, rq, halt):
|
||||
msg = None
|
||||
interrupted = 0
|
||||
if halt or self.state == state.forceshutdown:
|
||||
if halt or self.state == State.FORCE_SHUTDOWN:
|
||||
bb.event._should_exit.set()
|
||||
rq.finish_runqueue(True)
|
||||
msg = "Forced shutdown"
|
||||
interrupted = 2
|
||||
elif self.state == state.shutdown:
|
||||
elif self.state == State.SHUTDOWN:
|
||||
rq.finish_runqueue(False)
|
||||
msg = "Stopped build"
|
||||
interrupted = 1
|
||||
|
|
@ -1572,7 +1570,7 @@ class BBCooker:
|
|||
|
||||
|
||||
def updateCacheSync(self):
|
||||
if self.state == state.running:
|
||||
if self.state == State.RUNNING:
|
||||
return
|
||||
|
||||
if not self.baseconfig_valid:
|
||||
|
|
@ -1582,19 +1580,19 @@ class BBCooker:
|
|||
|
||||
# This is called for all async commands when self.state != running
|
||||
def updateCache(self):
|
||||
if self.state == state.running:
|
||||
if self.state == State.RUNNING:
|
||||
return
|
||||
|
||||
if self.state in (state.shutdown, state.forceshutdown, state.error):
|
||||
if self.state in (State.SHUTDOWN, State.FORCE_SHUTDOWN, State.ERROR):
|
||||
if hasattr(self.parser, 'shutdown'):
|
||||
self.parser.shutdown(clean=False)
|
||||
self.parser.final_cleanup()
|
||||
raise bb.BBHandledException()
|
||||
|
||||
if self.state != state.parsing:
|
||||
if self.state != State.PARSING:
|
||||
self.updateCacheSync()
|
||||
|
||||
if self.state != state.parsing and not self.parsecache_valid:
|
||||
if self.state != State.PARSING and not self.parsecache_valid:
|
||||
bb.server.process.serverlog("Parsing started")
|
||||
self.parsewatched = {}
|
||||
|
||||
|
|
@ -1628,7 +1626,7 @@ class BBCooker:
|
|||
self.parser = CookerParser(self, mcfilelist, total_masked)
|
||||
self._parsecache_set(True)
|
||||
|
||||
self.state = state.parsing
|
||||
self.state = State.PARSING
|
||||
|
||||
if not self.parser.parse_next():
|
||||
collectlog.debug("parsing complete")
|
||||
|
|
@ -1638,7 +1636,7 @@ class BBCooker:
|
|||
self.handlePrefProviders()
|
||||
for mc in self.multiconfigs:
|
||||
self.recipecaches[mc].bbfile_priority = self.collections[mc].collection_priorities(self.recipecaches[mc].pkg_fn, self.parser.mcfilelist[mc], self.data)
|
||||
self.state = state.running
|
||||
self.state = State.RUNNING
|
||||
|
||||
# Send an event listing all stamps reachable after parsing
|
||||
# which the metadata may use to clean up stale data
|
||||
|
|
@ -1711,10 +1709,10 @@ class BBCooker:
|
|||
|
||||
def shutdown(self, force=False):
|
||||
if force:
|
||||
self.state = state.forceshutdown
|
||||
self.state = State.FORCE_SHUTDOWN
|
||||
bb.event._should_exit.set()
|
||||
else:
|
||||
self.state = state.shutdown
|
||||
self.state = State.SHUTDOWN
|
||||
|
||||
if self.parser:
|
||||
self.parser.shutdown(clean=False)
|
||||
|
|
@ -1724,7 +1722,7 @@ class BBCooker:
|
|||
if hasattr(self.parser, 'shutdown'):
|
||||
self.parser.shutdown(clean=False)
|
||||
self.parser.final_cleanup()
|
||||
self.state = state.initial
|
||||
self.state = State.INITIAL
|
||||
bb.event._should_exit.clear()
|
||||
|
||||
def reset(self):
|
||||
|
|
|
|||
|
|
@ -103,8 +103,8 @@ class BitBakeXMLRPCServerCommands:
|
|||
s, t = bb.server.xmlrpcclient._create_server(host, port)
|
||||
|
||||
# we don't allow connections if the cooker is running
|
||||
if (self.server.cooker.state in [bb.cooker.state.parsing, bb.cooker.state.running]):
|
||||
return None, "Cooker is busy: %s" % bb.cooker.state.get_name(self.server.cooker.state)
|
||||
if self.server.cooker.state in [bb.cooker.State.PARSING, bb.cooker.State.RUNNING]:
|
||||
return None, f"Cooker is busy: {self.server.cooker.state.name}"
|
||||
|
||||
self.event_handle = bb.event.register_UIHhandler(s, True)
|
||||
return self.event_handle, 'OK'
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user