diff options
authorJohannes Schindelin <>2018-10-30 18:40:04 (GMT)
committerJunio C Hamano <>2018-10-31 03:46:21 (GMT)
commit70fc5793dfdf8ba8586ca130674f6896eb3eb37a (patch)
parent409670f34ed5a2bc4f508f3aee9f809922b339dc (diff)
config: allow for platform-specific core.* config settings
In the Git for Windows project, we have ample precendent for config settings that apply to Windows, and to Windows only. Let's formalize this concept by introducing a platform_core_config() function that can be #define'd in a platform-specific manner. This will allow us to contain platform-specific code better, as the corresponding variables no longer need to be exported so that they can be defined in environment.c and be set in config.c Signed-off-by: Johannes Schindelin <> Signed-off-by: Junio C Hamano <>
4 files changed, 19 insertions, 3 deletions
diff --git a/compat/mingw.c b/compat/mingw.c
index 81ef242..293f286 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -203,6 +203,11 @@ static int ask_yes_no_if_possible(const char *format, ...)
+int mingw_core_config(const char *var, const char *value, void *cb)
+ return 0;
/* Normalizes NT paths as returned by some low-level APIs. */
static wchar_t *normalize_ntpath(wchar_t *wbuf)
diff --git a/compat/mingw.h b/compat/mingw.h
index f31dcff..e9d2b9c 100644
--- a/compat/mingw.h
+++ b/compat/mingw.h
@@ -11,6 +11,9 @@ typedef _sigset_t sigset_t;
+extern int mingw_core_config(const char *var, const char *value, void *cb);
+#define platform_core_config mingw_core_config
* things that are not available in header files
diff --git a/config.c b/config.c
index 3687c67..646b6cc 100644
--- a/config.c
+++ b/config.c
@@ -1093,7 +1093,7 @@ int git_config_color(char *dest, const char *var, const char *value)
return 0;
-static int git_default_core_config(const char *var, const char *value)
+static int git_default_core_config(const char *var, const char *value, void *cb)
/* This needs a better name */
if (!strcmp(var, "core.filemode")) {
@@ -1363,7 +1363,7 @@ static int git_default_core_config(const char *var, const char *value)
/* Add other config variables here and to Documentation/config.txt. */
- return 0;
+ return platform_core_config(var, value, cb);
static int git_default_i18n_config(const char *var, const char *value)
@@ -1451,7 +1451,7 @@ static int git_default_mailmap_config(const char *var, const char *value)
int git_default_config(const char *var, const char *value, void *cb)
if (starts_with(var, "core."))
- return git_default_core_config(var, value);
+ return git_default_core_config(var, value, cb);
if (starts_with(var, "user."))
return git_ident_config(var, value, cb);
diff --git a/git-compat-util.h b/git-compat-util.h
index 96a3f86..3a08d99 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -342,6 +342,14 @@ typedef uintmax_t timestamp_t;
#define _PATH_DEFPATH "/usr/local/bin:/usr/bin:/bin"
+#ifndef platform_core_config
+static inline int noop_core_config(const char *var, const char *value, void *cb)
+ return 0;
+#define platform_core_config noop_core_config
#ifndef has_dos_drive_prefix
static inline int git_has_dos_drive_prefix(const char *path)