.pytool/Plugin/EccCheck: Remove temp directory on exception

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2986

Add try/except to RunBuildPlugin() to remove temporary
directory if a KeyboardInterrupt exception or an unexpected
exception is detected.

Cc: Sean Brogan <sean.brogan@microsoft.com>
Cc: Bret Barkelew <Bret.Barkelew@microsoft.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Michael Kubacki <michael.kubacki@microsoft.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
Acked-by: Sean Brogan <sean.brogan@microsoft.com>
Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
This commit is contained in:
Michael D Kinney 2021-11-22 21:20:48 -08:00 committed by mergify[bot]
parent 69877614fd
commit 854462bd34
1 changed files with 47 additions and 31 deletions

View File

@ -72,45 +72,61 @@ class EccCheck(ICiBuildPlugin):
# Create temp directory # Create temp directory
temp_path = os.path.join(workspace_path, 'Build', '.pytool', 'Plugin', 'EccCheck') temp_path = os.path.join(workspace_path, 'Build', '.pytool', 'Plugin', 'EccCheck')
# Delete temp directory try:
if os.path.exists(temp_path): # Delete temp directory
shutil.rmtree(temp_path) if os.path.exists(temp_path):
# Copy package being scanned to temp_path shutil.rmtree(temp_path)
shutil.copytree ( # Copy package being scanned to temp_path
os.path.join(workspace_path, packagename), shutil.copytree (
os.path.join(temp_path, packagename), os.path.join(workspace_path, packagename),
symlinks=True os.path.join(temp_path, packagename),
) symlinks=True
# Copy exception.xml to temp_path )
shutil.copyfile ( # Copy exception.xml to temp_path
os.path.join(basetools_path, "Source", "Python", "Ecc", "exception.xml"), shutil.copyfile (
os.path.join(temp_path, "exception.xml") os.path.join(basetools_path, "Source", "Python", "Ecc", "exception.xml"),
) os.path.join(temp_path, "exception.xml")
)
self.ApplyConfig(pkgconfig, temp_path, packagename) self.ApplyConfig(pkgconfig, temp_path, packagename)
modify_dir_list = self.GetModifyDir(packagename) modify_dir_list = self.GetModifyDir(packagename)
patch = self.GetDiff(packagename) patch = self.GetDiff(packagename)
ecc_diff_range = self.GetDiffRange(patch, packagename, temp_path) ecc_diff_range = self.GetDiffRange(patch, packagename, temp_path)
# #
# Use temp_path as working directory when running ECC tool # Use temp_path as working directory when running ECC tool
# #
self.GenerateEccReport(modify_dir_list, ecc_diff_range, temp_path, basetools_path) self.GenerateEccReport(modify_dir_list, ecc_diff_range, temp_path, basetools_path)
ecc_log = os.path.join(temp_path, "Ecc.log") ecc_log = os.path.join(temp_path, "Ecc.log")
if self.ECC_PASS: if self.ECC_PASS:
# Delete temp directory
if os.path.exists(temp_path):
shutil.rmtree(temp_path)
tc.SetSuccess()
return 0
else:
with open(ecc_log, encoding='utf8') as output:
ecc_output = output.readlines()
for line in ecc_output:
logging.error(line.strip())
# Delete temp directory
if os.path.exists(temp_path):
shutil.rmtree(temp_path)
tc.SetFailed("EccCheck failed for {0}".format(packagename), "CHECK FAILED")
return 1
except KeyboardInterrupt:
# If EccCheck is interrupted by keybard interrupt, then return failure
# Delete temp directory # Delete temp directory
if os.path.exists(temp_path): if os.path.exists(temp_path):
shutil.rmtree(temp_path) shutil.rmtree(temp_path)
tc.SetSuccess() tc.SetFailed("EccCheck interrupted for {0}".format(packagename), "CHECK FAILED")
return 0 return 1
else: else:
with open(ecc_log, encoding='utf8') as output: # If EccCheck fails for any other exception type, raise the exception
ecc_output = output.readlines()
for line in ecc_output:
logging.error(line.strip())
# Delete temp directory # Delete temp directory
if os.path.exists(temp_path): if os.path.exists(temp_path):
shutil.rmtree(temp_path) shutil.rmtree(temp_path)
tc.SetFailed("EccCheck failed for {0}".format(packagename), "CHECK FAILED") tc.SetFailed("EccCheck exception for {0}".format(packagename), "CHECK FAILED")
raise
return 1 return 1
def GetDiff(self, pkg: str) -> List[str]: def GetDiff(self, pkg: str) -> List[str]: