Hi, Just a gentle ping to see if there is any feedback on this patch. Thanks, Ayush Sharma On Fri, Aug 22, 2025 at 2:19 PM monarch <ayushoffinfo17@xxxxxxxxx> wrote: > > 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 <ayushoffinfo17@xxxxxxxxx> > --- > config.c | 37 +++++++++++++++++++++++++++++++------ > 1 file changed, 31 insertions(+), 6 deletions(-) > > diff --git a/config.c b/config.c > index e0ff35d426..dbc1a2bc75 100644 > --- a/config.c > +++ b/config.c > @@ -7,6 +7,7 @@ > */ > > #include "git-compat-util.h" > +#include <unistd.h> > #include "abspath.h" > #include "date.h" > #include "branch.h" > @@ -391,23 +392,47 @@ static int include_by_remote_url(struct config_include_data *inc, > inc->remote_urls); > } > > +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; > +} > + > static int include_condition_is_true(const struct key_value_info *kvi, > - struct config_include_data *inc, > - const char *cond, size_t cond_len) > + struct config_include_data *inc, > + const char *cond, size_t cond_len) > { > - const struct config_options *opts = inc->opts; > +const struct config_options *opts = inc->opts; > + > + > > if (skip_prefix_mem(cond, cond_len, "gitdir:", &cond, &cond_len)) > return include_by_gitdir(kvi, opts, cond, cond_len, 0); > else if (skip_prefix_mem(cond, cond_len, "gitdir/i:", &cond, &cond_len)) > return include_by_gitdir(kvi, opts, cond, cond_len, 1); > - else if (skip_prefix_mem(cond, cond_len, "onbranch:", &cond, &cond_len)) > + else if (skip_prefix_mem(cond, cond_len, "onbranch:", &cond, cond_len)) > return include_by_branch(inc, cond, cond_len); > else if (skip_prefix_mem(cond, cond_len, "hasconfig:remote.*.url:", &cond, > - &cond_len)) > + &cond_len)) > return include_by_remote_url(inc, cond, cond_len); > + else if (skip_prefix_mem(cond, cond_len, "hostname:", &cond, &cond_len)) > + return include_by_hostname(cond, cond_len); > > - /* unknown conditionals are always false */ > +/* unknown conditionals are always false */ > return 0; > } > > -- > 2.43.0 >