diff --git a/app/blueprints/packages/packages.py b/app/blueprints/packages/packages.py index 67558950..a6ccef39 100644 --- a/app/blueprints/packages/packages.py +++ b/app/blueprints/packages/packages.py @@ -460,7 +460,15 @@ def move_to_state(package): @is_package_page def remove(package): if request.method == "GET": - return render_template("packages/remove.html", package=package, + # Find packages that will having missing hard deps after this action + broken_meta = MetaPackage.query.filter(MetaPackage.packages.contains(package), + ~MetaPackage.packages.any(and_(Package.id != package.id, Package.state == PackageState.APPROVED))) + hard_deps = Package.query.filter( + Package.state == PackageState.APPROVED, + Package.dependencies.any( + and_(Dependency.meta_package_id.in_([x.id for x in broken_meta]), Dependency.optional == False))) + + return render_template("packages/remove.html", package=package, hard_deps=hard_deps, tabs=get_package_tabs(current_user, package), current_tab="remove") reason = request.form.get("reason") or "?" diff --git a/app/templates/packages/remove.html b/app/templates/packages/remove.html index d9f44de4..228e0b6e 100644 --- a/app/templates/packages/remove.html +++ b/app/templates/packages/remove.html @@ -21,6 +21,20 @@ Remove {{ package.title }}

{% endif %} + {% if hard_deps %} + {% set hard_deps_links -%} + {%- for dep in hard_deps -%} + {%- if not loop.first and loop.length > 2 %}, {% endif -%} + {%- if loop.last and loop.length > 1 %} and {% endif -%} + {{ dep.title }} + {%- endfor -%} + {%- endset %} +

+ + {{ _("Removing this package will break the following mods: %(names)s", names=hard_deps_links) }} +

+ {% endif %} +