From b80ce88bc08b9ba4d8c29cd2f31a876689a4e55f Mon Sep 17 00:00:00 2001
From: rubenwardy
Date: Sun, 3 Dec 2023 13:47:52 +0000
Subject: [PATCH] Add warning when removing a package will break mods
---
app/blueprints/packages/packages.py | 10 +++++++++-
app/templates/packages/remove.html | 14 ++++++++++++++
2 files changed, 23 insertions(+), 1 deletion(-)
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 %}
+