From: Patrick Steinhardt <ps@pks.im>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 6/6] reftable: introduce "reftable-system.h" header
Date: Thu, 2 Apr 2026 08:16:00 +0200 [thread overview]
Message-ID: <ac4JoLv7SUiedzm9@pks.im> (raw)
In-Reply-To: <xmqqse9ewsaw.fsf@gitster.g>
On Wed, Apr 01, 2026 at 09:37:11AM -0700, Junio C Hamano wrote:
> Patrick Steinhardt <ps@pks.im> writes:
>
> > It overall is a tiny bit confusing, agreed. The reftable interfaces are
> > split into two parts:
> >
> > - "reftable/foo.h" contains the library-internal API surface.
> >
> > - "reftable/reftable-foo.h" contains the external API surface as it
> > should be consumed by the project that embeds the reftable library.
> >
> > Now for most of the part, headers in the "reftable/reftable-*.h"
> > namespace are self-contained. But naturally, we also use some types
> > there that require us to include headers, like `uint32_t` et al.
> > The requirements that we have here are significantly smaller though than
> > what we expose via "reftable/system.h".
> >
> > So ultimately, the idea was to have "reftable/reftable-system.h" expose
> > the POSIX-like environment that is project-specific to make the other
> > public headers compile as standalone units. And then have the
> > implementeation sit in "reftable/system.c". But I agree that
> > "reftable/system.h" itself still sits somewhere in between of being
> > platform specific and containing project-specific stuff, which isn't
> > great.
> >
> > I'm overall not a 100% happy myself with the split and agree that it's
> > somewhat confusing. An alternative would be to say that it's the
> > caller's responsibility to ensure that our public-facing headers have
> > all dependencies satisfied, which I think is in practice only <stdint.h>.
> >
> > I'm very open to alternative suggestions though.
>
> So your assessment starts as "tiny bit" and in the end ends ujp with
> "somewhat" confusing ;-)?
>
> I am OK with two level:
>
> - A C source file that will be customized for platform and the
> project that embeds the library to implement a neutral interface.
>
> - A C header file that defines what that neutral interface looks
> like, without having any platform/project specific implementation
> details.
>
> But that header file, in order to define an interface in a neutral
> way, would need to be able to see common types and things like
> "inline", so it is inevitable to have the third thing that is a
> header file that will be customzed for platform and the project that
> embeds the library.
>
> And in that context making reftable/system.c in this series the C
> source that implements the neutral API for the platform and the
> project, reftable/system.h the C header that declares the neutral
> API, and reftable-system.h the platform specific shim to show a
> common definition to reftable/system.h, may be a good division of
> labor. So, while I found the _naming_ confusing initially, at least
> between reftable/system.[ch], I no longer see the naming of the
> files a problem.
>
> The division of labor is not quite honored in the current
> implementation, though, as I pointed out that just like MINGW
> specific things that are moved out of reftable/system.h and to the
> reftable-system.h, other things like inline and compat/zlib-compat.h
> are quite specific to our project and belong to reftable-system.h at
> the layer that exposes a certain system services to reftable/system.h
> and other "more common" parts of the library.
Makes sense, thanks for your input! Will send a new version soonish.
Patrick
next prev parent reply other threads:[~2026-04-02 6:16 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-31 11:26 [PATCH 0/6] reftable: some more portability improvements Patrick Steinhardt
2026-03-31 11:26 ` [PATCH 1/6] reftable/system: provide `REFTABLE_INLINE()` macro Patrick Steinhardt
2026-03-31 18:03 ` Junio C Hamano
2026-03-31 21:12 ` René Scharfe
2026-03-31 21:23 ` Junio C Hamano
2026-03-31 22:15 ` René Scharfe
2026-03-31 22:08 ` brian m. carlson
2026-04-01 12:13 ` Patrick Steinhardt
2026-03-31 11:26 ` [PATCH 2/6] reftable/stack: don't call fsync(3p) unless provided Patrick Steinhardt
2026-03-31 18:09 ` Junio C Hamano
2026-04-01 12:13 ` Patrick Steinhardt
2026-03-31 11:26 ` [PATCH 3/6] reftable/fsck: use REFTABLE_UNUSED instead of UNUSED Patrick Steinhardt
2026-03-31 18:12 ` Junio C Hamano
2026-03-31 11:26 ` [PATCH 4/6] reftable/system: add abstraction to retrieve time in milliseconds Patrick Steinhardt
2026-03-31 11:26 ` [PATCH 5/6] reftable/system: add abstraction to mmap files Patrick Steinhardt
2026-03-31 11:26 ` [PATCH 6/6] reftable: introduce "reftable-system.h" header Patrick Steinhardt
2026-03-31 18:26 ` Junio C Hamano
2026-04-01 12:14 ` Patrick Steinhardt
2026-04-01 16:37 ` Junio C Hamano
2026-04-02 6:16 ` Patrick Steinhardt [this message]
2026-04-02 7:31 ` [PATCH v2 0/5] reftable: some more portability improvements Patrick Steinhardt
2026-04-02 7:31 ` [PATCH v2 1/5] reftable: introduce "reftable-system.h" header Patrick Steinhardt
2026-04-02 7:31 ` [PATCH v2 2/5] reftable/stack: provide fsync(3p) via system header Patrick Steinhardt
2026-04-02 18:03 ` Junio C Hamano
2026-04-02 7:31 ` [PATCH v2 3/5] reftable/fsck: use REFTABLE_UNUSED instead of UNUSED Patrick Steinhardt
2026-04-02 7:31 ` [PATCH v2 4/5] reftable/system: add abstraction to retrieve time in milliseconds Patrick Steinhardt
2026-04-02 18:27 ` Junio C Hamano
2026-04-02 7:31 ` [PATCH v2 5/5] reftable/system: add abstraction to mmap files Patrick Steinhardt
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=ac4JoLv7SUiedzm9@pks.im \
--to=ps@pks.im \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.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