REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2183
This patch is going to remove rename call to reduce unnecessary io operation so that saving build time. Cc: Liming Gao <liming....@intel.com> Cc: Bob Feng <bob.c.f...@intel.com> Signed-off-by: Zhiju.Fan <zhijux....@intel.com> --- BaseTools/Source/Python/Common/Misc.py | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/BaseTools/Source/Python/Common/Misc.py b/BaseTools/Source/Python/Common/Misc.py index 15ae6a9e408f..714eb840ea66 100755 --- a/BaseTools/Source/Python/Common/Misc.py +++ b/BaseTools/Source/Python/Common/Misc.py @@ -490,17 +490,13 @@ def SaveFileOnChange(File, Content, IsBinaryFile=True, FileLock=None): if FileLock: FileLock.acquire() 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)) else: EdkLogger.error(None, FILE_CREATE_FAILURE, ExtraData='IOError %s' % X) @@ -564,25 +560,12 @@ def CopyFileOnChange(SrcFile, Dst, FileLock=None): if not FileLock: FileLock = GlobalData.file_lock 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)) else: EdkLogger.error(None, FILE_COPY_FAILURE, ExtraData='IOError %s' % X) -- 2.20.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#47072): https://edk2.groups.io/g/devel/message/47072 Mute This Topic: https://groups.io/mt/34090067/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-