From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id 2A952940855 for ; Wed, 14 Feb 2024 01:18:18 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=hY7/Vswp/ASdb8wmdQAv8TBBwYfkH4r1u1jfaV5J8pg=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1707873497; v=1; b=h6fXw1fMe0h6GSuq+itkMooeMkbx69syCRv+NGrwYKDU1oCLOwlMxXMb6fS4EawODaZ/fXFr Q+RSkmAsEuxNqW/pOq9b9WIaDQAnEzU/fF5nt1aZ0pIgdytOydetGY0InSzy/blFbr8GEiRjb28 osgKyKYUl0Nz5SxHvDr6ABoY= X-Received: by 127.0.0.2 with SMTP id Vj1IYY7687511xkW5NbzJi65; Tue, 13 Feb 2024 17:18:17 -0800 X-Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.19]) by mx.groups.io with SMTP id smtpd.web11.31890.1707873496682881574 for ; Tue, 13 Feb 2024 17:18:16 -0800 X-IronPort-AV: E=McAfee;i="6600,9927,10982"; a="1788018" X-IronPort-AV: E=Sophos;i="6.06,158,1705392000"; d="scan'208";a="1788018" X-Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by fmvoesa113.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Feb 2024 17:18:16 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.06,158,1705392000"; d="scan'208";a="26211777" X-Received: from mdkinney-mobl.amr.corp.intel.com ([10.209.108.163]) by fmviesa002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Feb 2024 17:18:16 -0800 From: "Michael D Kinney" To: devel@edk2.groups.io Cc: Rebecca Cran , Liming Gao , Bob Feng , Yuwei Chen , Michael Kubacki Subject: [edk2-devel] [Patch 1/1] BaseTools/Scripts/PatchCheck: Error if commit modifies multiple packages Date: Tue, 13 Feb 2024 17:17:51 -0800 Message-Id: <20240214011751.2529-1-michael.d.kinney@intel.com> MIME-Version: 1.0 Precedence: Bulk 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,michael.d.kinney@intel.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: 8HSEMXiPLnrGn46i2hYHuUryx7686176AA= Content-Transfer-Encoding: 8bit X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=h6fXw1fM; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=intel.com (policy=none); spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4679 Update PatchCheck.py to evaluate all the files modified in each commit and generate an error if: * A single commit modifies files in multiple packages * A single commit modifies files in multiple non-package dirs * A single commit modifies files in both a package and a non-package dir. Modifications to files in the root of the repository are not evaluated. The set of packages are found by search for DEC files in the repository. The list of DEC files in the repository is collected with the following git command: git ls-files *.dec The set of files added/modified by each commit is found using the following git command: git diff-tree --no-commit-id --name-only --diff-filter=AM -r The set of files deleted by each commit is found using the following git command: git diff-tree --no-commit-id --name-only --diff-filter=D -r Cc: Rebecca Cran Cc: Liming Gao Cc: Bob Feng Cc: Yuwei Chen Cc: Michael Kubacki Signed-off-by: Michael D Kinney --- BaseTools/Scripts/PatchCheck.py | 49 +++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/BaseTools/Scripts/PatchCheck.py b/BaseTools/Scripts/PatchCheck.py index 1675dcbd7321..988f152e38d7 100755 --- a/BaseTools/Scripts/PatchCheck.py +++ b/BaseTools/Scripts/PatchCheck.py @@ -665,6 +665,7 @@ class CheckGitCommits: """ def __init__(self, rev_spec, max_count): + dec_files = self.read_dec_files_from_git() commits = self.read_commit_list_from_git(rev_spec, max_count) if len(commits) == 1 and Verbose.level > Verbose.ONELINE: commits = [ rev_spec ] @@ -681,9 +682,57 @@ class CheckGitCommits: self.ok &= EmailAddressCheck(email, 'Committer').ok patch = self.read_patch_from_git(commit) self.ok &= CheckOnePatch(commit, patch).ok + self.ok &= self.check_parent_packages (dec_files, commit) + if not commits: print("Couldn't find commit matching: '{}'".format(rev_spec)) + def get_parent_packages(self, dec_files, commit, filter): + filelist = self.read_files_modified_from_git (commit, filter) + parents = set() + for file in filelist: + dec_found = False + for dec_file in dec_files: + if os.path.commonpath([dec_file, file]): + dec_found = True + parents.add(dec_file) + if not dec_found and os.path.dirname (file): + # No DEC file found and file is in a subdir + # Covers BaseTools, .github, .azurepipelines, .pytool + parents.add(file.split('/')[0]) + return list(parents) + + def check_parent_packages(self, dec_files, commit): + modified = self.get_parent_packages (dec_files, commit, 'AM') + if len (modified) > 1: + print("The commit adds/modifies files in multiple packages:\n *", + '\n * '.join(modified)) + self.ok = False + deleted = self.get_parent_packages (dec_files, commit, 'D') + if len (deleted) > 1: + print("The commit deletes files from multiple packages:\n *", + '\n * '.join(deleted)) + self.ok = False + return self.ok + + def read_dec_files_from_git(self): + # run git ls-files *.dec + out = self.run_git('ls-files', '*.dec') + # return list of .dec files + try: + return out.split() + except: + return [] + + def read_files_modified_from_git(self, commit, filter): + # run git diff-tree --no-commit-id --name-only -r + out = self.run_git('diff-tree', '--no-commit-id', '--name-only', + '--diff-filter=' + filter, '-r', commit) + try: + return out.split() + except: + return [] + def read_commit_list_from_git(self, rev_spec, max_count): # Run git to get the commit patch cmd = [ 'rev-list', '--abbrev-commit', '--no-walk' ] -- 2.40.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#115424): https://edk2.groups.io/g/devel/message/115424 Mute This Topic: https://groups.io/mt/104345509/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-