Fix windows bug with move erroring if the target exists, so installing a second time fails (#294)

Fixes #286
This commit is contained in:
Alon Zakai
2019-07-03 15:30:01 -07:00
committed by GitHub
parent d33f7a2900
commit c3f0e0fc0d

11
emsdk
View File

@@ -445,6 +445,15 @@ def fix_potentially_long_windows_pathname(pathname):
return '\\\\?\\' + os.path.normpath(pathname.replace('/', '\\'))
# On windows, rename/move will fail if the destination exists, and there is no
# race-free way to do it. This method removes the destination if it exists, so
# the move always works
def move_with_overwrite(src, dest):
if os.path.exists(dest):
os.remove(dest)
os.rename(src, dest)
# http://stackoverflow.com/questions/12886768/simple-way-to-unzip-file-in-python-on-all-oses
def unzip(source_filename, dest_dir, unpack_even_if_exists=False):
if VERBOSE: print('unzip(source_filename=' + source_filename + ', dest_dir=' + dest_dir + ')')
@@ -492,7 +501,7 @@ def unzip(source_filename, dest_dir, unpack_even_if_exists=False):
parent_dir = os.path.dirname(fix_potentially_long_windows_pathname(final_dst_filename))
if parent_dir and not os.path.exists(parent_dir):
os.makedirs(parent_dir)
os.rename(fix_potentially_long_windows_pathname(tmp_dst_filename), fix_potentially_long_windows_pathname(final_dst_filename))
move_with_overwrite(fix_potentially_long_windows_pathname(tmp_dst_filename), fix_potentially_long_windows_pathname(final_dst_filename))
if common_subdir:
try: