From 85390bfb6d933f92461bf026164ba4445c6157b5 Mon Sep 17 00:00:00 2001 From: Chris Hennes Date: Wed, 23 Feb 2022 17:05:08 -0600 Subject: [PATCH] Addon Manager: Minor fixes and error tweaks * Correct display of tags in list view * Add error checking for branch name and url match * Convert some messages to logs --- src/Mod/AddonManager/AddonManagerRepo.py | 41 +++++++++++++++++--- src/Mod/AddonManager/addonmanager_macro.py | 4 +- src/Mod/AddonManager/addonmanager_workers.py | 4 ++ src/Mod/AddonManager/package_list.py | 2 +- 4 files changed, 42 insertions(+), 9 deletions(-) diff --git a/src/Mod/AddonManager/AddonManagerRepo.py b/src/Mod/AddonManager/AddonManagerRepo.py index d171129ee4..548e30327b 100644 --- a/src/Mod/AddonManager/AddonManagerRepo.py +++ b/src/Mod/AddonManager/AddonManagerRepo.py @@ -243,6 +243,28 @@ class AddonManagerRepo: self.branch = "master" self.extract_tags(self.metadata) + def verify_url_and_branch(self, url: str, branch: str) -> None: + """Print diagnostic information for Addon Developers if their metadata is + inconsistent with the actual fetch location. Most often this is due to using + the wrong branch name.""" + + if self.url != url: + FreeCAD.Console.PrintWarning( + translate( + "AddonsInstaller", + "Addon Developer Warning: Repository URL set in package.xml file for addon {} ({}) does not match the URL it was fetched from ({})", + ).format(self.display_name, self.url, url) + + "\n" + ) + if self.branch != branch: + FreeCAD.Console.PrintWarning( + translate( + "AddonsInstaller", + "Addon Developer Warning: Repository branch set in package.xml file for addon {} ({}) does not match the branch it was fetched from ({})", + ).format(self.display_name, self.branch, branch) + + "\n" + ) + def extract_tags(self, metadata: FreeCAD.Metadata) -> None: for new_tag in metadata.Tag: self.tags.add(new_tag) @@ -367,21 +389,28 @@ class AddonManagerRepo: def is_disabled(self): # Check for existence of disabling stopfile: - stopfile = os.path.join(FreeCAD.getUserAppDataDir(), "Mod", self.name, "ADDON_DISABLED") + stopfile = os.path.join( + FreeCAD.getUserAppDataDir(), "Mod", self.name, "ADDON_DISABLED" + ) if os.path.exists(stopfile): return True else: return False def disable(self): - stopfile = os.path.join(FreeCAD.getUserAppDataDir(), "Mod", self.name, "ADDON_DISABLED") - with open(stopfile,"w") as f: - f.write("The existence of this file prevents FreeCAD from loading this Addon. To re-enable, delete the file.") + stopfile = os.path.join( + FreeCAD.getUserAppDataDir(), "Mod", self.name, "ADDON_DISABLED" + ) + with open(stopfile, "w") as f: + f.write( + "The existence of this file prevents FreeCAD from loading this Addon. To re-enable, delete the file." + ) def enable(self): - stopfile = os.path.join(FreeCAD.getUserAppDataDir(), "Mod", self.name, "ADDON_DISABLED") + stopfile = os.path.join( + FreeCAD.getUserAppDataDir(), "Mod", self.name, "ADDON_DISABLED" + ) try: os.unlink(stopfile) except Exception: pass - diff --git a/src/Mod/AddonManager/addonmanager_macro.py b/src/Mod/AddonManager/addonmanager_macro.py index 97f036925c..aca8cf4f3d 100644 --- a/src/Mod/AddonManager/addonmanager_macro.py +++ b/src/Mod/AddonManager/addonmanager_macro.py @@ -158,7 +158,7 @@ class Macro(object): # to apply some special handling to accepts numbers, and "__date__" if key == "__version__": if "__date__" in after_equals.lower(): - FreeCAD.Console.PrintMessage( + FreeCAD.Console.PrintLog( translate( "AddonsInstaller", "In macro {}, string literal not found for {} element. Guessing at intent and using string from date element.", @@ -168,7 +168,7 @@ class Macro(object): self.version = self.date break elif is_float(after_equals): - FreeCAD.Console.PrintMessage( + FreeCAD.Console.PrintLog( translate( "AddonsInstaller", "In macro {}, string literal not found for {} element. Guessing at intent and using string representation of contents.", diff --git a/src/Mod/AddonManager/addonmanager_workers.py b/src/Mod/AddonManager/addonmanager_workers.py index b5042d2cab..b1b25a8d2d 100644 --- a/src/Mod/AddonManager/addonmanager_workers.py +++ b/src/Mod/AddonManager/addonmanager_workers.py @@ -248,6 +248,8 @@ class UpdateWorker(QtCore.QThread): repo.load_metadata_file(md_file) repo.installed_version = repo.metadata.Version repo.updated_timestamp = os.path.getmtime(md_file) + repo.verify_url_and_branch(addon["url"], addon["branch"]) + self.addon_repo.emit(repo) # querying official addons @@ -288,6 +290,8 @@ class UpdateWorker(QtCore.QThread): repo.load_metadata_file(md_file) repo.installed_version = repo.metadata.Version repo.updated_timestamp = os.path.getmtime(md_file) + repo.verify_url_and_branch(url, branch) + if name in py2only: repo.python2 = True if name in mod_reject_list: diff --git a/src/Mod/AddonManager/package_list.py b/src/Mod/AddonManager/package_list.py index 30603e6514..a5ef08a1e0 100644 --- a/src/Mod/AddonManager/package_list.py +++ b/src/Mod/AddonManager/package_list.py @@ -343,11 +343,11 @@ class PackageListItemDelegate(QStyledItemDelegate): self.widget.ui.labelIcon.setPixmap(repo.icon.pixmap(QSize(16, 16))) self.widget.ui.labelIcon.setText("") + self.widget.ui.labelTags.setText("") if repo.metadata: self.widget.ui.labelDescription.setText(repo.metadata.Description) self.widget.ui.labelVersion.setText(f"v{repo.metadata.Version}") if self.displayStyle == ListDisplayStyle.EXPANDED: - self.widget.ui.labelTags.setText("") maintainers = repo.metadata.Maintainer maintainers_string = "" if len(maintainers) == 1: