From 026e9812648e9d43b3fcfce8aab1cd8e843246a2 Mon Sep 17 00:00:00 2001 From: Elliot Smith Date: Wed, 14 Oct 2015 15:43:44 +0100 Subject: bitbake: toaster: Check whether buildrequest exists before using it Builds initiated from the command line don't have a buildrequest associated with them. The build.buildrequest association is only added if a build is triggered from toaster. Some of the code for displaying the status of a build refers to build.buildrequest without checking whether it has been set, which causes an error to be thrown. Add a guard to check whether the buildrequest has been set. [YOCTO #8277] (Bitbake rev: af33409612139ab2347baf6b847b23faea19752d) Signed-off-by: Elliot Smith Signed-off-by: Michael Wood Signed-off-by: Richard Purdie --- bitbake/lib/toaster/orm/models.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'bitbake/lib') diff --git a/bitbake/lib/toaster/orm/models.py b/bitbake/lib/toaster/orm/models.py index 1cbf480acd..44a453a58c 100644 --- a/bitbake/lib/toaster/orm/models.py +++ b/bitbake/lib/toaster/orm/models.py @@ -344,6 +344,9 @@ class Build(models.Model): tgts = Target.objects.filter(build_id = self.id).order_by( 'target' ); return( tgts ); + def get_outcome_text(self): + return Build.BUILD_OUTCOME[int(self.outcome)][1] + @property def toaster_exceptions(self): return self.logmessage_set.filter(level=LogMessage.EXCEPTION) @@ -361,10 +364,23 @@ class Build(models.Model): return (self.completed_on - self.started_on).total_seconds() def get_current_status(self): + """ + get the status string from the build request if the build + has one, or the text for the build outcome if it doesn't + """ + from bldcontrol.models import BuildRequest - if self.outcome == Build.IN_PROGRESS and self.buildrequest.state != BuildRequest.REQ_INPROGRESS: + + build_request = None + if hasattr(self, 'buildrequest'): + build_request = self.buildrequest + + if (build_request + and build_request.state != BuildRequest.REQ_INPROGRESS + and self.outcome == Build.IN_PROGRESS): return self.buildrequest.get_state_display() - return self.get_outcome_display() + else: + return self.get_outcome_text() def __str__(self): return "%d %s %s" % (self.id, self.project, ",".join([t.target for t in self.target_set.all()])) -- cgit v1.2.3-54-g00ecf