diff --git a/BaseTools/Source/Python/Common/Misc.py b/BaseTools/Source/Python/Common/Misc.py index 15ae6a9e40..714eb840ea 100755 --- a/BaseTools/Source/Python/Common/Misc.py +++ b/BaseTools/Source/Python/Common/Misc.py @@ -492,13 +492,9 @@ def SaveFileOnChange(File, Content, IsBinaryFile=True, FileLock=None): if GlobalData.gIsWindows and not os.path.exists(File): - # write temp file, then rename the temp file to the real file - # to make sure the file be immediate saved to disk - with tempfile.NamedTemporaryFile(OpenMode, dir=os.path.dirname(File), delete=False) as tf: - tf.write(Content) - tempname = tf.name try: - os.rename(tempname, File) + with open(File, OpenMode) as tf: + tf.write(Content) except IOError as X: if GlobalData.gBinCacheSource: EdkLogger.quiet("[cache error]:fails to save file with error: %s" % (X)) @@ -566,21 +562,8 @@ def CopyFileOnChange(SrcFile, Dst, FileLock=None): if FileLock: FileLock.acquire() - # os.replace and os.rename are the atomic operations in python 3 and 2. - # we use these two atomic operations to ensure the file copy is atomic: - # copy the src to a temp file in the dst same folder firstly, then - # replace or rename the temp file to the destination file. - with tempfile.NamedTemporaryFile(dir=DirName, delete=False) as tf: - CopyLong(SrcFile, tf.name) - tempname = tf.name try: - if hasattr(os, 'replace'): - os.replace(tempname, DstFile) - else: - # os.rename reqire to remove the dst on Windows, otherwise OSError will be raised. - if GlobalData.gIsWindows and os.path.exists(DstFile): - os.remove(DstFile) - os.rename(tempname, DstFile) + CopyLong(SrcFile, DstFile) except IOError as X: if GlobalData.gBinCacheSource: EdkLogger.quiet("[cache error]:fails to copy file with error: %s" % (X))