Good BKM sharing. 

EDKII meta data file has .inf, .dec, *.dsc and *.fdf. What's *.dsc.inc and 
*.fdf.inc? They are the part of DSC and FDF files that included in the full DSC 
and FDF files?

Thanks
Liming
-----Original Message-----
From: Laszlo Ersek [mailto:ler...@redhat.com] 
Sent: Wednesday, June 10, 2015 1:38 AM
To: edk2-devel list
Subject: [edk2] attention git users: a productivity boost for edk2

(Sorry about the sensationalist subject line, I don't have a degree in 
marketing :))

Edk2 uses a large number of text files with *sections*:

[Section.LOL]

I'm sure you've been annoyed quite a few times, while reviewing patches, that 
you couldn't immediately see the section that a hunk modified. (I know I have.) 
We used to have two solutions for this:

- On the reviewer side, apply the patchset and review it patch-wise,
  against the full source code as context.

- On the sender side, generate the patches with a larger context.
  Options are -U<n>, --inter-hunk-context=<lines>, and even
  --function-context. Unfortunately, these don't resolve the question of
  sections reliably (or they produce overkill output).

Turns out git has a trick for this up its sleeve: see gitattributes(5).

(1) Edit your .git/info/attributes file, adding the following lines:

*.dec     diff=ini
*.dsc     diff=ini
*.dsc.inc diff=ini
*.fdf     diff=ini
*.fdf.inc diff=ini
*.inf     diff=ini

(2) in your .git/config, add

[diff "ini"]
        xfuncname = "^\\[[A-Za-z0-9_., ]+]"

I just set these in my edk2 clone, and tested them on my local branch where I 
had applied Ard's series

  [PATCH 0/7] ArmPkg/ArmVirtPkg: GIC revision detection

for review. A good example is patch #4, "ArmPkg: copy ArmGicArchLib to 
ArmGicArchSecLib". Now I can immediately see, in the hunk headers (@@), what 
section each change belongs to.

Here it is (git show output trimmed to relevant files):

> diff --git a/ArmPlatformPkg/ArmPlatformPkg-2ndstage.dsc 
> b/ArmPlatformPkg/ArmPlatformPkg-2ndstage.dsc
> index 0859bc3..6e6687c 100644
> --- a/ArmPlatformPkg/ArmPlatformPkg-2ndstage.dsc
> +++ b/ArmPlatformPkg/ArmPlatformPkg-2ndstage.dsc
> @@ -138,6 +138,7 @@ [LibraryClasses.common.SEC]
>    
> PrePiHobListPointerLib|ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf
>    PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf
>    PlatformPeiLib|ArmPlatformPkg/PlatformPei/PlatformPeiLib.inf
> +  ArmGicArchLib|ArmPkg/Library/ArmGicArchSecLib/ArmGicArchSecLib.inf
>
>  [LibraryClasses.common.SEC, LibraryClasses.common.PEIM]
>    MemoryInitPeiLib|ArmPlatformPkg/MemoryInitPei/MemoryInitPeiLib.inf
> diff --git a/ArmPlatformPkg/ArmPlatformPkg.dsc 
> b/ArmPlatformPkg/ArmPlatformPkg.dsc
> index be31025..14d82f6 100644
> --- a/ArmPlatformPkg/ArmPlatformPkg.dsc
> +++ b/ArmPlatformPkg/ArmPlatformPkg.dsc
> @@ -134,6 +134,8 @@ [LibraryClasses.common.SEC]
>    
> DebugAgentLib|ArmPkg/Library/DebugAgentSymbolsBaseLib/DebugAgentSymbolsBaseLib.inf
>    
> DefaultExceptionHandlerLib|ArmPkg/Library/DefaultExceptionHandlerLib/D
> efaultExceptionHandlerLibBase.inf
>
> +  ArmGicArchLib|ArmPkg/Library/ArmGicArchSecLib/ArmGicArchSecLib.inf
> +
>  [LibraryClasses.common.SEC, LibraryClasses.common.PEIM]
>    MemoryInitPeiLib|ArmPlatformPkg/MemoryInitPei/MemoryInitPeiLib.inf
>
> diff --git a/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb.dsc.inc 
> b/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb.dsc.inc
> index 19de381..4b4867f 100644
> --- a/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb.dsc.inc
> +++ b/ArmPlatformPkg/ArmRealViewEbPkg/ArmRealViewEb.dsc.inc
> @@ -128,6 +128,8 @@ [LibraryClasses.common.SEC]
>    
> PrePiHobListPointerLib|ArmPlatformPkg/Library/PrePiHobListPointerLib/P
> rePiHobListPointerLib.inf
>  !endif
>
> +  ArmGicArchLib|ArmPkg/Library/ArmGicArchSecLib/ArmGicArchSecLib.inf
> +
>  [LibraryClasses.common.SEC, LibraryClasses.common.PEIM]
>    MemoryInitPeiLib|ArmPlatformPkg/MemoryInitPei/MemoryInitPeiLib.inf
>
> diff --git a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress.dsc.inc 
> b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress.dsc.inc
> index 84e2a99..8f7b5f1 100644
> --- a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress.dsc.inc
> +++ b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpress.dsc.inc
> @@ -144,6 +144,8 @@ [LibraryClasses.common.SEC]
>    # Trustzone Support
>    
> ArmTrustedMonitorLib|ArmPlatformPkg/Library/ArmTrustedMonitorLibNull/A
> rmTrustedMonitorLibNull.inf
>
> +  ArmGicArchLib|ArmPkg/Library/ArmGicArchSecLib/ArmGicArchSecLib.inf
> +
>  [LibraryClasses.common.PEI_CORE]
>    HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf
>    PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServicesLib.inf

This git-diff output shows quickly that Ard resolved the library class for SEC 
modules, a fact that was not visible otherwise from the patch itself.

I recommend that all git users working with edk2 apply these settings -- they 
are *very* helpful for reviewers. Personally, I will make this a requirement 
for patches that I'm expected (or asked) to review.

Thanks
Laszlo

------------------------------------------------------------------------------
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

------------------------------------------------------------------------------
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to