Can you explain how this filename is used? Perhaps add a comment in this series.
If this pattern is used in several places, then I agree that can be cleaned up in a different patch series. Mike > -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Michael Kubacki > Sent: Friday, April 1, 2022 9:07 AM > To: devel@edk2.groups.io; Kinney, Michael D <michael.d.kin...@intel.com> > Cc: Gao, Liming <gaolim...@byosoft.com.cn>; Sean Brogan > <sean.bro...@microsoft.com>; Bret Barkelew > <bret.barke...@microsoft.com> > Subject: Re: [edk2-devel] [PATCH v1 2/4] .pytool/Plugin/UncrustifyCheck: Add > ignore file support > > That is borrowed from a pattern used in other plugins. Example: > https://github.com/tianocore/edk2/blob/master/.pytool/Plugin/SpellCheck/SpellCheck.py#L160-#L161 > > I don't mind updating the plugins to do something different if that is > desired, but perhaps that should be a separate change. > > Regards, > Michael > > On 3/22/2022 12:14 PM, Michael D Kinney wrote: > > Michael, > > > > One comment below. > > > > Mike > > > >> -----Original Message----- > >> From: mikub...@linux.microsoft.com <mikub...@linux.microsoft.com> > >> Sent: Monday, March 21, 2022 6:58 PM > >> To: devel@edk2.groups.io > >> Cc: Kinney, Michael D <michael.d.kin...@intel.com>; Gao, Liming > >> <gaolim...@byosoft.com.cn>; Sean Brogan > >> <sean.bro...@microsoft.com>; Bret Barkelew <bret.barke...@microsoft.com> > >> Subject: [PATCH v1 2/4] .pytool/Plugin/UncrustifyCheck: Add ignore file > >> support > >> > >> From: Michael Kubacki <michael.kuba...@microsoft.com> > >> > >> REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3880 > >> > >> Currently UncrustifyCheck.py provides the following exclusion > >> options: > >> > >> 1. Override the type of files UncrustifyCheck operates against by > >> default (.c and .h files). Using the "IgnoreStandardPaths" > >> configuration option. > >> > >> 2. By default, UncrustifyCheck skips files in git submodules and > >> ignored by git (the "SkipGitExclusions" configuration option can > >> override this behavior). > >> > >> The goal of UncrustifyCheck is to provide consistent formatting > >> across the codebase. In some rare circumstances, maintainers might > >> need to exclude a specific file (or file pattern) within their > >> package. For example, a small set of auto-generated files from > >> another repository. > >> > >> This change adds a new configuration option that can be specified > >> in a package CI YAML file to describe a list of files within the > >> package that should be ignored by UncrustifyCheck. > >> > >> The configuration option is called "IgnoreFiles" and it uses similar > >> syntax to git ignore to ignore a list of files. > >> > >> Cc: Michael D Kinney <michael.d.kin...@intel.com> > >> Cc: Liming Gao <gaolim...@byosoft.com.cn> > >> Cc: Sean Brogan <sean.bro...@microsoft.com> > >> Cc: Bret Barkelew <bret.barke...@microsoft.com> > >> Signed-off-by: Michael Kubacki <michael.kuba...@microsoft.com> > >> --- > >> .pytool/Plugin/UncrustifyCheck/Readme.md | 7 ++++++ > >> .pytool/Plugin/UncrustifyCheck/UncrustifyCheck.py | 24 > >> ++++++++++++++++++++ > >> 2 files changed, 31 insertions(+) > >> > >> diff --git a/.pytool/Plugin/UncrustifyCheck/Readme.md > >> b/.pytool/Plugin/UncrustifyCheck/Readme.md > >> index 0c46fd241a7a..efe7a573e4fa 100644 > >> --- a/.pytool/Plugin/UncrustifyCheck/Readme.md > >> +++ b/.pytool/Plugin/UncrustifyCheck/Readme.md > >> @@ -41,6 +41,7 @@ The plugin can be configured with a few optional > >> configuration options. > >> "AdditionalIncludePaths": [], # Additional paths to check > >> formatting (wildcards supported). > >> "AuditOnly": False, # Don't fail the build if there are > >> errors. Just log them. > >> "ConfigFilePath": "", # Custom path to an Uncrustify > >> config file. > >> + "IgnoreFiles": [], # A list of file patterns to ignore. > >> "IgnoreStandardPaths": [], # Standard Plugin defined paths that > >> should be ignored. > >> "OutputFileDiffs": True, # Output chunks of formatting diffs > >> in the test case log. > >> # This can significantly slow down > >> the plugin on very large packages. > >> @@ -67,6 +68,12 @@ the test as skipped. This allows visibility into the > >> failures without breaking t > >> > >> When specified in the config file, this is a package relative path to > >> the Uncrustify configuration file. > >> > >> +### `IgnoreFiles` > >> + > >> +This option supports .gitignore file and folder matching strings > >> including wildcards. > >> + > >> +The files specified by this configuration option will not be processed by > >> Uncrustify. > >> + > >> ### `IgnoreStandardPaths` > >> > >> This plugin by default will check the below standard paths. A package > >> configuration file can specify any of these paths > >> diff --git a/.pytool/Plugin/UncrustifyCheck/UncrustifyCheck.py > >> b/.pytool/Plugin/UncrustifyCheck/UncrustifyCheck.py > >> index dc133fecc4b2..e8370381032f 100644 > >> --- a/.pytool/Plugin/UncrustifyCheck/UncrustifyCheck.py > >> +++ b/.pytool/Plugin/UncrustifyCheck/UncrustifyCheck.py > >> @@ -13,11 +13,13 @@ import os > >> import pathlib > >> import shutil > >> import timeit > >> +from collections.abc import Callable > >> from edk2toolext.environment import version_aggregator > >> from edk2toolext.environment.plugin_manager import PluginManager > >> from edk2toolext.environment.plugintypes.ci_build_plugin import > >> ICiBuildPlugin > >> from edk2toolext.environment.plugintypes.uefi_helper_plugin import > >> HelperFunctions > >> from edk2toolext.environment.var_dict import VarDict > >> +from edk2toollib.gitignore_parser import parse_gitignore_lines > >> from edk2toollib.log.junit_report_format import JunitReportTestCase > >> from edk2toollib.uefi.edk2.path_utilities import Edk2Path > >> from edk2toollib.utility_functions import RunCmd > >> @@ -273,6 +275,15 @@ class UncrustifyCheck(ICiBuildPlugin): > >> f"-c {self._app_config_file} -F {self._app_input_file_path} > >> --if-changed --suffix > >> {UncrustifyCheck.FORMATTED_FILE_EXTENSION}", outstream=output) > >> self._app_output = output.getvalue().strip().splitlines() > >> > >> + def _get_files_ignored_in_config(self) -> Callable[[str], bool]: > >> + """" > >> + Returns a function that returns true if a given file string path > >> is ignored in the plugin configuration file and > false > >> otherwise. > >> + """ > >> + ignored_files = [] > >> + if "IgnoreFiles" in self._package_config: > >> + ignored_files = self._package_config["IgnoreFiles"] > >> + return parse_gitignore_lines(ignored_files, > >> os.path.join(self._abs_workspace_path, "nofile.txt"), > >> self._abs_workspace_path) > > > > What is the purpose of "nofile.txt" here? If this a param that is > > optional/ignored? If so, there > > are better python methods to do that. > > > >> + > >> def _get_git_ignored_paths(self) -> List[str]: > >> """" > >> Returns a list of file absolute path strings to all files > >> ignored in this git repository. > >> @@ -464,6 +475,19 @@ class UncrustifyCheck(ICiBuildPlugin): > >> self._abs_file_paths_to_format.extend( > >> [str(path.resolve()) for path in > >> pathlib.Path(self._abs_package_path).rglob(path)]) > >> > >> + # Remove files ignore in the plugin configuration file > >> + plugin_ignored_files = > >> list(filter(self._get_files_ignored_in_config(), > >> self._abs_file_paths_to_format)) > >> + > >> + if plugin_ignored_files: > >> + logging.info( > >> + f"{self._package_name} file count before plugin ignore > >> file exclusion: > {len(self._abs_file_paths_to_format)}") > >> + for path in plugin_ignored_files: > >> + if path in self._abs_file_paths_to_format: > >> + logging.info(f" File ignored in plugin config file: > >> {path}") > >> + self._abs_file_paths_to_format.remove(path) > >> + logging.info( > >> + f"{self._package_name} file count after plugin ignore > >> file exclusion: > {len(self._abs_file_paths_to_format)}") > >> + > >> if not "SkipGitExclusions" in self._package_config or not > >> self._package_config["SkipGitExclusions"]: > >> # Remove files ignored by git > >> logging.info( > >> -- > >> 2.28.0.windows.1 > > > > > > > > > > > > > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#88349): https://edk2.groups.io/g/devel/message/88349 Mute This Topic: https://groups.io/mt/89944184/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-