From 67f051007e09bde79443f2b67997ffc33916fe54 Mon Sep 17 00:00:00 2001 From: Chris Hennes Date: Wed, 27 Oct 2021 22:09:03 -0500 Subject: [PATCH] Addon Manager: Add support for salsa.debian.org The pyrate has moved to salsa.debian.org, so this commit adds the beginnings of support for those repos.The Markdown library is required for nice rendering of repos that don't have a package.xml metadata file. --- .../AddonManager/addonmanager_utilities.py | 9 ++--- src/Mod/AddonManager/addonmanager_workers.py | 38 ++++++++++--------- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/src/Mod/AddonManager/addonmanager_utilities.py b/src/Mod/AddonManager/addonmanager_utilities.py index 1a7addec9f..c74b3cfe06 100644 --- a/src/Mod/AddonManager/addonmanager_utilities.py +++ b/src/Mod/AddonManager/addonmanager_utilities.py @@ -188,8 +188,9 @@ def get_zip_url(repo): parsedUrl = urlparse(repo.url) if parsedUrl.netloc == "github.com": return f"{repo.url}/archive/{repo.branch}.zip" - elif parsedUrl.netloc == "framagit.org" or parsedUrl.netloc == "gitlab.com": + elif parsedUrl.netloc == "framagit.org" or parsedUrl.netloc == "gitlab.com" or parsedUrl.netloc == "salsa.debian.org": # https://framagit.org/freecad-france/mooc-workbench/-/archive/master/mooc-workbench-master.zip + # https://salsa.debian.org/mess42/pyrate/-/archive/master/pyrate-master.zip reponame = baseurl.strip("/").split("/")[-1] return f"{repo.url}/-/archive/{repo.branch}/{repo.name}-{repo.branch}.zip" else: @@ -202,7 +203,7 @@ def construct_git_url(repo, filename): parsed_url = urlparse(repo.url) if parsed_url.netloc == "github.com" or parsed_url.netloc == "framagit.com": return f"{repo.url}/raw/{repo.branch}/{filename}" - elif parsed_url.netloc == "gitlab.com": + elif parsed_url.netloc == "gitlab.com" or parsed_url.netloc == "salsa.debian.org": return f"{repo.url}/-/raw/{repo.branch}/{filename}" else: FreeCAD.Console.PrintLog("Debug: addonmanager_utilities.construct_git_url: Unknown git host:", parsed_url.netloc) @@ -226,7 +227,7 @@ def get_desc_regex(repo): parsedUrl = urlparse(repo.url) if parsedUrl.netloc == "github.com": return r'' FreeCAD.Console.PrintWarning("Debug: addonmanager_utilities.get_desc_regex: Unknown git host:", repo.url) return None @@ -239,7 +240,6 @@ def get_readme_html_url(repo): if parsedUrl.netloc == "github.com": return f"{repo.url}/blob/{repo.branch}/README.md" else: - FreeCAD.Console.PrintWarning("Debug: addonmanager_utilities.get_readme_html_url: Unknown git host:", repo.url) return None @@ -251,7 +251,6 @@ def get_readme_regex(repo): if parsedUrl.netloc == "github.com": return "(.*?)" else: - FreeCAD.Console.PrintWarning("Debug: addonmanager_utilities.get_readme_regex: Unknown git host:", repo.url) return None diff --git a/src/Mod/AddonManager/addonmanager_workers.py b/src/Mod/AddonManager/addonmanager_workers.py index 8716375f91..eb72968390 100644 --- a/src/Mod/AddonManager/addonmanager_workers.py +++ b/src/Mod/AddonManager/addonmanager_workers.py @@ -177,23 +177,6 @@ class UpdateWorker(QtCore.QThread): r"url\s*=\s*(?Phttps?://.*)\s*" r"(branch\s*=\s*(?P.*)\s*)?"), p) - # querying official addons - for name, path, url, _, branch in p: - if self.current_thread.isInterruptionRequested(): - return - if name in package_names: - # We've already got this info since it's a package - continue - if branch is None or len(branch) == 0: - branch = "master" - url = url.split(".git")[0] - addondir = moddir + os.sep + name - if os.path.exists(addondir) and os.listdir(addondir): - # make sure the folder exists and it contains files! - state = AddonManagerRepo.UpdateStatus.UNCHECKED - else: - state = AddonManagerRepo.UpdateStatus.NOT_INSTALLED - self.addon_repo.emit(AddonManagerRepo(name, url, state, branch)) # querying custom addons addon_list = (FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Addons") .GetString("CustomRepositories", "").split("\n")) @@ -208,6 +191,8 @@ class UpdateWorker(QtCore.QThread): if self.current_thread.isInterruptionRequested(): return if addon and addon["url"]: + if addon["url"][-1] == "/": + addon["url"] = addon["url"][0:-1] # Strip trailing slash name = addon["url"].split("/")[-1] if name.lower().endswith(".git"): name = name[:-4] @@ -220,6 +205,25 @@ class UpdateWorker(QtCore.QThread): else: state = AddonManagerRepo.UpdateStatus.NOT_INSTALLED self.addon_repo.emit(AddonManagerRepo(name, addon["url"], state, addon["branch"])) + + # querying official addons + for name, path, url, _, branch in p: + if self.current_thread.isInterruptionRequested(): + return + if name in package_names: + # We've already got this info since it's a package or a custom repo + continue + if branch is None or len(branch) == 0: + branch = "master" + url = url.split(".git")[0] + addondir = moddir + os.sep + name + if os.path.exists(addondir) and os.listdir(addondir): + # make sure the folder exists and it contains files! + state = AddonManagerRepo.UpdateStatus.UNCHECKED + else: + state = AddonManagerRepo.UpdateStatus.NOT_INSTALLED + self.addon_repo.emit(AddonManagerRepo(name, url, state, branch)) + self.status_message.emit(translate("AddonsInstaller", "Workbenches list was updated.")) if not self.current_thread.isInterruptionRequested():