From 7ea0394e97a00f76847f256f2953a9a39fae7478 Mon Sep 17 00:00:00 2001 From: Chris Hennes Date: Thu, 6 Jan 2022 19:22:00 -0600 Subject: [PATCH] Addon Manager: Handle symlinking failure --- src/Mod/AddonManager/addonmanager_workers.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Mod/AddonManager/addonmanager_workers.py b/src/Mod/AddonManager/addonmanager_workers.py index 45dd516e12..d0752c9444 100644 --- a/src/Mod/AddonManager/addonmanager_workers.py +++ b/src/Mod/AddonManager/addonmanager_workers.py @@ -1249,9 +1249,15 @@ class InstallWorkbenchWorker(QtCore.QThread): if os.path.exists(clonedir): for f in os.listdir(clonedir): if f.lower().endswith(".fcmacro"): - utils.symlink( - os.path.join(clonedir, f), os.path.join(macro_dir, f) - ) + try: + utils.symlink( + os.path.join(clonedir, f), os.path.join(macro_dir, f) + ) + except OSError: + # If the symlink failed (e.g. for a non-admin user on Windows), copy the macro instead + shutil.copy( + os.path.join(clonedir, f), os.path.join(macro_dir, f) + ) FreeCAD.ParamGet( "User parameter:Plugins/" + self.repo.name ).SetString("destination", clonedir)