From 0f04e8a47394390bce3d9e4a5c6259e91ae1d64f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Louis=20V=C3=A9zina?= <5130500+morpheus65535@users.noreply.github.com> Date: Thu, 28 Nov 2019 06:52:06 -0500 Subject: [PATCH] Patched fcache to support real move with shutil instead of os.rename. This way can move from one drive to another. --- libs/fcache/cache.py | 2 +- libs/fcache/posixemulation.py | 29 +++++++---------------------- 2 files changed, 8 insertions(+), 23 deletions(-) diff --git a/libs/fcache/cache.py b/libs/fcache/cache.py index e1510c233..f6f1d9cb2 100644 --- a/libs/fcache/cache.py +++ b/libs/fcache/cache.py @@ -256,7 +256,7 @@ class FileCache(MutableMapping): return self._loads(f.read()) except (IOError, OSError): logger.warning('Error opening file: {}'.format(filename)) - return None + raise def __setitem__(self, key, value): ekey = self._encode_key(key) diff --git a/libs/fcache/posixemulation.py b/libs/fcache/posixemulation.py index 03d6982c3..cf9ac63b7 100644 --- a/libs/fcache/posixemulation.py +++ b/libs/fcache/posixemulation.py @@ -46,15 +46,7 @@ if os.name == 'nt': # pragma: no cover dst = unicode(dst, sys.getfilesystemencoding()) if _rename_atomic(src, dst): return True - retry = 0 - rv = False - while not rv and retry < 100: - rv = _MoveFileEx(src, dst, _MOVEFILE_REPLACE_EXISTING | - _MOVEFILE_WRITE_THROUGH) - if not rv: - time.sleep(0.001) - retry += 1 - return rv + return _MoveFileEx(src, dst, _MOVEFILE_REPLACE_EXISTING | _MOVEFILE_WRITE_THROUGH) # new in Vista and Windows Server 2008 _CreateTransaction = ctypes.windll.ktmw32.CreateTransaction @@ -68,18 +60,11 @@ if os.name == 'nt': # pragma: no cover if ta == -1: return False try: - retry = 0 - rv = False - while not rv and retry < 100: - rv = _MoveFileTransacted(src, dst, None, None, - _MOVEFILE_REPLACE_EXISTING | - _MOVEFILE_WRITE_THROUGH, ta) - if rv: - rv = _CommitTransaction(ta) - break - else: - time.sleep(0.001) - retry += 1 + rv = _MoveFileTransacted(src, dst, None, None, + _MOVEFILE_REPLACE_EXISTING | + _MOVEFILE_WRITE_THROUGH, ta) + if rv: + rv = _CommitTransaction(ta) return rv finally: _CloseHandle(ta) @@ -92,7 +77,7 @@ if os.name == 'nt': # pragma: no cover return # Fall back to "move away and replace" try: - os.rename(src, dst) + shutil.move(src, dst) except OSError as e: if e.errno != errno.EEXIST: raise