From 4fd3e9c923f0829c6b3fe9212bdfb7dcffc033ce Mon Sep 17 00:00:00 2001 From: Paul Eggleton Date: Mon, 2 Dec 2019 16:02:34 +1300 Subject: [PATCH] update: ensure removed recipe dependencies are removed from db If a recipe dependency (either static or dynamic) is removed from the recipe when it is parsed, then we should ensure it gets removed from the database as well. Signed-off-by: Paul Eggleton --- layerindex/recipeparse.py | 12 +++++++++++- layerindex/update_layer.py | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/layerindex/recipeparse.py b/layerindex/recipeparse.py index 72e17e5..162cf62 100644 --- a/layerindex/recipeparse.py +++ b/layerindex/recipeparse.py @@ -154,17 +154,23 @@ def detect_file_type(path, subdir_start): return (None, None, None) -def handle_recipe_depends(recipe, depends, packageconfig_opts): +def handle_recipe_depends(recipe, depends, packageconfig_opts, logger): from layerindex.models import StaticBuildDep, PackageConfig, DynamicBuildDep # Handle static build dependencies for this recipe + staticdeps = list(recipe.staticbuilddep_set.values_list('name', flat=True)) for dep in depends.split(): static_build_dependency, created = StaticBuildDep.objects.get_or_create(name=dep) if created: static_build_dependency.save() static_build_dependency.recipes.add(recipe) + if dep in staticdeps: + staticdeps.remove(dep) + for dep in staticdeps: + StaticBuildDep.objects.get(name=dep).recipes.remove(recipe) # Handle the PACKAGECONFIG variables for this recipe + dynamicdeps = list(recipe.dynamicbuilddep_set.values_list('name', flat=True)) PackageConfig.objects.filter(recipe=recipe).delete() for key, value in packageconfig_opts.items(): if key == "doc": @@ -194,6 +200,10 @@ def handle_recipe_depends(recipe, depends, packageconfig_opts): dynamic_build_dependency.save() dynamic_build_dependency.package_configs.add(package_config) dynamic_build_dependency.recipes.add(recipe) + if dep in dynamicdeps: + dynamicdeps.remove(dep) + for dep in dynamicdeps: + DynamicBuildDep.objects.get(name=dep).recipes.remove(recipe) def handle_recipe_provides(recipe): from layerindex.models import ExtendedProvide diff --git a/layerindex/update_layer.py b/layerindex/update_layer.py index aee5a97..1e5950c 100644 --- a/layerindex/update_layer.py +++ b/layerindex/update_layer.py @@ -148,7 +148,7 @@ def update_recipe_file(tinfoil, data, path, recipe, layerdir_start, repodir, sto for url in old_urls: recipe.source_set.filter(url=url).delete() - recipeparse.handle_recipe_depends(recipe, envdata.getVar('DEPENDS', True) or '', envdata.getVarFlags('PACKAGECONFIG')) + recipeparse.handle_recipe_depends(recipe, envdata.getVar('DEPENDS', True) or '', envdata.getVarFlags('PACKAGECONFIG'), logger) recipeparse.handle_recipe_provides(recipe)