From: Daira Hopwood Date: Sat, 24 Oct 2015 00:14:56 +0000 (+0100) Subject: replace_file should allow the replaced file not to exist on Windows. X-Git-Url: https://git.rkrishnan.org/vdrive/%5B/%5D%20/COPYING.GPL?a=commitdiff_plain;h=39260e980a22b7919efbefb4906de927f4ac803e;p=tahoe-lafs%2Ftahoe-lafs.git replace_file should allow the replaced file not to exist on Windows. Signed-off-by: Daira Hopwood --- diff --git a/src/allmydata/util/fileutil.py b/src/allmydata/util/fileutil.py index b35fe2dc..74afd008 100644 --- a/src/allmydata/util/fileutil.py +++ b/src/allmydata/util/fileutil.py @@ -591,6 +591,9 @@ if sys.platform == "win32": REPLACEFILE_IGNORE_MERGE_ERRORS = 0x00000002 + # + ERROR_FILE_NOT_FOUND = 2 + def rename_no_overwrite(source_path, dest_path): os.rename(source_path, dest_path) @@ -605,7 +608,13 @@ if sys.platform == "win32": # The UnableToUnlinkReplacementError case does not happen on Windows; # all errors should be treated as signalling a conflict. err = get_last_error() - raise ConflictError("WinError: %s" % (WinError(err))) + if err != ERROR_FILE_NOT_FOUND: + raise ConflictError("WinError: %s" % (WinError(err),)) + + try: + rename_no_overwrite(replacement_path, replaced_path) + except EnvironmentError: + reraise(ConflictError) else: def rename_no_overwrite(source_path, dest_path): # link will fail with EEXIST if there is already something at dest_path.