From 1ede604cfd9416c42eaa6d910248df770cba5405 Mon Sep 17 00:00:00 2001 From: Chris Hennes Date: Wed, 6 Apr 2022 14:27:25 -0500 Subject: [PATCH] Addon Manager: Allow overriding install with missing deps --- src/Mod/AddonManager/Addon.py | 1 + src/Mod/AddonManager/AddonManager.py | 36 +++++++++++++++++++++------- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/Mod/AddonManager/Addon.py b/src/Mod/AddonManager/Addon.py index b5ba4d3998..e20f7651d6 100644 --- a/src/Mod/AddonManager/Addon.py +++ b/src/Mod/AddonManager/Addon.py @@ -301,6 +301,7 @@ class Addon: for dep in metadata.Depend: # Simple version for now: eventually support all of the version params... self.requires.add(dep["package"]) + FreeCAD.Console.PrintLog(f"Package {self.name}: Adding dependency on {dep['package']}\n") for dep in metadata.Conflict: self.blocks.add(dep["package"]) diff --git a/src/Mod/AddonManager/AddonManager.py b/src/Mod/AddonManager/AddonManager.py index 082eaf9354..368e0b420f 100644 --- a/src/Mod/AddonManager/AddonManager.py +++ b/src/Mod/AddonManager/AddonManager.py @@ -1005,6 +1005,9 @@ class CommandAddonManager: if dep not in self.allowed_packages: bad_packages.append(dep) + for dep in bad_packages: + python_required.remove(dep) + if bad_packages: message = "

" + translate( "AddonsInstaller", @@ -1018,8 +1021,12 @@ class CommandAddonManager: "

  • (" + translate("AddonsInstaller", "Too many to list") + ")
  • " ) message += "" - QtWidgets.QMessageBox.critical( - self.dialog, translate("AddonsInstaller", "Missing Requirement"), message + message += "To ignore this error and install anyway, press OK." + r = QtWidgets.QMessageBox.critical( + self.dialog, + translate("AddonsInstaller", "Missing Requirement"), + message, + QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel, ) FreeCAD.Console.PrintMessage( translate( @@ -1030,11 +1037,16 @@ class CommandAddonManager: ) for package in self.allowed_packages: FreeCAD.Console.PrintMessage(f" * {package}\n") - return True + + if r == QtWidgets.QMessageBox.Ok: + # Force the installation to proceed + return False + else: + return True else: return False - def report_missing_workbenches(self, addon_name:str, wbs) -> None: + def report_missing_workbenches(self, addon_name:str, wbs) -> bool: if len(wbs) == 1: name = wbs[0] message = translate( @@ -1049,12 +1061,17 @@ class CommandAddonManager: for wb in wbs: message += "
  • " + wb + "
  • " message += "" - QtWidgets.QMessageBox.critical( + message += translate("AddonsInstaller", "Press OK to install anyway.") + r = QtWidgets.QMessageBox.critical( self.dialog, translate("AddonsInstaller", "Missing Requirement"), message, - QtWidgets.QMessageBox.Cancel, + QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel, ) + if r == QtWidgets.QMessageBox.Ok: + return True + else: + return False def display_dep_resolution_dialog(self, missing, repo: Addon) -> None: self.dependency_dialog = FreeCADGui.PySideUic.loadUi( @@ -1102,9 +1119,10 @@ class CommandAddonManager: missing.python_optional = good_packages if missing.wbs: - # Unrecoverable failure, needs a new version of FreeCAD installation - self.report_missing_workbenches(repo.display_name, missing.wbs) - elif ( + r = self.report_missing_workbenches(repo.display_name, missing.wbs) + if r == False: + return + if ( missing.external_addons or missing.python_required or missing.python_optional