From nobody Mon Feb 9 01:45:44 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+87811+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+87811+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=linux.microsoft.com ARC-Seal: i=1; a=rsa-sha256; t=1647914341; cv=none; d=zohomail.com; s=zohoarc; b=d99uRXw/2kUIl2DpKhNK6aSVsaK7J5NttmnOOab7YdgFB+5iQSA/XS7O7Lin4WKmGRZNBziJSC/9tjuYERLbNSBWUcRAabaC80YQRNF8By9Wimw6E2YN+3KoluWeSoLI90fODVs94pauJyBBxvCFf5pfimWligcgKji9SDaPu6s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1647914341; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=YAJ6hfdnmh88hr7sYXJUF7FXbduvnTX2fb8UZ3xjlEk=; b=PAPDM4aJq7wGrLWt9BhYmSdFYaICJRrkuQzsqw71v9n3LO9SOBXyzrYBobTrp+C476574YAnm8ncjCJfeifByV9KCZRTtgFb3cFZRiaJuv25uUmsmMyzwTX7Y95Wxi9I1JlSnehFYn9i963Vw5qXZ4q1Zcq1xss8SBYdS5Dn/ys= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+87811+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1647914341184607.2026428020442; Mon, 21 Mar 2022 18:59:01 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id YdcPYY1788612xO9qY3Dv1DH; Mon, 21 Mar 2022 18:59:00 -0700 X-Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mx.groups.io with SMTP id smtpd.web09.4842.1647914340146155946 for ; Mon, 21 Mar 2022 18:59:00 -0700 X-Received: from localhost.localdomain (unknown [47.202.59.224]) by linux.microsoft.com (Postfix) with ESMTPSA id 196E620DE47A; Mon, 21 Mar 2022 18:58:59 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 196E620DE47A From: "Michael Kubacki" To: devel@edk2.groups.io Cc: Michael D Kinney , Liming Gao , Sean Brogan , Bret Barkelew Subject: [edk2-devel] [PATCH v1 2/4] .pytool/Plugin/UncrustifyCheck: Add ignore file support Date: Mon, 21 Mar 2022 21:58:12 -0400 Message-Id: <20220322015814.9182-3-mikuback@linux.microsoft.com> In-Reply-To: <20220322015814.9182-1-mikuback@linux.microsoft.com> References: <20220322015814.9182-1-mikuback@linux.microsoft.com> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,mikuback@linux.microsoft.com X-Gm-Message-State: 69vtV4atJ53NBR6wlbbIw0Kbx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1647914340; bh=gATMQvefIOKggGojdGjLwHANg6vINKbKlhxydpFE/L0=; h=Cc:Date:From:Reply-To:Subject:To; b=aKjmOd3aDaOa6mNeIx/f0AcFTPCDXyiD7xUNOXX5A9RTuyAco/UkqUGwdcYvdXnoP/S qE7/hupUazr4xbAO/cGj1JaXs/HbI1rNmnxfiioQfy/JPt+yKQnSuKnHuYhQRcvPhbAo6 Lde5ez6z7rs6w33A+owv56CNjiSTzBOFbfI= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1647914342017100002 Content-Type: text/plain; charset="utf-8" From: Michael Kubacki REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3D3880 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 Cc: Liming Gao Cc: Sean Brogan Cc: Bret Barkelew Signed-off-by: Michael Kubacki --- .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/Uncr= ustifyCheck/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 configur= ation options. "AdditionalIncludePaths": [], # Additional paths to check formatting= (wildcards supported). "AuditOnly": False, # Don't fail the build if there are er= rors. 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 s= hould 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 fai= lures without breaking t =20 When specified in the config file, this is a package relative path to the = Uncrustify configuration file. =20 +### `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` =20 This plugin by default will check the below standard paths. A package conf= iguration file can specify any of these paths diff --git a/.pytool/Plugin/UncrustifyCheck/UncrustifyCheck.py b/.pytool/Pl= ugin/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 ICiBuildPl= ugin from edk2toolext.environment.plugintypes.uefi_helper_plugin import HelperF= unctions 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= =3Doutput) self._app_output =3D output.getvalue().strip().splitlines() =20 + def _get_files_ignored_in_config(self) -> Callable[[str], bool]: + """" + Returns a function that returns true if a given file string path i= s ignored in the plugin configuration file and false otherwise. + """ + ignored_files =3D [] + if "IgnoreFiles" in self._package_config: + ignored_files =3D self._package_config["IgnoreFiles"] + return parse_gitignore_lines(ignored_files, os.path.join(self._abs= _workspace_path, "nofile.txt"), self._abs_workspace_path) + 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_pa= ckage_path).rglob(path)]) =20 + # Remove files ignore in the plugin configuration file + plugin_ignored_files =3D list(filter(self._get_files_ignored_in_co= nfig(), self._abs_file_paths_to_format)) + + if plugin_ignored_files: + logging.info( + f"{self._package_name} file count before plugin ignore fil= e 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._pa= ckage_config["SkipGitExclusions"]: # Remove files ignored by git logging.info( --=20 2.28.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#87811): https://edk2.groups.io/g/devel/message/87811 Mute This Topic: https://groups.io/mt/89944184/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-