[edk2-devel] Uncrustify Conversion Detailed Plan and Extended Hard Freeze Update #5 - Completed - Hard Freeze Lifted

Andrew Fish via groups.io afish=apple.com at groups.io
Tue Dec 7 19:27:04 UTC 2021



> On Dec 7, 2021, at 11:22 AM, Michael D Kinney <michael.d.kinney at intel.com> wrote:
> 
> Hello,
> 
> Thank you to everyone for their patience and for everyone who helped with the development
> and review of this important update to the edk2 repository.
> 
> The last 2 PR series have completed review, passed EDK II CI checks, passed CompareBuild
> verifications, and been pushed.
> 
>    https://github.com/tianocore/edk2/pull/2242
>    https://github.com/tianocore/edk2/pull/2244
> 
> The hard freeze has ended and normal development activities can continue.
> 
> 1) If you have code reviews that started before the uncrustify changes, please
>   update them.  The recipes are included below and will be added to the Wiki.
> 
> 2) For all new patch review, please make sure you run the uncrustify tool or
>   use it as a plugin with your editor.  If PRs submitted to EDK II CI do not
>   match the uncrustified version, they will not pass CI.
> 

Mike,

How is this documented outside of this patch set? Is there a Tianocore Wiki page on configuring uncrustify? Does that Readme.rst link to that?

Thanks,

Andrew Fish

> Changes from Update #4
> ----------------------------------------------------------------------------
> * Pushed PR (6)
> * Pushed PR (7)
> * Change uncrustify configuration align_assign_thresh from 4 to 0 (no limit).
> * Update all use of ', OPTIONAL' to ' OPTIONAL,' for function params.
> * Change complex DEBUG_CODE() to DEBUG_CODE_BEGIN/END()
> 
> Changes from Update #3
> ----------------------------------------------------------------------------
> * Pushed PR (5)
> * Added link to PR(6). EDK II CI Status is PASS. Build Compare PASS.
> * Waiting for review of PR (6)
> * Review of PR (7) completed and waiting for review of PR (6)
> ----------------------------------------------------------------------------
> 
> Changes from Update #2
> ----------------------------------------------------------------------------
> * Changed order of PRs swapping (4) and (5).  The PR that activates
>  increases the max CI agent job time is independent of all the other
>  PRs and its review is complete, so it can be committed now.
> * Pushed PRs (1), (2), (3), (4).
> * Waiting for review to complete for PRs (5) and (6)
> * Reviews complete for PR (7)
> * Identifies steps using git filter-branch to apply uncrustify changes to a
>  code review patch series that was generated before the uncrustify changes
>  avoiding manual merge.
> * Identified steps using git filter-repo to generate an alternate history of
>  the edk2 repo with uncrustify changes applied on every commit.  This may
>  be useful when evaluating changes to files using tools like git blame
>  without the large uncrustify patch series.
> ---------------------------------------------------------------------------
> 
> Changes from Update #1
> ----------------------------------------------------------------------------
> * Changed order of PRs swapping (6) and (7).  The PR that activates
>  EDK II CI check UncrustifyCheck has to be last because it unconditionally
>  checks all C/H files in all packages.  Not just files that have been
>  modified like some of the other checkers.
> * Updated link to the branch with the UncrustifyCheck plugin that has been
>  updated with a one line change and Reviewed-by and Tested-by tags.
>  https://github.com/mdkinney/edk2/tree/Bug_3748_add_uncrustify_ci_plugin_v6 
> * Reviews complete for (1), (2), (3), (5), and (7)
> ---------------------------------------------------------------------------
> 
> Michael Kubacki and I have prepared the patches required to apply the 
> uncrustify changes and enable EDK II CI to check all submitted
> patches have been run through uncrustify.
> 
> We have verified through the CompareBuild GitHub Action that the
> format changes performed by uncrustify have no functional changes.
> All of the OBJ, LIB, DLL, EFI, FFS, FV, and FD files match 100%
> across 70 VS2019/GCC5 builds of all package/platform DSC files in
> the edk2 repo.
> 
> The hard freeze will be extended after the edk2-stable202111 tag until
> all uncrustify related changes are committed.  We do not expect this 
> to take more than a few days.  Do not push any PRs until the hard 
> freeze is lifted.
> 
> The changes are broken up into 7 patch series/PRs.  The PRs are ordered
> so they can be submitted using the normal submission process and EDK II
> CI will pass for each one.  Details are listed below.
> 
> Uncrustify 73.0.3 for EDK II
> =============================
> * Sources: https://dev.azure.com/projectmu/_git/Uncrustify
> * Documentation: https://dev.azure.com/projectmu/Uncrustify/_wiki/wikis/Uncrustify.wiki/1/Project-Mu-(EDK-II)-Fork-Readme
> * Download: https://dev.azure.com/projectmu/Uncrustify/_packaging?_a=package&feed=mu_uncrustify&package=mu-uncrustify-release&protocolType=NuGet&version=73.0.3
> 
> Installing Uncrustify
> ======================
> The Uncrustify tool is installed automatically when the Pytools
> environment is used and the stuart* commands are run to complete the
> environment setup.  Please see:
> 
>    https://github.com/tianocore/edk2/tree/master/.pytool#running-ci-locally
> 
> Uncrustify can also be installed from the download page listed above 
> or built from sources from the source link above.
> 
> The Documentation link provides instruction on how to run uncrustify from 
> the command line or install as a Visual Studio Code plugin.  The main
> uncrustify documentation also describes how to integrate with a few other
> editors.
> 
> We have also discussed a client side githook.  That effort has not started.
> Let us know if that is a feature you would find useful.
> 
> Developer impact for new code reviews
> ======================================
> Once the uncrustify checker is active in EDK II CI, developers must 
> make sure their patches are run through the uncrustify tool before 
> sending the patches for review.
> 
> Developers must install and run uncrustify against changes files before 
> sending patch review emails or submitting PR for EDK II CI.  If EDK II CI
> detects and differences in source formatting, then EDK II CI will fail
> and the developer must run uncrustify and resubmit the patches.
> 
> Developer impact to patch series/PRs reviewed during edk2-stable201121 soft/hard freeze
> =======================================================================================
> Developers must rebase their changes after the uncrustify source changes are
> committed(latest edk2/master)
> 
> The following steps can be used to update an existing branch with the 
> required uncrustify format.  This is the Windows version.  I will add
> the Linux version soon.
> 
>    1) Fetch and checkout and rebase to latest edk2/master
> 
>           git fetch origin
>           git checkout master
>           git rebase origin/master
> 
>    2) Make a backup copy of plugin UncrustifyCheck outside WORKSPACE. 
>       (e.g. C:\Temp\UncrustifyCheck) so the uncrustify tool executable and
>       EDK II specific uncrustify configuration file available when working
>       with a branch that does not have those tools in its scope.
> 
>           xcopy .pytool\Plugin\UncrustifyCheck C:\Temp\UncrustifyCheck
> 
>    3) Check out the patch series branch (e.g. MyBranch)
> 
>           git checkout MyBranch
> 
>    4) Rebase patch series against edk2-stable202111
> 
>           git rebase edk2-stable202111
> 
>    5) Create new branch for the uncrustifed version (e.g. MyBranch_Uncrustified)
> 
>           git checkout -b MyBranch_Uncrustified
> 
>    6) Use git filter-branch to uncrustify all the commits in the series
>       between the rebase target from (2) and HEAD of the branch.  A filter
>       can be used to scope the uncrustify operations to only the C/H files
>       in the specific package the patch series is against. (e.g. DynamicTablesPkg).
>       BaseTools should always be excluded.  If the package scoped filter is 
>       not used, it will still work, but will take longer to run because 
>       uncrustify will rescan every C/H files in the whole repo.
> 
>           git filter-branch --tree-filter "git ls-files DynamicTablesPkg*.c DynamicTablesPkg*.h :!BaseTools/* | c:\\Temp\\UncrustifyCheck\\mu-uncrustify-release_extdep\\Windows-x86\\uncrustify.exe -c c:\\Temp\\UncrustifyCheck\\uncrustify.cfg -F - --replace --no-backup --if-changed" edk2-stable202111..HEAD
> 
>    7) Now that all the individual patches in the branch are uncrustified, 
>       rebase against latest edk2/master that is already uncrustified.
> 
>           git rebase master
> 
>    8) Verify the patches in this new branch.
> 
> Impacts to tracing history across the uncrusity changes
> =======================================================
> Tools the view file and line history do work with the large uncrustify
> patch series.  One impact is that the operations can be very slow due
> to the large uncrustify patches.
> 
> One option to provide a faster experience is to provide an alternate
> version of the edk2 repository as "documentation" that has the 
> entire history re-written with uncrustify run on every commit.
> The tool called git-filter-repo can be used to perform this 
> transformation and runs in a reasonable period of time (a few hours) 
> 
>   https://github.com/newren/git-filter-repo
>   https://github.com/newren/git-filter-repo/blob/main/contrib/filter-repo-demos/lint-history
> 
> The following steps can be used to perform this transformation.
> This is the Windows version. I will add the Linux version soon.
> 
>    ** WARNING **  This operation modifies(rewrites) all the commits
>                   in the local copy of the repo.  Do not perform
>                   these steps on a local repo you are using for 
>                   active development.
> 
>    1) Clone edk2 into a new directory (see **WARNING**)
> 
>           git clone https://github.com/tianocore/edk2.git edk2-uncrustified
>           cd edk2-uncrustified
> 
>    2) Setup python virtual env, install pytools, and run stuart commands
>       to setup build environment which includes installing uncrustify tools.
> 
>           https://github.com/tianocore/edk2/tree/master/.pytool#running-ci-locally
> 
>    3) Make a backup copy of plugin UncrustifyCheck outside WORKSPACE. 
>       (e.g. C:\Temp\UncrustifyCheck) so the uncrustify tool executable and
>       EDK II specific uncrustify configuration file available when working
>       with a branch that does not have those tools in its scope.
> 
>           xcopy .pytool\Plugin\UncrustifyCheck C:\Temp\UncrustifyCheck
> 
>    4) Use lint-history.py from git-filter-repo examples
> 
>           https://github.com/newren/git-filter-repo
>           https://github.com/newren/git-filter-repo/blob/main/contrib/filter-repo-demos/lint-history
> 
>       Line #127 - Add try except around subprocess.check_call() with except
>       being pass.  This is required because there are a few commits of C
>       files in the edk2 repo that have incorrect C syntax and do not 
>       build with a C compiler and break the uncrustify parser.  Skip reformat
>       of C files that can not be parsed by uncrustify.  These rare instances
>       are addressed in the commit that fixes the C syntax error.
> 
>       Run this slightly modified version of lint-history.  Include only
>       C/H files and exclude directories that start with 'Tools' or 'BaseTools'.
>       This step took about 2.2 hours on a laptop.
> 
>           lint-history.py 
>               --relevant "return (not filename.startswith(b'Tools') and not filename.startswith(b'BaseTools') and (filename.endswith(b'.c') or filename.endswith(b'.h')))"
>               c:\\work\\GitHub\\tianocore\\foo\\UncrustifyCheck\\mu-uncrustify-release_extdep\\Windows-x86\\uncrustify.exe -c c:\\work\\GitHub\\tianocore\\foo\\UncrustifyCheck\\uncrustify.cfg --replace --no-backup --if-changed
> 
> Order of PRs to apply during extended hard freeze
> ==================================================
> 1) Update EmulatorPkg Win Host [BuildOptions] MSFT CC_FLAGS to not force debug information
>   * https://bugzilla.tianocore.org/show_bug.cgi?id=3747
>   * https://github.com/mdkinney/edk2/tree/Bug_3747_EmulatorPkg_WinHost_ReproducibleBuild
>   * https://github.com/tianocore/edk2/pull/2215
>   * Required for EmulatorPkg to pass CompareBuild for VS2019 IA32/X64 builds.
>   * Status: Review complete.  PR pushed.
> 
> 2) EccCheck should not revert staged and local changes
>   * https://bugzilla.tianocore.org/show_bug.cgi?id=2986
>   * https://github.com/mdkinney/edk2/tree/Bug_2986_EccCheckRemoveGitRevert_V2
>   * https://github.com/tianocore/edk2/pull/2216
>   * Required for EDK II CI to complete in a reasonable period of time when
>     processing the 4000+ source file style changes made by uncrustify.
>   * Also fixes critical bugs that can potentially corrupt git state when 
>     EccCheck is run locally.
>   * Status: Review complete.  PR pushed.
> 
> 3) Update pytool LicenseCheck plugin to use temp directory for diff output file
>   * https://bugzilla.tianocore.org/show_bug.cgi?id=3746
>   * https://github.com/mdkinney/edk2/tree/Bug_3746_LicenseCheckUseDiffOutputFile_V2
>   * https://github.com/tianocore/edk2/pull/2217
>   * Required to reduce EDK II CI build times.
>   * Status: Review complete.  PR pushed.
> 
> 4) Update max job time from 60 min to 120 minutes in .azurepipelines/templates
>   * https://bugzilla.tianocore.org/show_bug.cgi?id=3750
>   * https://github.com/mdkinney/edk2/tree/Bug_3750_IncreaseAzurePipelinesTimeout
>   * https://github.com/tianocore/edk2/pull/2219
>   * Required to allow EccCheck of uncrustify changes to complete on Azure
>     Pipelines CI agents without timing out.
>   * Status: Review complete.  PR pushed.
> 
> 5) Update Package YAML to ignore specific ECC files/errors
>   * https://bugzilla.tianocore.org/show_bug.cgi?id=3749
>   * https://github.com/mdkinney/edk2/tree/Bug_3749_EccCheckIgnoreFilesErrors
>   * https://github.com/tianocore/edk2/pull/2218
>   * Required to pass EccCheck
>   * Status: Review complete. PR pushed
> 
> 6) Uncrustify Source Changes
>   * https://bugzilla.tianocore.org/show_bug.cgi?id=3737
>   * https://bugzilla.tianocore.org/show_bug.cgi?id=3767
>   * https://bugzilla.tianocore.org/show_bug.cgi?id=3760
>   * https://bugzilla.tianocore.org/show_bug.cgi?id=3739
>   * https://github.com/mdkinney/edk2/tree/Bug_3737_3767_3760_3739_ApplyUncrustifyChanges_V7
>   * https://github.com/tianocore/edk2/pull/2242
>   * Build comparison result PASS: https://github.com/mdkinney/edk2/actions/runs/1550132292
>   * EFI_D_ -> DEBUG changes required to pass PatchCheck
>   * , OPTIONAL -> OPTIONAL, changes required for proper formatting
>   * DEBUG_CODE() -> DEBUG_CODE_BEGIN/END() required for complex code blocks
>     for proper formatting.
>   * Uncrustify format changes required to pass UncrustifyCheck
>   * Status: Review complete.  PR pushed
> 
> 7) UncrustifyCheck EDK II CI Plugin
>   * https://bugzilla.tianocore.org/show_bug.cgi?id=3748
>   * https://github.com/mdkinney/edk2/tree/Bug_3748_add_uncrustify_ci_plugin_v7
>   * Required to enforce all PRs submitted to EDK II CI match uncrustify format.
>   * Unconditionally checks all packages.  Cannot be committed until all C/H
>     source files have been updated.
>   * Status: Review complete.  PR pushed.
> 
> Combined Branch/PR for Review/Test
> ==================================
> * Build Comparison results must pass 100% across the full set of PRs before
>  the individual PRs can be pushed in the order listed above.
> * Branch: https://github.com/mdkinney/edk2/tree/TestOnly_Uncrustify_PR_Series
> * PR: https://github.com/tianocore/edk2/pull/2229
>    Status = PASS
> * CompareBuild:
>    Branch: https://github.com/mdkinney/edk2/tree/Bug_3737_3739_ApplyUncrustifyChanges_V5
>    --ref1:        ef9a059cdb15844fe52a49af2bf7d86b9dd3e9bf
>    --ref2:        Bug_3737_3739_ApplyUncrustifyChanges_V5
>    Extra Options: -n 4 --quiet
>    Results: https://github.com/mdkinney/edk2/actions/runs/1521618836
> 	30 VS2019 build comparisons PASS
> 	40 GCC5 build comparisons PASS
>        100% PASS
> 
> The following git log shows the set of patches from --ref1 to --ref 2across
> which there are no differences in any of the OBJ/LIB/DLL/EFI/FFS/FV/FD files.
> 
> --ref2
> b7d4bf0675b7 (HEAD -> Bug_3737_3739_ApplyUncrustifyChanges_V5) UnitTestFrameworkPkg: Apply uncrusitify changes
> 7f03d25f60e7 UefiPayloadPkg: Apply uncrusitify changes    
> 0bfd8d9b5ac9 UefiCpuPkg: Apply uncrusitify changes                                                                                                                                                                        
> e1cd9bfb9dea StandaloneMmPkg: Apply uncrusitify changes                                                                                                                                                                   
> 5da2f65be378 SourceLevelDebugPkg: Apply uncrusitify changes                                                                                                                                                               
> 95b86de07e5d SignedCapsulePkg: Apply uncrusitify changes                                                                                                                                                                  
> fe71d97246c4 ShellPkg: Apply uncrusitify changes                                                                                                                                                                          
> 54c21c952992 SecurityPkg: Apply uncrusitify changes                                                                                                                                                                       
> 187a3785f12b RedfishPkg: Apply uncrusitify changes                                                                                                                                                                        
> 810100002a46 PcAtChipsetPkg: Apply uncrusitify changes                                                                                                                                                                    
> 276a695c0cf2 OvmfPkg: Apply uncrusitify changes                                                                                                                                                                           
> 303c0a91ab07 NetworkPkg: Apply uncrusitify changes                                                                                                                                                                        
> bc80792cd1b1 MdePkg: Apply uncrusitify changes                                                                                                                                                                            
> 3ea86be17a2a MdeModulePkg: Apply uncrusitify changes                                                                                                                                                                      
> c70ef11ed0cd IntelFsp2WrapperPkg: Apply uncrusitify changes                                                                                                                                                               
> c0291221f252 IntelFsp2Pkg: Apply uncrusitify changes                                                                                                                                                                      
> 6a479952a690 FmpDevicePkg: Apply uncrusitify changes                                                                                                                                                                      
> 3a7c05b7070d FatPkg: Apply uncrusitify changes                                                                                                                                                                            
> b789f98c8959 EmulatorPkg: Apply uncrusitify changes                                                                                                                                                                       
> 952d7a1c9220 EmbeddedPkg: Apply uncrusitify changes                                                                                                                                                                       
> a1cc9881bab6 DynamicTablesPkg: Apply uncrusitify changes                                                                                                                                                                  
> 50654dfe5785 CryptoPkg: Apply uncrusitify changes                                                                                                                                                                         
> ed965a02dfa1 ArmVirtPkg: Apply uncrusitify changes                                                                                                                                                                        
> 9744023fbc46 ArmPlatformPkg: Apply uncrusitify changes                                                                                                                                                                    
> 7a1cde5f5bba ArmPkg: Apply uncrusitify changes                                                                                                                                                                            
> 19d17e0913e8 UefiCpuPkg: Change use of EFI_D_* to DEBUG_*                                                                                                                                                                 
> ffa718b4f994 SourceLevelDebugPkg: Change use of EFI_D_* to DEBUG_*                                                                                                                                                        
> b86cb3c5e5b4 ShellPkg: Change use of EFI_D_* to DEBUG_*                                                                                                                                                                   
> c7c42204dc07 SecurityPkg: Change use of EFI_D_* to DEBUG_*                                                                                                                                                                
> 16b8e6f958e4 PcAtChipsetPkg: Change use of EFI_D_* to DEBUG_*                                                                                                                                                             
> 0ac3f8b2dac5 OvmfPkg: Change use of EFI_D_* to DEBUG_*                                                                                                                                                                    
> bc5004b8d294 NetworkPkg: Change use of EFI_D_* to DEBUG_*                                                                                                                                                                 
> 6f671a8e2377 MdePkg: Change use of EFI_D_* to DEBUG_*                                                                                                                                                                     
> a10c610ff9a3 MdeModulePkg: Change use of EFI_D_* to DEBUG_*                                                                                                                                                               
> 09a3bddba390 FatPkg: Change use of EFI_D_* to DEBUG_*                                                                                                                                                                     
> 59c61318246a EmulatorPkg: Change use of EFI_D_* to DEBUG_*                                                                                                                                                                
> 3a80367dda3b EmbeddedPkg: Change use of EFI_D_* to DEBUG_*                                                                                                                                                                
> 23eb1aaf80ca ArmVirtPkg: Change use of EFI_D_* to DEBUG_*                                                                                                                                                                 
> 875914b45c54 ArmPlatformPkg: Change use of EFI_D_* to DEBUG_*                                                                                                                                                             
> eb2eca82b451 ArmPkg: Change use of EFI_D_* to DEBUG_*                                                                                                                                                                     
> f0f3f5aae7c4 (origin/master, origin/HEAD, master) UnitTestFrameworkPkg: Update YAML to ignore specific ECC files/errors                                                                                                   
> c05734797790 UefiPayloadPkg: Update YAML to ignore specific ECC files/errors                                                                                                                                              
> c30c40d6c63d StandaloneMmPkg: Update YAML to ignore specific ECC files/errors                                                                                                                                             
> 9944508e85f1 ShellPkg: Update YAML to ignore specific ECC files/errors                                                                                                                                                    
> 60fa40be458d SecurityPkg: Update YAML to ignore specific ECC files/errors                                                                                                                                                 
> df790cd6b37e MdePkg: Update YAML to ignore specific ECC files/errors                                                                                                                                                      
> 9deb9370766e MdeModulePkg: Update YAML to ignore specific ECC files/errors                                                                                                                                                
> d7d30e8f219f EmulatorPkg: Update YAML to ignore specific ECC files/errors                                                                                                                                                 
> d5744ecba813 CryptoPkg: Update YAML to ignore specific ECC files/errors                                                                                                                                                   
> c97fee87f0f9 ArmVirtPkg: Update YAML to ignore specific ECC files/errors                                                                                                                                                  
> 1939fc9569f2 ArmPlatformPkg: Update YAML to ignore specific ECC files/errors                                                                                                                                              
> 365dced2c37a ArmPkg: Update YAML to ignore specific ECC files/errors                                                                                                                                                      
> 76a1ce4d5fec .azurepipelines/templates: Update max pipeline job time to 2 hours                                                                                                                                           
> 99f84ff47390 .pytools/Plugin/LicenseCheck: Use temp directory for git diff output                                                                                                                                         
> 3019f1bbabf1 .pytool/Plugin/EccCheck: Add performance optimizations                                                                                                                                                       
> 854462bd3479 .pytool/Plugin/EccCheck: Remove temp directory on exception                                                                                                                                                  
> 69877614fdee .pytool/Plugin/EccCheck: Remove RevertCode() 
> --ref1                                                                                                                                                                
> ef9a059cdb15 EmulatorPkg/Win/Host: Update CC_FLAGS                                                                                                                                                                        
> bb1bba3d7767 (tag: edk2-stable202111) NetworkPkg: Fix invalid pointer for DNS response token on error                                                                                                                     
> 
> Best regards,
> 
> Mike
> 
> 
> 
> 
> 
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#84459): https://edk2.groups.io/g/devel/message/84459
Mute This Topic: https://groups.io/mt/87572511/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-






More information about the edk2-devel-archive mailing list