git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/9] Add missing includes and forward declares

From
Jeff King <peff@peff.net>
Date
Aug 11, 2018, 17:43 UTC
Message-ID
<20180811174301.GA9287@sigill.intra.peff.net>
In-Reply-To
<20180811043218.31456-2-newren@gmail.com>
On Fri, Aug 10, 2018 at 09:32:10PM -0700, Elijah Newren wrote:
Show 9 quoted lines
> diff --git a/argv-array.h b/argv-array.h
> index a39ba43f57..c46238784c 100644
> --- a/argv-array.h
> +++ b/argv-array.h
> @@ -1,6 +1,8 @@
>  #ifndef ARGV_ARRAY_H
>  #define ARGV_ARRAY_H
>  
> +#include "git-compat-util.h"   /* for LAST_ARG_MUST_BE_NULL */

Following up on what I said in the other message, I think we should omit this. All header files should assume the environment provided by git-compat-util.h is already loaded (and all non-compat C files should make sure they load it first).

Show 9 quoted lines
> diff --git a/color.h b/color.h
> index 5b744e1bc6..74edbffc9d 100644
> --- a/color.h
> +++ b/color.h
> @@ -1,6 +1,8 @@
>  #ifndef COLOR_H
>  #define COLOR_H
>  
> +#include <stdio.h>

This one is more actively wrong than the git-compat-util.h one. Anybody who already included git-compat-util.h would not be helped by this. And anybody who _didn't_ may be hurt, because now git-compat-util.h might run into ordering problems caused by headers already loaded as part of stdio.h (and keep in mind that stdio.h often brings in other system-dependent definitions, too).

Show 9 quoted lines
> diff --git a/bulk-checkin.h b/bulk-checkin.h
> index a85527318b..e036231636 100644
> --- a/bulk-checkin.h
> +++ b/bulk-checkin.h
> @@ -4,6 +4,8 @@
>  #ifndef BULK_CHECKIN_H
>  #define BULK_CHECKIN_H
>  
> +#include "cache.h" /* for object_type */

As I said earlier, I don't mind includes like these that make everybody's lives a little easier, and shouldn't introduce any funny ordering constraints.

IMHO, though, comments like "for X" are probably a bad idea. That may be accurate _now_, but it is very likely to grow stale without anybody noticing. You only care about that "X" if you are thinking about removing the include, and then the right answer is not to trust the comment, but to remove the include and make sure there is no other breakage.

The one exception is if there is some subtlety, like including a header file that uses macros to replace a function, and removing it wouldn't break compilation but produce a different result. But then:

  - I'd hope we don't have anything like that, because it sounds
    horrible ;)
  - you'd probably want a much more explanatory comment
> [...]

The rest of them are all variants on these three (or forward declarations, which I put in the same boat as this third recursive include; i.e., it's a good change).

-Peff
Previous: Elijah NewrenNext: Elijah Newren
Message 6 of 49 in “Add missing includes and forward declares”
  1. 0/9 Add missing includes and forward declaresElijah Newren, Aug 11, 2018
  2. 5/9 compat/precompose_utf8.h: use more common include guard styleElijah Newren, Aug 11, 2018
  3. 3/9 Move definition of enum branch_track from cache.h to branch.hElijah Newren, Aug 11, 2018
  4. 9/9 Add missing includes and forward declaresElijah Newren, Aug 11, 2018
  5. 1/9 Add missing includes and forward declaresElijah Newren, Aug 11, 2018
  6. Jeff KingAug 11, 2018
  7. 4/9 urlmatch.h: fix include guardElijah Newren, Aug 11, 2018
  8. 2/9 alloc: make allocate_alloc_state and clear_alloc_state more consistentElijah Newren, Aug 11, 2018
  9. 6/9 ewah/ewok.h: add missing includeElijah Newren, Aug 11, 2018
  10. 8/9 xdiff/xdiff.h: add missing includeElijah Newren, Aug 11, 2018
  11. 7/9 sha1dc/sha1.h: add missing includeElijah Newren, Aug 11, 2018
  12. Ævar Arnfjörð BjarmasonAug 11, 2018
  13. Elijah NewrenAug 11, 2018
  14. Jeff KingAug 11, 2018
  15. Junio C HamanoAug 13, 2018
  16. Elijah NewrenAug 14, 2018
  17. Junio C HamanoAug 15, 2018
  18. Elijah NewrenAug 15, 2018
  19. Junio C HamanoAug 15, 2018
  20. Elijah NewrenAug 15, 2018
  21. Junio C HamanoAug 15, 2018
  22. Jeff KingAug 15, 2018
  23. Jonathan NiederAug 15, 2018
  24. Jonathan NiederAug 15, 2018
  25. 0/6 Add missing includes and forward declaresElijah Newren, Aug 11, 2018
  26. 6/6 Add missing includes and forward declaresElijah Newren, Aug 11, 2018
  27. 2/6 alloc: make allocate_alloc_state and clear_alloc_state more consistentElijah Newren, Aug 11, 2018
  28. 4/6 urlmatch.h: fix include guardElijah Newren, Aug 11, 2018
  29. 3/6 Move definition of enum branch_track from cache.h to branch.hElijah Newren, Aug 11, 2018
  30. Ramsay JonesAug 11, 2018
  31. 1/6 Add missing includes and forward declaresElijah Newren, Aug 11, 2018
  32. 5/6 compat/precompose_utf8.h: use more common include guard styleElijah Newren, Aug 11, 2018
  33. 0/6 Add missing includes and forward declaresElijah Newren, Aug 13, 2018
  34. 4/6 urlmatch.h: fix include guardElijah Newren, Aug 13, 2018
  35. Jonathan NiederAug 15, 2018
  36. 3/6 Move definition of enum branch_track from cache.h to branch.hElijah Newren, Aug 13, 2018
  37. Jonathan NiederAug 15, 2018
  38. 5/6 compat/precompose_utf8.h: use more common include guard styleElijah Newren, Aug 13, 2018
  39. Jonathan NiederAug 15, 2018
  40. 2/6 alloc: make allocate_alloc_state and clear_alloc_state more consistentElijah Newren, Aug 13, 2018
  41. Jonathan NiederAug 15, 2018
  42. 6/6 Add missing includes and forward declaresElijah Newren, Aug 13, 2018
  43. Jonathan NiederAug 15, 2018
  44. 1/6 Add missing includes and forward declaresElijah Newren, Aug 13, 2018
  45. Jonathan NiederAug 15, 2018
  46. Elijah NewrenAug 15, 2018
  47. Jonathan NiederAug 15, 2018
  48. Elijah NewrenAug 15, 2018
  49. Elijah NewrenAug 15, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.