git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Elijah Newren <newren@gmail.com>
To: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Cc: Elijah Newren via GitGitGadget <gitgitgadget@gmail.com>,
	git@vger.kernel.org, Calvin Wan <calvinwan@google.com>,
	Derrick Stolee <derrickstolee@github.com>,
	Glen Choo <chooglen@google.com>
Subject: Re: [PATCH v2 20/22] object-store.h: reduce unnecessary includes
Date: Mon, 1 May 2023 19:28:00 -0700	[thread overview]
Message-ID: <CABPp-BF42SuEObGqcVH0oQLYscrwoScg0TLuQRY7ZnNAhYTV8w@mail.gmail.com> (raw)
In-Reply-To: <230501.86ildcht9c.gmgdl@evledraar.gmail.com>

On Mon, May 1, 2023 at 10:10 AM Ævar Arnfjörð Bjarmason
<avarab@gmail.com> wrote:
>
> On Sat, Apr 22 2023, Elijah Newren via GitGitGadget wrote:
>
> > From: Elijah Newren <newren@gmail.com>
> >
> > Signed-off-by: Elijah Newren <newren@gmail.com>
> > ---
> >  object-file.c      | 1 +
> >  object-name.c      | 1 +
> >  object-store.h     | 8 ++++----
> >  submodule-config.c | 1 +
> >  4 files changed, 7 insertions(+), 4 deletions(-)
> >
> > diff --git a/object-file.c b/object-file.c
> > index 8e0df7360ae..921a717d8a5 100644
> > --- a/object-file.c
> > +++ b/object-file.c
> > @@ -38,6 +38,7 @@
> >  #include "packfile.h"
> >  #include "object-file.h"
> >  #include "object-store.h"
> > +#include "oidtree.h"
> >  #include "promisor-remote.h"
> >  #include "setup.h"
> >  #include "submodule.h"
> > diff --git a/object-name.c b/object-name.c
> > index 5ccbe854b60..88d839f70bc 100644
> > --- a/object-name.c
> > +++ b/object-name.c
> > @@ -14,6 +14,7 @@
> >  #include "remote.h"
> >  #include "dir.h"
> >  #include "oid-array.h"
> > +#include "oidtree.h"
> >  #include "packfile.h"
> >  #include "pretty.h"
> >  #include "object-store.h"
> > diff --git a/object-store.h b/object-store.h
> > index f9d225783ae..23ea86d3702 100644
> > --- a/object-store.h
> > +++ b/object-store.h
> > @@ -2,16 +2,16 @@
> >  #define OBJECT_STORE_H
> >
> >  #include "object.h"
> > -#include "oidmap.h"
> >  #include "list.h"
> > -#include "oid-array.h"
>
> It seems to me that this should be split up, there does seem to be an
> unnecessary include here, as the subject claims, at least the
> "oid-array.h include in object-store.h seems to qualify.
>
> Maybe the same applies to thread-utils.h below?

Removing the thread-utils.h inclusion from object-store.h will break
compilation on non-linux platforms; that header is needed for the
definition of pthread_mutex_t used later in the file.

> > -#include "strbuf.h"
> >  #include "thread-utils.h"
> >  #include "khash.h"
> >  #include "dir.h"
> > -#include "oidtree.h"
> >  #include "oidset.h"
> >
> > +struct oidmap;
> > +struct oidtree;
> > +struct strbuf;
>
> But as this shows at least three of these weren't unnecessary, you're
> just replacing them with forward-decls.

Something was necessary, yes, but an #include statement certainly
wasn't.  Here, nothing would need to be recompiled if those other
headers changed, so the include is unnecessary.

> I think that's probably sensible, but I think it should at least be
> discussed.

We have now discussed it.  :-)

Did you want a simple call-out in the commit message, e.g. "Replace
the includes with simple forward declarations of the relevant
structs." ?

> It's also not clear why we want to just stop at forward-declaring
> structs, maybe replacing the dir.h include with:
>
>         int fspatheq(const char *a, const char *b);
>         unsigned int fspathhash(const char *str);

I don't like the idea of having to update function signatures in 3 or
more places when we need to make changes.  In contrast, forward
declarations of structs aren't susceptible to the same need to
update while making other changes.

We have hundreds of forward declarations of structs in the code;
everyone seems to be fine with them.

Whenever we've had duplicate declarations of functions, it's been
treated as a code smell that we've gotten rid of when possible.  In
fact, in v2.40.0, by my search we only had two of these --
xdl_emit_diff() and read_in_full().  And we've since gotten rid of one
of those (namely, read_in_full()).

> Would be too verbose, but if we did that we'd spot that
> e.g. match-trees.c is relying on this header to get its "struct strbuf"
> definition.
>
> I'm perfectly fine to leave that can of worms for some later date
> though...

That's a good find; I also found it separately later in some follow-on
patches so I'll also vote for leaving that can of worms for a later
date.  :-)


And thanks for carefully reading through this series!

  reply	other threads:[~2023-05-02  2:28 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-16  3:03 [PATCH 00/23] Header cleanups (more splitting of cache.h and simplifying a few other deps) Elijah Newren via GitGitGadget
2023-04-16  3:03 ` [PATCH 01/23] treewide: be explicit about dependence on strbuf.h Elijah Newren via GitGitGadget
2023-04-16  3:03 ` [PATCH 02/23] symlinks.h: move declarations for symlinks.c functions from cache.h Elijah Newren via GitGitGadget
2023-04-16  3:03 ` [PATCH 03/23] protocol.h: move definition of DEFAULT_GIT_PORT " Elijah Newren via GitGitGadget
2023-04-16  3:03 ` [PATCH 04/23] packfile.h: move pack_window and pack_entry " Elijah Newren via GitGitGadget
2023-04-16  3:03 ` [PATCH 05/23] server-info.h: move declarations for server-info.c functions " Elijah Newren via GitGitGadget
2023-04-16  3:03 ` [PATCH 06/23] copy.h: move declarations for copy.c " Elijah Newren via GitGitGadget
2023-04-16  3:03 ` [PATCH 07/23] base85.h: move declarations for base85.c " Elijah Newren via GitGitGadget
2023-04-16  3:03 ` [PATCH 08/23] pkt-line.h: move declarations for pkt-line.c " Elijah Newren via GitGitGadget
2023-04-16  3:03 ` [PATCH 09/23] match-trees.h: move declarations for match-trees.c " Elijah Newren via GitGitGadget
2023-04-16  3:03 ` [PATCH 10/23] ws.h: move declarations for ws.c " Elijah Newren via GitGitGadget
2023-04-16  3:03 ` [PATCH 11/23] versioncmp.h: move declarations for versioncmp.c " Elijah Newren via GitGitGadget
2023-04-16  3:03 ` [PATCH 12/23] dir.h: move DTYPE defines " Elijah Newren via GitGitGadget
2023-04-16  3:03 ` [PATCH 13/23] tree-diff.c: move S_DIFFTREE_IFXMIN_NEQ define " Elijah Newren via GitGitGadget
2023-04-16  3:03 ` [PATCH 14/23] hash.h, repository.h: reverse the order of these dependencies Elijah Newren via GitGitGadget
2023-04-17 20:59   ` Derrick Stolee
2023-04-18  2:36     ` Elijah Newren
2023-04-18 23:29     ` Junio C Hamano
2023-04-20  5:06       ` Elijah Newren
2023-04-20 13:14         ` Derrick Stolee
2023-04-20 15:54           ` Junio C Hamano
2023-04-20 19:54             ` Glen Choo
2023-04-16  3:03 ` [PATCH 15/23] cache,tree: move cmp_cache_name_compare from tree.[ch] to read-cache.c Elijah Newren via GitGitGadget
2023-04-16  3:03 ` [PATCH 16/23] cache,tree: move basic name compare functions from read-cache to tree Elijah Newren via GitGitGadget
2023-04-16  3:03 ` [PATCH 17/23] treewide: remove cache.h inclusion due to previous changes Elijah Newren via GitGitGadget
2023-04-16  3:03 ` [PATCH 18/23] cache.h: remove unnecessary headers Elijah Newren via GitGitGadget
2023-04-16  3:03 ` [PATCH 19/23] fsmonitor: reduce includes of cache.h Elijah Newren via GitGitGadget
2023-04-16  3:03 ` [PATCH 20/23] commit.h: reduce unnecessary includes Elijah Newren via GitGitGadget
2023-04-16  3:03 ` [PATCH 21/23] object-store.h: " Elijah Newren via GitGitGadget
2023-04-16  3:03 ` [PATCH 22/23] diff.h: " Elijah Newren via GitGitGadget
2023-04-16  3:03 ` [PATCH 23/23] reftable: ensure git-compat-util.h is the first (indirect) include Elijah Newren via GitGitGadget
2023-04-17 21:07 ` [PATCH 00/23] Header cleanups (more splitting of cache.h and simplifying a few other deps) Derrick Stolee
2023-04-18  2:41   ` Elijah Newren
2023-04-22 20:17 ` [PATCH v2 00/22] " Elijah Newren via GitGitGadget
2023-04-22 20:17   ` [PATCH v2 01/22] treewide: be explicit about dependence on strbuf.h Elijah Newren via GitGitGadget
2023-04-22 20:17   ` [PATCH v2 02/22] symlinks.h: move declarations for symlinks.c functions from cache.h Elijah Newren via GitGitGadget
2023-04-22 20:17   ` [PATCH v2 03/22] packfile.h: move pack_window and pack_entry " Elijah Newren via GitGitGadget
2023-04-22 20:17   ` [PATCH v2 04/22] server-info.h: move declarations for server-info.c functions " Elijah Newren via GitGitGadget
2023-04-22 20:17   ` [PATCH v2 05/22] copy.h: move declarations for copy.c " Elijah Newren via GitGitGadget
2023-04-22 20:17   ` [PATCH v2 06/22] base85.h: move declarations for base85.c " Elijah Newren via GitGitGadget
2023-04-22 20:17   ` [PATCH v2 07/22] pkt-line.h: move declarations for pkt-line.c " Elijah Newren via GitGitGadget
2023-04-22 20:17   ` [PATCH v2 08/22] match-trees.h: move declarations for match-trees.c " Elijah Newren via GitGitGadget
2023-04-22 20:17   ` [PATCH v2 09/22] ws.h: move declarations for ws.c " Elijah Newren via GitGitGadget
2023-04-22 20:17   ` [PATCH v2 10/22] versioncmp.h: move declarations for versioncmp.c " Elijah Newren via GitGitGadget
2023-04-22 20:17   ` [PATCH v2 11/22] dir.h: move DTYPE defines " Elijah Newren via GitGitGadget
2023-04-22 20:17   ` [PATCH v2 12/22] tree-diff.c: move S_DIFFTREE_IFXMIN_NEQ define " Elijah Newren via GitGitGadget
2023-05-01 16:33     ` Ævar Arnfjörð Bjarmason
2023-05-01 16:46       ` Junio C Hamano
2023-05-02  1:06       ` Elijah Newren
2023-05-02  5:00         ` Elijah Newren
2023-05-02 15:56           ` Junio C Hamano
2023-05-02 15:59             ` Elijah Newren
2023-04-22 20:17   ` [PATCH v2 13/22] hash-ll.h: split out of hash.h to remove dependency on repository.h Elijah Newren via GitGitGadget
2023-04-24 18:51     ` Glen Choo
2023-04-26  3:54       ` Elijah Newren
2023-04-26 17:50         ` Glen Choo
2023-04-24 19:52     ` Junio C Hamano
2023-05-01 17:17     ` Ævar Arnfjörð Bjarmason
2023-05-02  2:53       ` Elijah Newren
2023-04-22 20:17   ` [PATCH v2 14/22] cache,tree: move cmp_cache_name_compare from tree.[ch] to read-cache.c Elijah Newren via GitGitGadget
2023-04-22 20:17   ` [PATCH v2 15/22] cache,tree: move basic name compare functions from read-cache to tree Elijah Newren via GitGitGadget
2023-04-22 20:17   ` [PATCH v2 16/22] treewide: remove cache.h inclusion due to previous changes Elijah Newren via GitGitGadget
2023-05-01 16:44     ` Ævar Arnfjörð Bjarmason
2023-05-02  1:25       ` Elijah Newren
2023-04-22 20:17   ` [PATCH v2 17/22] cache.h: remove unnecessary headers Elijah Newren via GitGitGadget
2023-05-01 16:49     ` Ævar Arnfjörð Bjarmason
2023-05-02  1:43       ` Elijah Newren
2023-04-22 20:17   ` [PATCH v2 18/22] fsmonitor: reduce includes of cache.h Elijah Newren via GitGitGadget
2023-04-22 20:17   ` [PATCH v2 19/22] commit.h: reduce unnecessary includes Elijah Newren via GitGitGadget
2023-05-01 16:52     ` Ævar Arnfjörð Bjarmason
2023-05-02  1:53       ` Elijah Newren
2023-04-22 20:17   ` [PATCH v2 20/22] object-store.h: " Elijah Newren via GitGitGadget
2023-05-01 17:00     ` Ævar Arnfjörð Bjarmason
2023-05-02  2:28       ` Elijah Newren [this message]
2023-04-22 20:17   ` [PATCH v2 21/22] diff.h: " Elijah Newren via GitGitGadget
2023-05-01 17:11     ` Ævar Arnfjörð Bjarmason
2023-04-22 20:17   ` [PATCH v2 22/22] reftable: ensure git-compat-util.h is the first (indirect) include Elijah Newren via GitGitGadget
2023-04-24 15:19   ` [PATCH v2 00/22] Header cleanups (more splitting of cache.h and simplifying a few other deps) Derrick Stolee
2023-04-24 19:49   ` Junio C Hamano
2023-04-26 17:54   ` Glen Choo
2023-04-26 18:14     ` 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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CABPp-BF42SuEObGqcVH0oQLYscrwoScg0TLuQRY7ZnNAhYTV8w@mail.gmail.com \
    --to=newren@gmail.com \
    --cc=avarab@gmail.com \
    --cc=calvinwan@google.com \
    --cc=chooglen@google.com \
    --cc=derrickstolee@github.com \
    --cc=git@vger.kernel.org \
    --cc=gitgitgadget@gmail.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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).