Thread (3 messages) 3 messages, 2 authors, 2025-08-27

Re: [PATCH] config: add "hostname" condition to includeIf

From: Eric Sunshine <hidden>
Date: 2025-08-27 20:54:50

On Wed, Aug 27, 2025 at 9:53 AM Ayush Sharma [off-list ref] wrote:
On Fri, Aug 22, 2025 at 2:19 PM monarch [off-list ref] wrote:
quoted
Teach "includeIf" to include configuration based on the machine's hostname,
as returned by gethostname(2).

Example:
    [includeIf "hostname:work-laptop"]
        path = ~/.gitconfig.work
    [includeIf "hostname:home-pc"]
        path = ~/.gitconfig.home

This allows users to write host-specific configuration without separate branches.

Signed-off-by: monarch <redacted>
---
+static int include_by_hostname(const char *cond, size_t cond_len)
+{
+    char actual_hostname[1024];
+    struct strbuf target_hostname = STRBUF_INIT;
+    int ret = 0;
+
+    // Make sure the call to gethostname is correct and its return value is checked.
+    if (gethostname(actual_hostname, sizeof(actual_hostname)) != 0)
+        return 0; // If it fails, the condition is false.
+
+    strbuf_add(&target_hostname, cond, cond_len);
+
+    // The core of the logic: strcmp returns 0 when strings are equal.
+    if (strcmp(actual_hostname, target_hostname.buf) == 0)
+        ret = 1; // Success, the hostnames match!
+
+    strbuf_release(&target_hostname);
+    return ret;
+}
Just a gentle ping to see if there is any feedback on this patch.
You can increase the likelihood of feedback by:

* Studying the related email thread pointed out by Junio in his
response[1] to your initial inquiry, and taking all the open
discussion points into consideration and providing answers for them in
your proposed submission. (For instance, one of the open discussion
points[2] was how a user would know the exact hostname to use with
`includeIf [hostname "..."]`; a solution needs to be provided in order
to move forward with the proposal.)

* Including with your patch the necessary documentation update (so
users will be able to discover this new capability), as well as new
tests.

* Studying Documentation/CodingGuidelines (for instance, this project
uses `/*...*/` comments, not `//`), and
Documentation/SubmittingPatches (for instance, avoid changes, such as
inserting unnecessary blank lines or arbitrarily reformatting code,
unrelated to the purpose of your patch; use your proper name in the
Signed-off-by: footer).

* Consult the Git source code to see whether there is a better way to
obtain the hostname than rolling your own (for instance, don't fall
prey to gethostname() potentially omitting the terminating NUL from
the buffer; instead use xgethostname() from Git's wrapper.c).

[1]: https://lore.kernel.org/git/xmqqqzx8k258.fsf@gitster.g/ (local)
[2]: https://lore.kernel.org/git/CAPig+cT4fpX7Kczu0+H5TZnmpVqqq0h8nBafj4UqDs7Xv2Nf4A@mail.gmail.com/ (local)
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help