[edk2-devel] [Patch 2/3] .pytool/Plugin/EccCheck: Remove temp directory on exception

Michael D Kinney posted 3 patches 4 years, 2 months ago
[edk2-devel] [Patch 2/3] .pytool/Plugin/EccCheck: Remove temp directory on exception
Posted by Michael D Kinney 4 years, 2 months ago
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]
-=-=-=-=-=-=-=-=-=-=-=-