diff options
| -rw-r--r-- | bitbake/lib/toaster/orm/models.py | 2 | ||||
| -rw-r--r-- | bitbake/lib/toaster/toastergui/api.py | 98 |
2 files changed, 62 insertions, 38 deletions
diff --git a/bitbake/lib/toaster/orm/models.py b/bitbake/lib/toaster/orm/models.py index 7aaebedc2d..3a7dff8ca6 100644 --- a/bitbake/lib/toaster/orm/models.py +++ b/bitbake/lib/toaster/orm/models.py | |||
| @@ -1658,7 +1658,7 @@ class CustomImageRecipe(Recipe): | |||
| 1658 | 1658 | ||
| 1659 | def get_base_recipe_file(self): | 1659 | def get_base_recipe_file(self): |
| 1660 | """Get the base recipe file path if it exists on the file system""" | 1660 | """Get the base recipe file path if it exists on the file system""" |
| 1661 | path_schema_one = "%s/%s" % (self.base_recipe.layer_version.dirpath, | 1661 | path_schema_one = "%s/%s" % (self.base_recipe.layer_version.local_path, |
| 1662 | self.base_recipe.file_path) | 1662 | self.base_recipe.file_path) |
| 1663 | 1663 | ||
| 1664 | path_schema_two = self.base_recipe.file_path | 1664 | path_schema_two = self.base_recipe.file_path |
diff --git a/bitbake/lib/toaster/toastergui/api.py b/bitbake/lib/toaster/toastergui/api.py index 88d6aa7f68..cb8f0f3127 100644 --- a/bitbake/lib/toaster/toastergui/api.py +++ b/bitbake/lib/toaster/toastergui/api.py | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | 18 | ||
| 19 | # Please run flake8 on this file before sending patches | 19 | # Please run flake8 on this file before sending patches |
| 20 | 20 | ||
| 21 | import os | ||
| 21 | import re | 22 | import re |
| 22 | import logging | 23 | import logging |
| 23 | import json | 24 | import json |
| @@ -28,7 +29,7 @@ from orm.models import LayerVersionDependency, LayerSource, ProjectLayer | |||
| 28 | from orm.models import Recipe, CustomImageRecipe, CustomImagePackage | 29 | from orm.models import Recipe, CustomImageRecipe, CustomImagePackage |
| 29 | from orm.models import Layer, Target, Package, Package_Dependency | 30 | from orm.models import Layer, Target, Package, Package_Dependency |
| 30 | from orm.models import ProjectVariable | 31 | from orm.models import ProjectVariable |
| 31 | from bldcontrol.models import BuildRequest | 32 | from bldcontrol.models import BuildRequest, BuildEnvironment |
| 32 | from bldcontrol import bbcontroller | 33 | from bldcontrol import bbcontroller |
| 33 | 34 | ||
| 34 | from django.http import HttpResponse, JsonResponse | 35 | from django.http import HttpResponse, JsonResponse |
| @@ -509,6 +510,27 @@ class XhrCustomRecipe(View): | |||
| 509 | (tpackage.package.name, e)) | 510 | (tpackage.package.name, e)) |
| 510 | pass | 511 | pass |
| 511 | 512 | ||
| 513 | # pre-create layer directory structure, so that other builds | ||
| 514 | # are not blocked by this new recipe dependecy | ||
| 515 | # NOTE: this is parallel code to 'localhostbecontroller.py' | ||
| 516 | be = BuildEnvironment.objects.all()[0] | ||
| 517 | layerpath = os.path.join(be.builddir, | ||
| 518 | CustomImageRecipe.LAYER_NAME) | ||
| 519 | for name in ("conf", "recipes"): | ||
| 520 | path = os.path.join(layerpath, name) | ||
| 521 | if not os.path.isdir(path): | ||
| 522 | os.makedirs(path) | ||
| 523 | # pre-create layer.conf | ||
| 524 | config = os.path.join(layerpath, "conf", "layer.conf") | ||
| 525 | if not os.path.isfile(config): | ||
| 526 | with open(config, "w") as conf: | ||
| 527 | conf.write('BBPATH .= ":${LAYERDIR}"\nBBFILES += "${LAYERDIR}/recipes/*.bb"\n') | ||
| 528 | # pre-create new image's recipe file | ||
| 529 | recipe_path = os.path.join(layerpath, "recipes", "%s.bb" % | ||
| 530 | recipe.name) | ||
| 531 | with open(recipe_path, "w") as recipef: | ||
| 532 | recipef.write(recipe.generate_recipe_file_contents()) | ||
| 533 | |||
| 512 | return JsonResponse( | 534 | return JsonResponse( |
| 513 | {"error": "ok", | 535 | {"error": "ok", |
| 514 | "packages": recipe.get_all_packages().count(), | 536 | "packages": recipe.get_all_packages().count(), |
| @@ -752,7 +774,6 @@ class XhrCustomRecipePackages(View): | |||
| 752 | return error_response("Package %s not found in excludes" | 774 | return error_response("Package %s not found in excludes" |
| 753 | " but was in included list" % | 775 | " but was in included list" % |
| 754 | package.name) | 776 | package.name) |
| 755 | |||
| 756 | else: | 777 | else: |
| 757 | recipe.appends_set.add(package) | 778 | recipe.appends_set.add(package) |
| 758 | # Make sure that package is not in the excludes set | 779 | # Make sure that package is not in the excludes set |
| @@ -760,26 +781,27 @@ class XhrCustomRecipePackages(View): | |||
| 760 | recipe.excludes_set.remove(package) | 781 | recipe.excludes_set.remove(package) |
| 761 | except: | 782 | except: |
| 762 | pass | 783 | pass |
| 763 | # Add the dependencies we think will be added to the recipe | 784 | |
| 764 | # as a result of appending this package. | 785 | # Add the dependencies we think will be added to the recipe |
| 765 | # TODO this should recurse down the entire deps tree | 786 | # as a result of appending this package. |
| 766 | for dep in package.package_dependencies_source.all_depends(): | 787 | # TODO this should recurse down the entire deps tree |
| 788 | for dep in package.package_dependencies_source.all_depends(): | ||
| 789 | try: | ||
| 790 | cust_package = CustomImagePackage.objects.get( | ||
| 791 | name=dep.depends_on.name) | ||
| 792 | |||
| 793 | recipe.includes_set.add(cust_package) | ||
| 767 | try: | 794 | try: |
| 768 | cust_package = CustomImagePackage.objects.get( | 795 | # When adding the pre-requisite package, make |
| 769 | name=dep.depends_on.name) | 796 | # sure it's not in the excluded list from a |
| 770 | 797 | # prior removal. | |
| 771 | recipe.includes_set.add(cust_package) | 798 | recipe.excludes_set.remove(cust_package) |
| 772 | try: | 799 | except package.DoesNotExist: |
| 773 | # When adding the pre-requisite package, make | 800 | # Don't care if the package had never been excluded |
| 774 | # sure it's not in the excluded list from a | 801 | pass |
| 775 | # prior removal. | 802 | except: |
| 776 | recipe.excludes_set.remove(cust_package) | 803 | logger.warning("Could not add package's suggested" |
| 777 | except package.DoesNotExist: | 804 | "dependencies to the list") |
| 778 | # Don't care if the package had never been excluded | ||
| 779 | pass | ||
| 780 | except: | ||
| 781 | logger.warning("Could not add package's suggested" | ||
| 782 | "dependencies to the list") | ||
| 783 | return JsonResponse({"error": "ok"}) | 805 | return JsonResponse({"error": "ok"}) |
| 784 | 806 | ||
| 785 | def delete(self, request, *args, **kwargs): | 807 | def delete(self, request, *args, **kwargs): |
| @@ -797,22 +819,24 @@ class XhrCustomRecipePackages(View): | |||
| 797 | recipe.excludes_set.add(package) | 819 | recipe.excludes_set.add(package) |
| 798 | else: | 820 | else: |
| 799 | recipe.appends_set.remove(package) | 821 | recipe.appends_set.remove(package) |
| 800 | all_current_packages = recipe.get_all_packages() | 822 | |
| 801 | 823 | # remove dependencies as well | |
| 802 | reverse_deps_dictlist = self._get_all_dependents( | 824 | all_current_packages = recipe.get_all_packages() |
| 803 | package.pk, | 825 | |
| 804 | all_current_packages) | 826 | reverse_deps_dictlist = self._get_all_dependents( |
| 805 | 827 | package.pk, | |
| 806 | ids = [entry['pk'] for entry in reverse_deps_dictlist] | 828 | all_current_packages) |
| 807 | reverse_deps = CustomImagePackage.objects.filter(id__in=ids) | 829 | |
| 808 | for r in reverse_deps: | 830 | ids = [entry['pk'] for entry in reverse_deps_dictlist] |
| 809 | try: | 831 | reverse_deps = CustomImagePackage.objects.filter(id__in=ids) |
| 810 | if r.id in included_packages: | 832 | for r in reverse_deps: |
| 811 | recipe.excludes_set.add(r) | 833 | try: |
| 812 | else: | 834 | if r.id in included_packages: |
| 813 | recipe.appends_set.remove(r) | 835 | recipe.excludes_set.add(r) |
| 814 | except: | 836 | else: |
| 815 | pass | 837 | recipe.appends_set.remove(r) |
| 838 | except: | ||
| 839 | pass | ||
| 816 | 840 | ||
| 817 | return JsonResponse({"error": "ok"}) | 841 | return JsonResponse({"error": "ok"}) |
| 818 | except CustomImageRecipe.DoesNotExist: | 842 | except CustomImageRecipe.DoesNotExist: |
