]> git.proxmox.com Git - mirror_edk2.git/blobdiff - .pytool/Plugin/UncrustifyCheck/UncrustifyCheck.py
.pytool/Plugin/UncrustifyCheck: Add ignore file support
[mirror_edk2.git] / .pytool / Plugin / UncrustifyCheck / UncrustifyCheck.py
index 6920580646de8b0f0633f8dc11214804a8dbe701..22cca0ff11019c7dcb20e614a61590fd3c9f5e17 100644 (file)
@@ -18,6 +18,7 @@ from edk2toolext.environment.plugin_manager import PluginManager
 from edk2toolext.environment.plugintypes.ci_build_plugin import ICiBuildPlugin\r
 from edk2toolext.environment.plugintypes.uefi_helper_plugin import HelperFunctions\r
 from edk2toolext.environment.var_dict import VarDict\r
+from edk2toollib.gitignore_parser import parse_gitignore_lines\r
 from edk2toollib.log.junit_report_format import JunitReportTestCase\r
 from edk2toollib.uefi.edk2.path_utilities import Edk2Path\r
 from edk2toollib.utility_functions import  RunCmd\r
@@ -273,6 +274,24 @@ class UncrustifyCheck(ICiBuildPlugin):
             f"-c {self._app_config_file} -F {self._app_input_file_path} --if-changed --suffix {UncrustifyCheck.FORMATTED_FILE_EXTENSION}", outstream=output)\r
         self._app_output = output.getvalue().strip().splitlines()\r
 \r
+    def _get_files_ignored_in_config(self):\r
+        """"\r
+        Returns a function that returns true if a given file string path is ignored in the plugin configuration file and false otherwise.\r
+        """\r
+        ignored_files = []\r
+        if "IgnoreFiles" in self._package_config:\r
+            ignored_files = self._package_config["IgnoreFiles"]\r
+\r
+        # Pass "Package configuration file" as the source file path since\r
+        # the actual configuration file name is unknown to this plugin and\r
+        # this provides a generic description of the file that provided\r
+        # the ignore file content.\r
+        #\r
+        # This information is only used for reporting (not used here) and\r
+        # the ignore lines are being passed directly as they are given to\r
+        # this plugin.\r
+        return parse_gitignore_lines(ignored_files, "Package configuration file", self._abs_workspace_path)\r
+\r
     def _get_git_ignored_paths(self) -> List[str]:\r
         """"\r
         Returns a list of file absolute path strings to all files ignored in this git repository.\r
@@ -465,6 +484,19 @@ class UncrustifyCheck(ICiBuildPlugin):
             self._abs_file_paths_to_format.extend(\r
                 [str(path.resolve()) for path in pathlib.Path(self._abs_package_path).rglob(path)])\r
 \r
+        # Remove files ignore in the plugin configuration file\r
+        plugin_ignored_files = list(filter(self._get_files_ignored_in_config(), self._abs_file_paths_to_format))\r
+\r
+        if plugin_ignored_files:\r
+            logging.info(\r
+                f"{self._package_name} file count before plugin ignore file exclusion: {len(self._abs_file_paths_to_format)}")\r
+            for path in plugin_ignored_files:\r
+                if path in self._abs_file_paths_to_format:\r
+                    logging.info(f"  File ignored in plugin config file: {path}")\r
+                    self._abs_file_paths_to_format.remove(path)\r
+            logging.info(\r
+                f"{self._package_name} file count after plugin ignore file exclusion: {len(self._abs_file_paths_to_format)}")\r
+\r
         if not "SkipGitExclusions" in self._package_config or not self._package_config["SkipGitExclusions"]:\r
             # Remove files ignored by git\r
             logging.info(\r