diff --git a/update_versions.py b/update_versions.py index 12b2dafa5d73f632792be0ed3c98fa0770aa9088..ac0b20aba7c09584037c09246cd534f891274358 100644 --- a/update_versions.py +++ b/update_versions.py @@ -24,10 +24,13 @@ # update the version numbers and dependencies. # ------------------------------------------------------------ +import errno import os import shutil +import stat import subprocess import sys +import traceback from os import remove, close from shutil import move from tempfile import mkstemp @@ -685,7 +688,7 @@ def make_dir(dir): def del_dir(dir): try: if os.path.isdir(dir): - shutil.rmtree(dir) + shutil.rmtree(dir, ignore_errors=False, onerror=handleRemoveReadonly) if os.path.isdir(dir): return False else: @@ -693,8 +696,18 @@ def del_dir(dir): return True except: print("Exception thrown when deleting directory") + traceback.print_exc() return False +# Handle any permisson errors thrown by shutil.rmtree +def handleRemoveReadonly(func, path, exc): + excvalue = exc[1] + if func in (os.rmdir, os.remove) and excvalue.errno == errno.EACCES: + os.chmod(path, stat.S_IRWXU| stat.S_IRWXG| stat.S_IRWXO) # 0777 + func(path) + else: + raise + # Run git clone and git checkout for the tag def do_git(tag, tag_dir): try: @@ -801,8 +814,13 @@ def main(): # 2) Get the modules in the clone and the source # 3) Generate the xml comparison # ----------------------------------------------- - del_dir("./build/autopsy-update_versions") - tag_dir = os.path.abspath("./build/autopsy-update_versions") + if not del_dir("./build/" + tag): + print("\n\n=========================================") + print(" Failed to delete previous Autopsy clone.") + print(" Unable to continue...") + print("=========================================") + return 1 + tag_dir = os.path.abspath("./build/" + tag) if not do_git(tag, tag_dir): return 1 sys.stdout.flush()