Skip to content

Commit 41a841e

Browse files
committed
gvfs: allow overriding core.gvfs
We found a user who had set "core.gvfs = false" in their global config. This should not have been necessary, but it also should not have caused a problem. However, it did. The reason is that gvfs_load_config_value() is called from config.c when reading config key/value pairs from all the config files. The local config should override the global config, and this is done by config.c reading the global config first then reading the local config. However, our logic only allowed writing the core_gvfs variable once. Put the guards against multiple assignments of core_gvfs into gvfs_config_is_set() instead, because that will fix the problem _and_ keep multiple calls to gvfs_config_is_set() from slowing down. Signed-off-by: Derrick Stolee <[email protected]>
1 parent babf5e7 commit 41a841e

File tree

2 files changed

+8
-6
lines changed

2 files changed

+8
-6
lines changed

gvfs.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@ static int early_core_gvfs_config(const char *var, const char *value, void *data
1414

1515
void gvfs_load_config_value(const char *value)
1616
{
17-
if (gvfs_config_loaded)
18-
return;
19-
2017
if (value)
2118
core_gvfs = git_config_bool_or_int("core.gvfs", value, &core_gvfs_is_bool);
2219
else if (startup_info->have_repository == 0)
@@ -27,12 +24,13 @@ void gvfs_load_config_value(const char *value)
2724
/* Turn on all bits if a bool was set in the settings */
2825
if (core_gvfs_is_bool && core_gvfs)
2926
core_gvfs = -1;
30-
31-
gvfs_config_loaded = 1;
3227
}
3328

3429
int gvfs_config_is_set(int mask)
3530
{
36-
gvfs_load_config_value(NULL);
31+
if (!gvfs_config_loaded)
32+
gvfs_load_config_value(NULL);
33+
34+
gvfs_config_loaded = 1;
3735
return (core_gvfs & mask) == mask;
3836
}

t/t0021-conversion.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,10 @@ test_expect_success "filter: smudge filters blocked when under GVFS" '
351351
test_config filter.empty-in-repo.smudge "echo smudged && cat" &&
352352
test_config core.gvfs 64 &&
353353
354+
test_must_fail git checkout &&
355+
356+
# ensure the local core.gvfs setting overwrites the global setting
357+
git config --global core.gvfs false &&
354358
test_must_fail git checkout
355359
'
356360

0 commit comments

Comments
 (0)