From c78a02e7824135e7bce5be4ff81a8b8fefb016bf Mon Sep 17 00:00:00 2001 From: triplus Date: Fri, 9 Mar 2018 00:50:11 +0100 Subject: [PATCH] Remove read only files + Method to remove read only file (needed for shutil.rmtree() on Windows). + Revert .clear_cache(). --- src/Mod/AddonManager/AddonManager.py | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/src/Mod/AddonManager/AddonManager.py b/src/Mod/AddonManager/AddonManager.py index e923fc272e..109b3655ec 100644 --- a/src/Mod/AddonManager/AddonManager.py +++ b/src/Mod/AddonManager/AddonManager.py @@ -38,7 +38,7 @@ installed. ''' from PySide import QtCore, QtGui -import sys, os, re, shutil +import sys, os, re, shutil, stat import FreeCAD if sys.version_info.major < 3: import urllib2 @@ -330,6 +330,11 @@ class AddonsInstaller(QtGui.QDialog): else: self.listMacros.setFocus() + def remove_readonly(self, func, path, _): + "Remove read only file." + os.chmod(path, stat.S_IWRITE) + func(path) + def remove(self): if self.tabWidget.currentIndex() == 0: idx = self.listWorkbenches.currentRow() @@ -337,7 +342,7 @@ class AddonsInstaller(QtGui.QDialog): moddir = basedir + os.sep + "Mod" clonedir = basedir + os.sep + "Mod" + os.sep + self.repos[idx][0] if os.path.exists(clonedir): - shutil.rmtree(clonedir) + shutil.rmtree(clonedir, onerror=self.remove_readonly) self.labelDescription.setText(translate("AddonsInstaller", "Addon successfully removed. Please restart FreeCAD")) else: self.labelDescription.setText(translate("AddonsInstaller", "Unable to remove this addon")) @@ -503,16 +508,13 @@ class CheckWBWorker(QtCore.QThread): cw = bare_repo.config_writer() cw.set('core', 'bare', False) del cw - bare_repo.git.clear_cache() repo = git.Repo(clonedir) repo.head.reset('--hard') - repo.git.clear_cache() gitrepo = git.Git(clonedir) gitrepo.fetch() if "git pull" in gitrepo.status(): self.mark.emit(repo[0]) upds.append(repo[0]) - gitrepo.clear_cache() self.progressbar_show.emit(False) if upds: self.info_label.emit(str(len(upds))+" "+translate("AddonsInstaller", "update(s) available")+": "+",".join(upds)+". "+translate("AddonsInstaller","Press the update button again to update them all at once.")) @@ -618,15 +620,12 @@ class ShowWorker(QtCore.QThread): cw = bare_repo.config_writer() cw.set('core', 'bare', False) del cw - bare_repo.git.clear_cache() repo = git.Repo(clonedir) repo.head.reset('--hard') - repo.git.clear_cache() gitrepo = git.Git(clonedir) gitrepo.fetch() if "git pull" in gitrepo.status(): upd = True - gitrepo.clear_cache() if upd: message = "" + translate("AddonsInstaller", "An update is available for this addon.") + "
" + desc + ' - ' + self.repos[self.idx][1] + '' else: @@ -765,19 +764,15 @@ class InstallWorker(QtCore.QThread): cw = bare_repo.config_writer() cw.set('core', 'bare', False) del cw - bare_repo.git.clear_cache() repo = git.Repo(clonedir) repo.head.reset('--hard') - repo.git.clear_cache() repo = git.Git(clonedir) answer = repo.pull() - repo.clear_cache() # Update the submodules for this repository repo_sms = git.Repo(clonedir) for submodule in repo_sms.submodules: submodule.update(init=True, recursive=True) - repo_sms.git.clear_cache() else: answer = self.download(self.repos[idx][1],clonedir) else: @@ -791,7 +786,6 @@ class InstallWorker(QtCore.QThread): # Make sure to clone all the submodules as well if repo.submodules: repo.submodule_update(recursive=True) - repo.git.clear_cache() else: self.info_label.emit("Downloading module...") self.download(self.repos[idx][1],clonedir)