From: Junio C Hamano <gitster@pobox.com>
To: git@vger.kernel.org
Cc: Kyle Lippincott <spectral@google.com>,
Calvin Wan <calvinwan@google.com>,
Jonathan Tan <jonathantanmy@google.com>,
Elijah Newren <newren@gmail.com>
Subject: [PATCH] doc: clarify the wording on <git-compat-util.h> requirement
Date: Sat, 24 Feb 2024 12:22:49 -0800 [thread overview]
Message-ID: <xmqq4jdxmx2e.fsf@gitster.g> (raw)
The reason why we insist including the compat-util header as the
very first thing is because it is our mechanism to absorb the
differences across platforms, like the order in which system header
files must be included, and C preprocessor feature macros that are
needed to trigger certain features we want out of the systems, and
insulate other headers and sources from such minutiae.
Earlier we tried to clarify the rule in the coding guidelines
document, but the wording was a bit fuzzy that can lead to
misinterpretations like you can include xdiff/xinclude.h only to
avoid having to include git-compat-util.h file even if you have
nothing to do with xdiff implementation, for example. "You do not
have to include more than one of these" were also misleading and
would have been puzzling if you _needed_ to depend on more than one
of these approved headers (answer: you are allowed to include them
all if you need the declarations in them for reasons other than that
you want to avoid including compat-util yourself).
Instead of using the phrase "approved headers", enumerate them as
exceptions, each labeled with intended audiences, to avoid such
misinterpretations. The structure also makes it easier to add new
exceptions, so add the description of "t/unit-tests/test-lib.h"
being an exception only for the unit tests implementation as an
example.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
* git-std-lib folks CC'ed to show them where to put their exception
when things start to stabilize; Elijah CC'ed for his 8bff5ca0
(treewide: ensure one of the appropriate headers is sourced
first, 2023-02-24) and bc5c5ec0 (cache.h: remove this
no-longer-used header, 2023-05-16).
Documentation/CodingGuidelines | 30 ++++++++++++++++++++++++------
1 file changed, 24 insertions(+), 6 deletions(-)
diff --git c/Documentation/CodingGuidelines w/Documentation/CodingGuidelines
index 578587a471..b3443dd773 100644
--- c/Documentation/CodingGuidelines
+++ w/Documentation/CodingGuidelines
@@ -446,12 +446,30 @@ For C programs:
detail.
- The first #include in C files, except in platform specific compat/
- implementations and sha1dc/, must be either "git-compat-util.h" or
- one of the approved headers that includes it first for you. (The
- approved headers currently include "builtin.h",
- "t/helper/test-tool.h", "xdiff/xinclude.h", or
- "reftable/system.h".) You do not have to include more than one of
- these.
+ implementations and sha1dc/, must be "git-compat-util.h". In
+ addition:
+
+ - the implementation of the built-in commands in the "builtin/"
+ directory that include "builtin.h" for the cmd_foo() prototype
+ definition
+
+ - the test helper programs in the "t/helper/" directory that include
+ "t/helper/test-tool.h" for the cmd__foo() prototype definition
+
+ - the xdiff implementation in the "xdiff/" directory that includes
+ "xdiff/xinclude.h" for the xdiff machinery internals
+
+ - the unit test programs in "t/unit-tests/" directory that include
+ "test-lib.h" that gives them the unit-tests framework
+
+ - the source files that implement reftable in the "reftable/"
+ directory that include "reftable/system.h" for the reftable
+ internals
+
+ are allowed to assume that their header file includes
+ "git-compat-util.h", and they do not have to include
+ "git-compat-util.h" themselves. These headers must be the first
+ header file to be "#include"d in them, though.
- A C file must directly include the header files that declare the
functions and the types it uses, except for the functions and types
next reply other threads:[~2024-02-24 20:22 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-24 20:22 Junio C Hamano [this message]
2024-02-24 22:36 ` [PATCH v2] doc: clarify the wording on <git-compat-util.h> requirement Junio C Hamano
2024-02-26 23:28 ` [PATCH v3] " Junio C Hamano
2024-02-26 23:57 ` Kyle Lippincott
2024-02-27 4:25 ` Elijah Newren
2024-02-27 5:35 ` Junio C Hamano
2024-02-24 22:38 ` [PATCH] " Kyle Lippincott
2024-02-24 22:54 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqq4jdxmx2e.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=calvinwan@google.com \
--cc=git@vger.kernel.org \
--cc=jonathantanmy@google.com \
--cc=newren@gmail.com \
--cc=spectral@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).