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>
---
.pytool/Plugin/EccCheck/EccCheck.py | 84 +++++++++++++++++------------
1 file changed, 50 insertions(+), 34 deletions(-)
diff --git a/.pytool/Plugin/EccCheck/EccCheck.py b/.pytool/Plugin/EccCheck/EccCheck.py
index 82a3f14d6d5c..25583f15bf54 100644
--- a/.pytool/Plugin/EccCheck/EccCheck.py
+++ b/.pytool/Plugin/EccCheck/EccCheck.py
@@ -72,48 +72,64 @@ class EccCheck(ICiBuildPlugin):
# Create temp directory
temp_path = os.path.join(workspace_path, 'Build', 'ecctemp')
- # Delete temp directory
- if os.path.exists(temp_path):
- shutil.rmtree(temp_path)
- # Copy package being scanned to temp_path
- shutil.copytree (
- os.path.join(workspace_path, packagename),
- os.path.join(temp_path, packagename),
- symlinks=True
- )
- # Copy exception.xml to temp_path
- shutil.copyfile (
- os.path.join(basetools_path, "Source", "Python", "Ecc", "exception.xml"),
- os.path.join(temp_path, "exception.xml")
- )
+ try:
+ # Delete temp directory
+ if os.path.exists(temp_path):
+ shutil.rmtree(temp_path)
+ # Copy package being scanned to temp_path
+ shutil.copytree (
+ os.path.join(workspace_path, packagename),
+ os.path.join(temp_path, packagename),
+ symlinks=True
+ )
+ # Copy exception.xml to temp_path
+ shutil.copyfile (
+ os.path.join(basetools_path, "Source", "Python", "Ecc", "exception.xml"),
+ os.path.join(temp_path, "exception.xml")
+ )
- self.ApplyConfig(pkgconfig, temp_path, packagename)
- modify_dir_list = self.GetModifyDir(packagename)
- patch = self.GetDiff(packagename)
- ecc_diff_range = self.GetDiffRange(patch, packagename, temp_path)
- #
- # Set workingdir to Build output directory because Ecc generates temp files
- # Can not set workingdir to temp_path because that can be on a different
- # drive letter for some CI platforms and RunCmd() does not work correctly
- # if working dir is on a different drive letter.
- #
- self.GenerateEccReport(modify_dir_list, ecc_diff_range, temp_path, basetools_path, os.path.join (workspace_path, 'Build'))
- ecc_log = os.path.join(temp_path, "Ecc.log")
- if self.ECC_PASS:
+ self.ApplyConfig(pkgconfig, temp_path, packagename)
+ modify_dir_list = self.GetModifyDir(packagename)
+ patch = self.GetDiff(packagename)
+ ecc_diff_range = self.GetDiffRange(patch, packagename, temp_path)
+ #
+ # Set workingdir to Build output directory because Ecc generates temp files
+ # Can not set workingdir to temp_path because that can be on a different
+ # drive letter for some CI platforms and RunCmd() does not work correctly
+ # if working dir is on a different drive letter.
+ #
+ self.GenerateEccReport(modify_dir_list, ecc_diff_range, temp_path, basetools_path, os.path.join (workspace_path, 'Build'))
+ ecc_log = os.path.join(temp_path, "Ecc.log")
+ 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
if os.path.exists(temp_path):
shutil.rmtree(temp_path)
- tc.SetSuccess()
- return 0
+ tc.SetFailed("EccCheck interrupted for {0}".format(packagename), "CHECK FAILED")
+ return 1
else:
- with open(ecc_log, encoding='utf8') as output:
- ecc_output = output.readlines()
- for line in ecc_output:
- logging.error(line.strip())
+ # If EccCheck fails for any other exception type, raise the exception
# Delete temp directory
if os.path.exists(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
def GetDiff(self, pkg: str) -> List[str]:
--
2.32.0.windows.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#83926): https://edk2.groups.io/g/devel/message/83926
Mute This Topic: https://groups.io/mt/87253500/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
© 2016 - 2026 Red Hat, Inc.