Skip to content

Commit

Permalink
gvfs: refactor loading the core.gvfs config value
Browse files Browse the repository at this point in the history
This code change makes sure that the config value for core_gvfs
is always loaded before checking it.

Signed-off-by: Kevin Willford <kewillf@microsoft.com>
  • Loading branch information
Kevin Willford authored and dscho committed Aug 11, 2023
1 parent 8809b24 commit 205770b
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 29 deletions.
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -1042,6 +1042,7 @@ LIB_OBJS += git-zlib.o
LIB_OBJS += gpg-interface.o
LIB_OBJS += graph.o
LIB_OBJS += grep.o
LIB_OBJS += gvfs.o
LIB_OBJS += hash-lookup.o
LIB_OBJS += hashmap.o
LIB_OBJS += help.o
Expand Down
44 changes: 44 additions & 0 deletions gvfs.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#include "git-compat-util.h"
#include "environment.h"
#include "gvfs.h"
#include "setup.h"
#include "config.h"

static int gvfs_config_loaded;
static int core_gvfs_is_bool;

static int early_core_gvfs_config(const char *var, const char *value,
const struct config_context *ctx, void *cb)
{
if (!strcmp(var, "core.gvfs"))
core_gvfs = git_config_bool_or_int("core.gvfs", value, ctx->kvi,
&core_gvfs_is_bool);
return 0;
}

void gvfs_load_config_value(const char *value)
{
if (gvfs_config_loaded)
return;

if (value) {
struct key_value_info default_kvi = KVI_INIT;
core_gvfs = git_config_bool_or_int("core.gvfs", value, &default_kvi, &core_gvfs_is_bool);
} else if (startup_info->have_repository == 0)
read_early_config(early_core_gvfs_config, NULL);
else
repo_config_get_bool_or_int(the_repository, "core.gvfs",
&core_gvfs_is_bool, &core_gvfs);

/* Turn on all bits if a bool was set in the settings */
if (core_gvfs_is_bool && core_gvfs)
core_gvfs = -1;

gvfs_config_loaded = 1;
}

int gvfs_config_is_set(int mask)
{
gvfs_load_config_value(NULL);
return (core_gvfs & mask) == mask;
}
31 changes: 2 additions & 29 deletions gvfs.h
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
#ifndef GVFS_H
#define GVFS_H

#include "environment.h"
#include "config.h"

/*
* This file is for the specific settings and methods
Expand All @@ -19,32 +17,7 @@
#define GVFS_FETCH_SKIP_REACHABILITY_AND_UPLOADPACK (1 << 4)
#define GVFS_BLOCK_FILTERS_AND_EOL_CONVERSIONS (1 << 6)

static inline int gvfs_config_is_set(int mask) {
return (core_gvfs & mask) == mask;
}

static inline int gvfs_config_is_set_any(void) {
return core_gvfs > 0;
}

static inline void gvfs_load_config_value(const char *value) {
int is_bool = 0;

if (value)
core_gvfs = git_config_bool_or_int("core.gvfs", value, &is_bool);
else
git_config_get_bool_or_int("core.gvfs", &is_bool, &core_gvfs);

/* Turn on all bits if a bool was set in the settings */
if (is_bool && core_gvfs)
core_gvfs = -1;
}


static inline int gvfs_config_load_and_is_set(int mask) {
gvfs_load_config_value(0);
return gvfs_config_is_set(mask);
}

void gvfs_load_config_value(const char *value);
int gvfs_config_is_set(int mask);

#endif /* GVFS_H */

0 comments on commit 205770b

Please sign in to comment.