summaryrefslogtreecommitdiff
path: root/config.h
diff options
context:
space:
mode:
authorDerrick Stolee <dstolee@microsoft.com>2020-11-25 22:12:49 (GMT)
committerJunio C Hamano <gitster@pobox.com>2020-11-25 22:43:47 (GMT)
commit504ee1290e38fb1ff0d76f940b124e21ab57a99f (patch)
tree804987ae0314b8243a4ec1c7d84e7dc6dbb2dd3b /config.h
parentfaefdd61ec7c7f6f3c8c9907891465ac9a2a1475 (diff)
downloadgit-504ee1290e38fb1ff0d76f940b124e21ab57a99f.zip
git-504ee1290e38fb1ff0d76f940b124e21ab57a99f.tar.gz
git-504ee1290e38fb1ff0d76f940b124e21ab57a99f.tar.bz2
config: convert multi_replace to flags
We will extend the flexibility of the config API. Before doing so, let's take an existing 'int multi_replace' parameter and replace it with a new 'unsigned flags' parameter that can take multiple options as a bit field. Update all callers that specified multi_replace to now specify the CONFIG_FLAGS_MULTI_REPLACE flag. To add more clarity, extend the documentation of git_config_set_multivar_in_file() including a clear labeling of its arguments. Other config API methods in config.h require only a change of the final parameter from 'int' to 'unsigned'. Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'config.h')
-rw-r--r--config.h29
1 files changed, 22 insertions, 7 deletions
diff --git a/config.h b/config.h
index 91cdfbf..84fdf22 100644
--- a/config.h
+++ b/config.h
@@ -256,9 +256,22 @@ void git_config_set(const char *, const char *);
int git_config_parse_key(const char *, char **, size_t *);
int git_config_key_is_valid(const char *key);
-int git_config_set_multivar_gently(const char *, const char *, const char *, int);
-void git_config_set_multivar(const char *, const char *, const char *, int);
-int git_config_set_multivar_in_file_gently(const char *, const char *, const char *, const char *, int);
+
+/*
+ * The following macros specify flag bits that alter the behavior
+ * of the git_config_set_multivar*() methods.
+ */
+
+/*
+ * When CONFIG_FLAGS_MULTI_REPLACE is specified, all matching key/values
+ * are removed before a single new pair is written. If the flag is not
+ * present, then set operations replace only the first match.
+ */
+#define CONFIG_FLAGS_MULTI_REPLACE (1 << 0)
+
+int git_config_set_multivar_gently(const char *, const char *, const char *, unsigned);
+void git_config_set_multivar(const char *, const char *, const char *, unsigned);
+int git_config_set_multivar_in_file_gently(const char *, const char *, const char *, const char *, unsigned);
/**
* takes four parameters:
@@ -276,13 +289,15 @@ int git_config_set_multivar_in_file_gently(const char *, const char *, const cha
* - the value regex, as a string. It will disregard key/value pairs where value
* does not match.
*
- * - a multi_replace value, as an int. If value is equal to zero, nothing or only
- * one matching key/value is replaced, else all matching key/values (regardless
- * how many) are removed, before the new pair is written.
+ * - a flags value with bits corresponding to the CONFIG_FLAG_* macros.
*
* It returns 0 on success.
*/
-void git_config_set_multivar_in_file(const char *, const char *, const char *, const char *, int);
+void git_config_set_multivar_in_file(const char *config_filename,
+ const char *key,
+ const char *value,
+ const char *value_regex,
+ unsigned flags);
/**
* rename or remove sections in the config file