Fix windows bug with move erroring if the target exists, so installing a second time fails (#294)
Fixes #286
This commit is contained in:
11
emsdk
11
emsdk
@@ -445,6 +445,15 @@ def fix_potentially_long_windows_pathname(pathname):
|
|||||||
return '\\\\?\\' + os.path.normpath(pathname.replace('/', '\\'))
|
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
|
# 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):
|
def unzip(source_filename, dest_dir, unpack_even_if_exists=False):
|
||||||
if VERBOSE: print('unzip(source_filename=' + source_filename + ', dest_dir=' + dest_dir + ')')
|
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))
|
parent_dir = os.path.dirname(fix_potentially_long_windows_pathname(final_dst_filename))
|
||||||
if parent_dir and not os.path.exists(parent_dir):
|
if parent_dir and not os.path.exists(parent_dir):
|
||||||
os.makedirs(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:
|
if common_subdir:
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user