mirror of https://github.com/acidanthera/audk.git
.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:
parent
69877614fd
commit
854462bd34
|
@ -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]:
|
||||||
|
|
Loading…
Reference in New Issue