diff options
Diffstat (limited to 'bitbake/lib/bb/ui/crumbs/builder.py')
-rwxr-xr-x | bitbake/lib/bb/ui/crumbs/builder.py | 52 |
1 files changed, 42 insertions, 10 deletions
diff --git a/bitbake/lib/bb/ui/crumbs/builder.py b/bitbake/lib/bb/ui/crumbs/builder.py index c2e7068428..cb2338e777 100755 --- a/bitbake/lib/bb/ui/crumbs/builder.py +++ b/bitbake/lib/bb/ui/crumbs/builder.py | |||
@@ -27,6 +27,7 @@ import os | |||
27 | import subprocess | 27 | import subprocess |
28 | import shlex | 28 | import shlex |
29 | import re | 29 | import re |
30 | import logging | ||
30 | from bb.ui.crumbs.template import TemplateMgr | 31 | from bb.ui.crumbs.template import TemplateMgr |
31 | from bb.ui.crumbs.imageconfigurationpage import ImageConfigurationPage | 32 | from bb.ui.crumbs.imageconfigurationpage import ImageConfigurationPage |
32 | from bb.ui.crumbs.recipeselectionpage import RecipeSelectionPage | 33 | from bb.ui.crumbs.recipeselectionpage import RecipeSelectionPage |
@@ -395,6 +396,11 @@ class Builder(gtk.Window): | |||
395 | 396 | ||
396 | self.template = None | 397 | self.template = None |
397 | 398 | ||
399 | # logger | ||
400 | self.logger = logging.getLogger("BitBake") | ||
401 | self.consolelog = None | ||
402 | self.current_logfile = None | ||
403 | |||
398 | # configuration and parameters | 404 | # configuration and parameters |
399 | self.configuration = Configuration() | 405 | self.configuration = Configuration() |
400 | self.parameters = Parameters() | 406 | self.parameters = Parameters() |
@@ -433,6 +439,7 @@ class Builder(gtk.Window): | |||
433 | self.handler.build.connect("build-aborted", self.handler_build_aborted_cb) | 439 | self.handler.build.connect("build-aborted", self.handler_build_aborted_cb) |
434 | self.handler.build.connect("task-started", self.handler_task_started_cb) | 440 | self.handler.build.connect("task-started", self.handler_task_started_cb) |
435 | self.handler.build.connect("log-error", self.handler_build_failure_cb) | 441 | self.handler.build.connect("log-error", self.handler_build_failure_cb) |
442 | self.handler.build.connect("log", self.handler_build_log_cb) | ||
436 | self.handler.build.connect("no-provider", self.handler_no_provider_cb) | 443 | self.handler.build.connect("no-provider", self.handler_no_provider_cb) |
437 | self.handler.connect("generating-data", self.handler_generating_data_cb) | 444 | self.handler.connect("generating-data", self.handler_generating_data_cb) |
438 | self.handler.connect("data-generated", self.handler_data_generated_cb) | 445 | self.handler.connect("data-generated", self.handler_data_generated_cb) |
@@ -501,25 +508,34 @@ class Builder(gtk.Window): | |||
501 | self.set_user_config() | 508 | self.set_user_config() |
502 | self.handler.generate_recipes() | 509 | self.handler.generate_recipes() |
503 | 510 | ||
504 | def generate_packages_async(self): | 511 | def generate_packages_async(self, log = False): |
505 | self.switch_page(self.PACKAGE_GENERATING) | 512 | self.switch_page(self.PACKAGE_GENERATING) |
513 | if log: | ||
514 | self.current_logfile = self.handler.get_logfile() | ||
515 | self.do_log(self.current_logfile) | ||
506 | # Build packages | 516 | # Build packages |
507 | _, all_recipes = self.recipe_model.get_selected_recipes() | 517 | _, all_recipes = self.recipe_model.get_selected_recipes() |
508 | self.set_user_config() | 518 | self.set_user_config() |
509 | self.handler.reset_build() | 519 | self.handler.reset_build() |
510 | self.handler.generate_packages(all_recipes, self.configuration.default_task) | 520 | self.handler.generate_packages(all_recipes, self.configuration.default_task) |
511 | 521 | ||
512 | def fast_generate_image_async(self): | 522 | def fast_generate_image_async(self, log = False): |
513 | self.switch_page(self.FAST_IMAGE_GENERATING) | 523 | self.switch_page(self.FAST_IMAGE_GENERATING) |
524 | if log: | ||
525 | self.current_logfile = self.handler.get_logfile() | ||
526 | self.do_log(self.current_logfile) | ||
514 | # Build packages | 527 | # Build packages |
515 | _, all_recipes = self.recipe_model.get_selected_recipes() | 528 | _, all_recipes = self.recipe_model.get_selected_recipes() |
516 | self.set_user_config() | 529 | self.set_user_config() |
517 | self.handler.reset_build() | 530 | self.handler.reset_build() |
518 | self.handler.generate_packages(all_recipes, self.configuration.default_task) | 531 | self.handler.generate_packages(all_recipes, self.configuration.default_task) |
519 | 532 | ||
520 | def generate_image_async(self): | 533 | def generate_image_async(self, cont = False): |
521 | self.switch_page(self.IMAGE_GENERATING) | 534 | self.switch_page(self.IMAGE_GENERATING) |
522 | self.handler.reset_build() | 535 | self.handler.reset_build() |
536 | if not cont: | ||
537 | self.current_logfile = self.handler.get_logfile() | ||
538 | self.do_log(self.current_logfile) | ||
523 | # Build image | 539 | # Build image |
524 | self.set_user_config() | 540 | self.set_user_config() |
525 | toolchain_packages = [] | 541 | toolchain_packages = [] |
@@ -627,14 +643,14 @@ class Builder(gtk.Window): | |||
627 | pass | 643 | pass |
628 | 644 | ||
629 | elif next_step == self.PACKAGE_SELECTION: | 645 | elif next_step == self.PACKAGE_SELECTION: |
630 | pass | 646 | self.package_details_page.show_page(self.current_logfile) |
631 | 647 | ||
632 | elif next_step == self.PACKAGE_GENERATING or next_step == self.FAST_IMAGE_GENERATING: | 648 | elif next_step == self.PACKAGE_GENERATING or next_step == self.FAST_IMAGE_GENERATING: |
633 | # both PACKAGE_GENEATING and FAST_IMAGE_GENERATING share the same page | 649 | # both PACKAGE_GENEATING and FAST_IMAGE_GENERATING share the same page |
634 | self.build_details_page.show_page(next_step) | 650 | self.build_details_page.show_page(next_step) |
635 | 651 | ||
636 | elif next_step == self.PACKAGE_GENERATED: | 652 | elif next_step == self.PACKAGE_GENERATED: |
637 | pass | 653 | self.package_details_page.show_page(self.current_logfile) |
638 | 654 | ||
639 | elif next_step == self.IMAGE_GENERATING: | 655 | elif next_step == self.IMAGE_GENERATING: |
640 | # after packages are generated, selected_packages need to | 656 | # after packages are generated, selected_packages need to |
@@ -736,7 +752,7 @@ class Builder(gtk.Window): | |||
736 | 752 | ||
737 | self.rcppkglist_populated() | 753 | self.rcppkglist_populated() |
738 | if self.current_step == self.FAST_IMAGE_GENERATING: | 754 | if self.current_step == self.FAST_IMAGE_GENERATING: |
739 | self.generate_image_async() | 755 | self.generate_image_async(True) |
740 | 756 | ||
741 | def show_error_dialog(self, msg): | 757 | def show_error_dialog(self, msg): |
742 | lbl = "<b>Error</b>\n" | 758 | lbl = "<b>Error</b>\n" |
@@ -963,6 +979,10 @@ class Builder(gtk.Window): | |||
963 | def handler_build_failure_cb(self, running_build): | 979 | def handler_build_failure_cb(self, running_build): |
964 | self.build_details_page.show_issues() | 980 | self.build_details_page.show_issues() |
965 | 981 | ||
982 | def handler_build_log_cb(self, running_build, func, obj): | ||
983 | if hasattr(self.logger, func): | ||
984 | getattr(self.logger, func)(obj) | ||
985 | |||
966 | def destroy_window_cb(self, widget, event): | 986 | def destroy_window_cb(self, widget, event): |
967 | if not self.sensitive: | 987 | if not self.sensitive: |
968 | return True | 988 | return True |
@@ -992,7 +1012,7 @@ class Builder(gtk.Window): | |||
992 | dialog.run() | 1012 | dialog.run() |
993 | dialog.destroy() | 1013 | dialog.destroy() |
994 | return | 1014 | return |
995 | self.generate_packages_async() | 1015 | self.generate_packages_async(True) |
996 | 1016 | ||
997 | def build_image(self): | 1017 | def build_image(self): |
998 | selected_packages = self.package_model.get_selected_packages() | 1018 | selected_packages = self.package_model.get_selected_packages() |
@@ -1005,7 +1025,7 @@ class Builder(gtk.Window): | |||
1005 | dialog.run() | 1025 | dialog.run() |
1006 | dialog.destroy() | 1026 | dialog.destroy() |
1007 | return | 1027 | return |
1008 | self.generate_image_async() | 1028 | self.generate_image_async(True) |
1009 | 1029 | ||
1010 | def just_bake(self): | 1030 | def just_bake(self): |
1011 | selected_image = self.recipe_model.get_selected_image() | 1031 | selected_image = self.recipe_model.get_selected_image() |
@@ -1022,7 +1042,7 @@ class Builder(gtk.Window): | |||
1022 | dialog.destroy() | 1042 | dialog.destroy() |
1023 | return | 1043 | return |
1024 | 1044 | ||
1025 | self.fast_generate_image_async() | 1045 | self.fast_generate_image_async(True) |
1026 | 1046 | ||
1027 | def show_binb_dialog(self, binb): | 1047 | def show_binb_dialog(self, binb): |
1028 | markup = "<b>Brought in by:</b>\n%s" % binb | 1048 | markup = "<b>Brought in by:</b>\n%s" % binb |
@@ -1241,7 +1261,7 @@ class Builder(gtk.Window): | |||
1241 | response = dialog.run() | 1261 | response = dialog.run() |
1242 | dialog.destroy() | 1262 | dialog.destroy() |
1243 | if response == gtk.RESPONSE_YES: | 1263 | if response == gtk.RESPONSE_YES: |
1244 | self.generate_packages_async() | 1264 | self.generate_packages_async(True) |
1245 | else: | 1265 | else: |
1246 | self.switch_page(self.PACKAGE_SELECTION) | 1266 | self.switch_page(self.PACKAGE_SELECTION) |
1247 | else: | 1267 | else: |
@@ -1289,3 +1309,15 @@ class Builder(gtk.Window): | |||
1289 | self.cancel_build_sync() | 1309 | self.cancel_build_sync() |
1290 | elif response == gtk.RESPONSE_YES: | 1310 | elif response == gtk.RESPONSE_YES: |
1291 | self.cancel_build_sync(True) | 1311 | self.cancel_build_sync(True) |
1312 | |||
1313 | def do_log(self, consolelogfile = None): | ||
1314 | if consolelogfile: | ||
1315 | if self.consolelog: | ||
1316 | self.logger.removeHandler(self.consolelog) | ||
1317 | self.consolelog = None | ||
1318 | self.consolelog = logging.FileHandler(consolelogfile) | ||
1319 | bb.msg.addDefaultlogFilter(self.consolelog) | ||
1320 | format = bb.msg.BBLogFormatter("%(levelname)s: %(message)s") | ||
1321 | self.consolelog.setFormatter(format) | ||
1322 | |||
1323 | self.logger.addHandler(self.consolelog) \ No newline at end of file | ||