summaryrefslogtreecommitdiffstats
path: root/BaseTools/Conf/gitattributes
diff options
context:
space:
mode:
authorLaszlo Ersek <lersek@redhat.com>2020-01-16 19:24:34 +0100
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2020-01-31 16:13:06 +0000
commiteafd990f2606431d45cf0bbdbfee6d5959628de7 (patch)
tree2a868a50990c6f36bfca77fc3bc4b93005a52c8d /BaseTools/Conf/gitattributes
parent8b0932c19f31cbf9da26d3b8d4e8d954bdbb5269 (diff)
downloadedk2-eafd990f2606431d45cf0bbdbfee6d5959628de7.tar.gz
edk2-eafd990f2606431d45cf0bbdbfee6d5959628de7.tar.bz2
edk2-eafd990f2606431d45cf0bbdbfee6d5959628de7.zip
BaseTools/Conf/gitattributes: fix "--function-context" for C source code
The "--function-context" ("-W") option of git-diff displays the entire body of a modified function, not just small modified hunks within the function. It is useful for reviewers when the code changes to the function are small, but they could affect, or depend on, control flow that is far away in the same function. Of course, the size of the displayed context can be controlled with the "-U" option anyway, but such fixed-size contexts are usually either too small, or too large, in the above scenario. It turns out that "--function-context" does not work correctly for C source files in edk2. In particular, labels for the goto instruction (which the edk2 coding style places in the leftmost column) appear to terminate "--function-context". The "git" utility contains built-in hunk header patterns for the C and C++ languages. However, they do not take effect in edk2 because we don't explicitly assign the "cpp" git-diff driver to our C files. The gitattributes(5) manual explains that this is required: > There are a few built-in patterns to make this easier, and > tex is one of them, so you do not have to write the above in > your configuration file (you still need to enable this with > the attribute mechanism, via .gitattributes). The following > built in patterns are available: > > [...] > > * cpp suitable for source code in the C and C++ > languages. The key statement is the one in parentheses. Grab the suffix lists from the [C-Code-File] and [Acpi-Table-Code-File] sections of "BaseTools/Conf/build_rule.template", add "*.h" and "*.H", and mark those as belonging to the "cpp" git-diff driver. This change has a dramatic effect on the following command, for example: $ git show -W 2ef0c27cb84c Cc: Bob Feng <bob.c.feng@intel.com> Cc: Leif Lindholm <leif.lindholm@linaro.org> Cc: Liming Gao <liming.gao@intel.com> Signed-off-by: Laszlo Ersek <lersek@redhat.com> Message-Id: <20200120094245.9010-1-lersek@redhat.com> Reviewed-by: Leif Lindholm <leif@nuviainc.com> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org> Reviewed-by: Liming Gao <liming.gao@intel.com>
Diffstat (limited to 'BaseTools/Conf/gitattributes')
-rw-r--r--BaseTools/Conf/gitattributes11
1 files changed, 11 insertions, 0 deletions
diff --git a/BaseTools/Conf/gitattributes b/BaseTools/Conf/gitattributes
index 58b93e9d4c..319e890641 100644
--- a/BaseTools/Conf/gitattributes
+++ b/BaseTools/Conf/gitattributes
@@ -17,3 +17,14 @@
*.fdf diff=ini
*.fdf.inc diff=ini
*.inf diff=ini
+*.c diff=cpp
+*.C diff=cpp
+*.cc diff=cpp
+*.CC diff=cpp
+*.cpp diff=cpp
+*.Cpp diff=cpp
+*.CPP diff=cpp
+*.aslc diff=cpp
+*.act diff=cpp
+*.h diff=cpp
+*.H diff=cpp