BaseTools:Remove the unnecessary operation of renaming a file.

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.gao@intel.com>
Cc: Bob Feng <bob.c.feng@intel.com>
Signed-off-by: Zhiju.Fan <zhijux.fan@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
Feng, Bob C 2019-09-04 13:09:00 +08:00
parent 0075ab2cec
commit 22e75231ae
1 changed files with 3 additions and 20 deletions

View File

@ -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))