CodingGuidelines: clarify C #include rules
commit412cb2ec1302364aba862b183210249c2ca7d44e
authorJunio C Hamano <gitster@pobox.com>
Thu, 15 Jan 2015 23:20:09 +0000 (15 15:20 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 15 Jan 2015 23:42:50 +0000 (15 15:42 -0800)
tree621eab7ccf12e863a36eb7aca2f573134f982774
parent897f964c0dce8e7cc2cc53bb19b83cadce106773
CodingGuidelines: clarify C #include rules

Even though "advice.h" includes "git-compat-util.h", it is not
sensible to have it as the first #include and indirectly satisify
the "You must give git-compat-util.h a clean environment to set up
feature test macros before including any of the system headers are
included", which is the real requirement.

Because:

 - A command that interacts with the object store, config subsystem,
   the index, or the working tree cannot do anything without using
   what is declared in "cache.h";

 - A built-in command must be declared in "builtin.h", so anything
   in builtin/*.c must include it;

 - These two headers both include "git-compat-util.h" as the first
   thing; and

 - Almost all our *.c files (outside compat/ and borrowed files in
   xdiff/) need some Git-ness from "cache.h" to do something
   Git-ish.

let's explicitly specify that one of these three header files must
be the first thing that is included.

Any of our *.c file should include the header file that directly
declares what it uses, instead of relying on the fact that some *.h
file it includes happens to include another *.h file that declares
the necessary function or type.  Spell it out as another guideline
item.

Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/CodingGuidelines