diff options
Diffstat (limited to 'bitbake/lib/bb/ui/buildinfohelper.py')
-rw-r--r-- | bitbake/lib/bb/ui/buildinfohelper.py | 79 |
1 files changed, 47 insertions, 32 deletions
diff --git a/bitbake/lib/bb/ui/buildinfohelper.py b/bitbake/lib/bb/ui/buildinfohelper.py index f64423b733..e1ef16d509 100644 --- a/bitbake/lib/bb/ui/buildinfohelper.py +++ b/bitbake/lib/bb/ui/buildinfohelper.py | |||
@@ -480,6 +480,8 @@ class ORMWrapper(object): | |||
480 | line_number = vh['line'], | 480 | line_number = vh['line'], |
481 | operation = vh['op']) | 481 | operation = vh['op']) |
482 | 482 | ||
483 | class MockEvent: pass # sometimes we mock an event, declare it here | ||
484 | |||
483 | class BuildInfoHelper(object): | 485 | class BuildInfoHelper(object): |
484 | """ This class gathers the build information from the server and sends it | 486 | """ This class gathers the build information from the server and sends it |
485 | towards the ORM wrapper for storing in the database | 487 | towards the ORM wrapper for storing in the database |
@@ -487,6 +489,7 @@ class BuildInfoHelper(object): | |||
487 | Keeps in memory all data that needs matching before writing it to the database | 489 | Keeps in memory all data that needs matching before writing it to the database |
488 | """ | 490 | """ |
489 | 491 | ||
492 | |||
490 | def __init__(self, server, has_build_history = False): | 493 | def __init__(self, server, has_build_history = False): |
491 | self._configure_django() | 494 | self._configure_django() |
492 | self.internal_state = {} | 495 | self.internal_state = {} |
@@ -496,6 +499,8 @@ class BuildInfoHelper(object): | |||
496 | self.orm_wrapper = ORMWrapper() | 499 | self.orm_wrapper = ORMWrapper() |
497 | self.has_build_history = has_build_history | 500 | self.has_build_history = has_build_history |
498 | self.tmp_dir = self.server.runCommand(["getVariable", "TMPDIR"])[0] | 501 | self.tmp_dir = self.server.runCommand(["getVariable", "TMPDIR"])[0] |
502 | self.brbe = self.server.runCommand(["getVariable", "TOASTER_BRBE"])[0] | ||
503 | |||
499 | 504 | ||
500 | def _configure_django(self): | 505 | def _configure_django(self): |
501 | # Add toaster to sys path for importing modules | 506 | # Add toaster to sys path for importing modules |
@@ -607,9 +612,7 @@ class BuildInfoHelper(object): | |||
607 | assert '_pkgs' in vars(event) | 612 | assert '_pkgs' in vars(event) |
608 | build_information = self._get_build_information() | 613 | build_information = self._get_build_information() |
609 | 614 | ||
610 | brbe = self.server.runCommand(["getVariable", "TOASTER_BRBE"])[0] | 615 | build_obj = self.orm_wrapper.create_build_object(build_information, self.brbe) |
611 | |||
612 | build_obj = self.orm_wrapper.create_build_object(build_information, brbe) | ||
613 | 616 | ||
614 | self.internal_state['build'] = build_obj | 617 | self.internal_state['build'] = build_obj |
615 | 618 | ||
@@ -629,7 +632,8 @@ class BuildInfoHelper(object): | |||
629 | # Save build configuration | 632 | # Save build configuration |
630 | self.orm_wrapper.save_build_variables(build_obj, self.server.runCommand(["getAllKeysWithFlags", ["doc", "func"]])[0]) | 633 | self.orm_wrapper.save_build_variables(build_obj, self.server.runCommand(["getAllKeysWithFlags", ["doc", "func"]])[0]) |
631 | 634 | ||
632 | return brbe | 635 | return self.brbe |
636 | |||
633 | 637 | ||
634 | 638 | ||
635 | def update_target_image_file(self, event): | 639 | def update_target_image_file(self, event): |
@@ -773,7 +777,6 @@ class BuildInfoHelper(object): | |||
773 | identifier = fn + taskname + "_setscene" | 777 | identifier = fn + taskname + "_setscene" |
774 | recipe_information = self._get_recipe_information_from_taskfile(fn) | 778 | recipe_information = self._get_recipe_information_from_taskfile(fn) |
775 | recipe = self.orm_wrapper.get_update_recipe_object(recipe_information) | 779 | recipe = self.orm_wrapper.get_update_recipe_object(recipe_information) |
776 | class MockEvent: pass | ||
777 | mevent = MockEvent() | 780 | mevent = MockEvent() |
778 | mevent.taskname = taskname | 781 | mevent.taskname = taskname |
779 | mevent.taskhash = taskhash | 782 | mevent.taskhash = taskhash |
@@ -792,7 +795,6 @@ class BuildInfoHelper(object): | |||
792 | identifier = fn + taskname + "_setscene" | 795 | identifier = fn + taskname + "_setscene" |
793 | recipe_information = self._get_recipe_information_from_taskfile(fn) | 796 | recipe_information = self._get_recipe_information_from_taskfile(fn) |
794 | recipe = self.orm_wrapper.get_update_recipe_object(recipe_information) | 797 | recipe = self.orm_wrapper.get_update_recipe_object(recipe_information) |
795 | class MockEvent: pass | ||
796 | mevent = MockEvent() | 798 | mevent = MockEvent() |
797 | mevent.taskname = taskname | 799 | mevent.taskname = taskname |
798 | mevent.taskhash = taskhash | 800 | mevent.taskhash = taskhash |
@@ -929,7 +931,8 @@ class BuildInfoHelper(object): | |||
929 | self.internal_state['recipes'], | 931 | self.internal_state['recipes'], |
930 | ) | 932 | ) |
931 | 933 | ||
932 | def store_build_done(self, br_id, be_id): | 934 | def _store_build_done(self): |
935 | br_id, be_id = self.brbe.split(":") | ||
933 | from bldcontrol.models import BuildEnvironment, BuildRequest | 936 | from bldcontrol.models import BuildEnvironment, BuildRequest |
934 | be = BuildEnvironment.objects.get(pk = be_id) | 937 | be = BuildEnvironment.objects.get(pk = be_id) |
935 | be.lock = BuildEnvironment.LOCK_LOCK | 938 | be.lock = BuildEnvironment.LOCK_LOCK |
@@ -939,49 +942,61 @@ class BuildInfoHelper(object): | |||
939 | br.build = self.internal_state['build'] | 942 | br.build = self.internal_state['build'] |
940 | br.save() | 943 | br.save() |
941 | 944 | ||
942 | def _store_log_information(self, level, text): | ||
943 | log_information = {} | ||
944 | log_information['build'] = self.internal_state['build'] | ||
945 | log_information['level'] = level | ||
946 | log_information['message'] = text | ||
947 | self.orm_wrapper.create_logmessage(log_information) | ||
948 | |||
949 | def store_log_info(self, text): | ||
950 | self._store_log_information(LogMessage.INFO, text) | ||
951 | |||
952 | def store_log_warn(self, text): | ||
953 | self._store_log_information(LogMessage.WARNING, text) | ||
954 | 945 | ||
955 | def store_log_error(self, text): | 946 | def store_log_error(self, text): |
956 | self._store_log_information(LogMessage.ERROR, text) | 947 | mockevent = MockEvent() |
948 | mockevent.levelno = format.ERROR | ||
949 | mockevent.msg = text | ||
950 | self.store_log_event(mockevent) | ||
957 | 951 | ||
958 | def store_log_event(self, event): | 952 | def store_log_event(self, event): |
953 | if event.levelno < format.WARNING: | ||
954 | return | ||
955 | |||
956 | if 'args' in vars(event): | ||
957 | event.msg = event.msg % event.args | ||
958 | |||
959 | if not 'build' in self.internal_state: | ||
960 | if self.brbe is None: | ||
961 | if not 'backlog' in self.internal_state: | ||
962 | self.internal_state['backlog'] = [] | ||
963 | self.internal_state['backlog'].append(event) | ||
964 | else: # we're under Toaster control, post the errors to the build request | ||
965 | from bldcontrol.models import BuildRequest, BRError | ||
966 | br, be = brbe.split(":") | ||
967 | buildrequest = BuildRequest.objects.get(pk = br) | ||
968 | brerror = BRError.objects.create(req = buildrequest, errtype="build", errmsg = event.msg) | ||
969 | |||
970 | return | ||
971 | |||
959 | if 'build' in self.internal_state and 'backlog' in self.internal_state: | 972 | if 'build' in self.internal_state and 'backlog' in self.internal_state: |
960 | if len(self.internal_state['backlog']): | 973 | if len(self.internal_state['backlog']): |
961 | tempevent = self.internal_state['backlog'].pop() | 974 | tempevent = self.internal_state['backlog'].pop() |
962 | print "Saving stored event ", tempevent | 975 | print " Saving stored event ", tempevent |
963 | self.store_log_event(tempevent) | 976 | self.store_log_event(tempevent) |
964 | else: | 977 | else: |
965 | del self.internal_state['backlog'] | 978 | del self.internal_state['backlog'] |
966 | 979 | ||
967 | if event.levelno < format.WARNING: | ||
968 | return | ||
969 | |||
970 | if not 'build' in self.internal_state: | ||
971 | print "Save event for later" | ||
972 | if not 'backlog' in self.internal_state: | ||
973 | self.internal_state['backlog'] = [] | ||
974 | self.internal_state['backlog'].append(event) | ||
975 | |||
976 | return | ||
977 | log_information = {} | 980 | log_information = {} |
978 | log_information['build'] = self.internal_state['build'] | 981 | log_information['build'] = self.internal_state['build'] |
979 | if event.levelno >= format.ERROR: | 982 | if event.levelno >= format.ERROR: |
980 | log_information['level'] = LogMessage.ERROR | 983 | log_information['level'] = event.levelno |
981 | elif event.levelno == format.WARNING: | 984 | elif event.levelno == format.WARNING: |
982 | log_information['level'] = LogMessage.WARNING | 985 | log_information['level'] = LogMessage.WARNING |
986 | elif event.levelno == format.INFO: | ||
987 | log_information['level'] = LogMessage.INFO | ||
988 | else: | ||
989 | log_information['level'] = event.levelno | ||
990 | |||
983 | log_information['message'] = event.msg | 991 | log_information['message'] = event.msg |
984 | log_information['pathname'] = event.pathname | 992 | log_information['pathname'] = event.pathname |
985 | log_information['lineno'] = event.lineno | 993 | log_information['lineno'] = event.lineno |
986 | self.orm_wrapper.create_logmessage(log_information) | 994 | self.orm_wrapper.create_logmessage(log_information) |
987 | 995 | ||
996 | def close(self): | ||
997 | if self.brbe is not None: | ||
998 | buildinfohelper._store_build_done() | ||
999 | |||
1000 | if 'backlog' in self.internal_state: | ||
1001 | for event in self.internal_state['backlog']: | ||
1002 | print "NOTE: Unsaved log: ", event.msg | ||