From 1bfbcb5c95d09c166e2f53039ae3ed10b998b6e9 Mon Sep 17 00:00:00 2001 From: Chris Hennes Date: Mon, 10 Jan 2022 10:45:14 -0600 Subject: [PATCH] Addon Manager: Remove progress object from git pull --- .../AddonManager/addonmanager_utilities.py | 16 +++++++---- src/Mod/AddonManager/addonmanager_workers.py | 28 +++++++++++++------ 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/Mod/AddonManager/addonmanager_utilities.py b/src/Mod/AddonManager/addonmanager_utilities.py index 5a5c5cc492ed..48a87aa6814f 100644 --- a/src/Mod/AddonManager/addonmanager_utilities.py +++ b/src/Mod/AddonManager/addonmanager_utilities.py @@ -48,8 +48,8 @@ else: try: # ssl_ctx = ssl.create_default_context(cafile=certifi.where()) - ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) - # ssl_ctx = ssl.create_default_context(ssl.Purpose.SERVER_AUTH) + # ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) + ssl_ctx = ssl.create_default_context(ssl.Purpose.SERVER_AUTH) except AttributeError: pass @@ -118,7 +118,9 @@ def urlopen(url: str) -> Union[None, HTTPResponse]: urllib.request.install_opener(opener) # Url opening - req = urllib.request.Request(url, headers={"User-Agent": "Magic Browser"}) + req = urllib.request.Request( + url, headers={"User-Agent": "Mozilla/5.0 Magic Browser"} + ) try: u = urllib.request.urlopen(req, timeout=timeout) @@ -199,8 +201,9 @@ def get_zip_url(repo): return f"{repo.url}/-/archive/{repo.branch}/{repo.name}-{repo.branch}.zip" else: FreeCAD.Console.PrintLog( - "Debug: addonmanager_utilities.get_zip_url: Unknown git host:", + "Debug: addonmanager_utilities.get_zip_url: Unknown git host fetching zip URL:", parsedUrl.netloc, + "\n", ) return None @@ -220,6 +223,7 @@ def construct_git_url(repo, filename): FreeCAD.Console.PrintLog( "Debug: addonmanager_utilities.construct_git_url: Unknown git host:" + parsed_url.netloc + + f" for file {filename}\n" ) return None @@ -250,7 +254,9 @@ def get_desc_regex(repo): ): return r'' FreeCAD.Console.PrintLog( - "Debug: addonmanager_utilities.get_desc_regex: Unknown git host:", repo.url + "Debug: addonmanager_utilities.get_desc_regex: Unknown git host:", + repo.url, + "\n", ) return None diff --git a/src/Mod/AddonManager/addonmanager_workers.py b/src/Mod/AddonManager/addonmanager_workers.py index 511fedef4137..b1919a11f918 100644 --- a/src/Mod/AddonManager/addonmanager_workers.py +++ b/src/Mod/AddonManager/addonmanager_workers.py @@ -435,7 +435,7 @@ def check_workbench(self, wb): self.update_status.emit(wb) except Exception: FreeCAD.Console.PrintWarning( - translate("AddonsInstaller", "git pull failed for {wb.name}") + translate("AddonsInstaller", "git fetch failed for {wb.name}") ) def check_package(self, package: AddonManagerRepo) -> None: @@ -1131,15 +1131,13 @@ def run(self): target_dir = moddir + os.sep + self.repo.name if have_git and not NOGIT: - self.git_progress = GitProgressMonitor() # Do the git process... self.run_git(target_dir) - self.update_timer.stop() else: self.run_zip(target_dir) def update_status(self) -> None: - if hasattr(self, "git_progress"): + if hasattr(self, "git_progress") and self.isRunning(): self.progress_made.emit(self.git_progress.current, self.git_progress.total) self.status_message.emit(self.git_progress.message) @@ -1155,6 +1153,8 @@ def run_git(self, clonedir: str) -> None: ) return + self.git_progress = GitProgressMonitor() + if os.path.exists(clonedir): self.run_git_update(clonedir) else: @@ -1176,27 +1176,28 @@ def run_git_update(self, clonedir: str) -> None: utils.repair_git_repo(self.repo.url, clonedir) repo = git.Git(clonedir) try: - repo.pull(progress=self.git_progress) + repo.pull() # Refuses to take a progress object? answer = translate( "AddonsInstaller", "Workbench successfully updated. " "Please restart FreeCAD to apply the changes.", ) - except Exception: + except Exception as e: answer = ( translate("AddonsInstaller", "Error updating module ") + self.repo.name + " - " + translate("AddonsInstaller", "Please fix manually") + + " -- \n" ) - answer += repo.status() + answer += str(e) self.failure.emit(self.repo, answer) else: # Update the submodules for this repository repo_sms = git.Repo(clonedir) self.status_message.emit("Updating submodules...") for submodule in repo_sms.submodules: - submodule.update(init=True, recursive=True, progress=self.git_progress) + submodule.update(init=True, recursive=True) self.update_metadata() self.success.emit(self.repo, answer) @@ -1213,11 +1214,20 @@ def run_git_clone(self, clonedir: str) -> None: + "\n" ) self.status_message.emit("Cloning module...") + current_thread = QtCore.QThread.currentThread() + + # NOTE: There is no way to interrupt this process in GitPython: someday we should + # support pygit2/libgit2 so we can actually interrupt this properly. repo = git.Repo.clone_from(self.repo.url, clonedir, progress=self.git_progress) + if current_thread.isInterruptRequested(): + return # Make sure to clone all the submodules as well if repo.submodules: - repo.submodule_update(recursive=True, progress=self.git_progress) + repo.submodule_update(recursive=True) + + if current_thread.isInterruptRequested(): + return if self.repo.branch in repo.heads: repo.heads[self.repo.branch].checkout()