6d571c0 BaseTools/Scripts/PatchCheck: Error if commit modifies multiple packages

1 file Authored by Michael D Kinney 3 months ago, Committed by mergify[bot] 3 months ago,
    BaseTools/Scripts/PatchCheck: Error if commit modifies multiple packages
    
    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 commit adds/modifies files in multiple package directories
    * A commit adds/modifies files in multiple non-package directories
    * A commit adds/modifies files in both a package and a non-package
      directory
    * A commit deletes files from multiple package directories
    * A commit deletes files from multiple non-package directories
    * A commit deletes files from both a package and a non-package
      directory
    
    Modifications to files in the root of the repository are not
    evaluated.
    
    This check is skipped if PatchCheck.py is run on a patch file or
    input from stdin because this multiple package commit check depends
    on information from a git repository.
    
    If --ignore-multi-package option is set, then reduce the multiple
    package commit check from an error to a warning for all commits in
    the commit range provided to PatchCheck.py.
    
    Add check for a 'Continuous-integration-options:' commit message
    tag that allows one or more options to be specified at the individual
    commit scope to enable/disable continuous integration checks. This
    tag must start at the beginning of a commit message line and may
    appear more than once in a commit message.
    
    Add support for a Continuous-integration-options tag value of
    'PatchCheck.ignore-multi-package' that reduces the multiple package
    commit check from an error to a warning for the specific commits that
    specify this option.  Example:
    
      Continuous-integration-options: PatchCheck.ignore-multi-package
    
    The set of packages are found by searching for DEC files in a git
    repository. The list of DEC files in a git 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 <commit>
    
    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 <commit>
    
    Cc: Rebecca Cran <rebecca@bsdio.com>
    Cc: Liming Gao <gaoliming@byosoft.com.cn>
    Cc: Bob Feng <bob.c.feng@intel.com>
    Cc: Yuwei Chen <yuwei.chen@intel.com>
    Cc: Michael Kubacki <mikuback@linux.microsoft.com>
    Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
    Cc: Leif Lindholm <quic_llindhol@quicinc.com>
    Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
    Reviewed-by: Michael Kubacki <michael.kubacki@microsoft.com>
    Reviewed-by: Rebecca Cran <rebecca@bsdio.com>