]> git.ipfire.org Git - thirdparty/git.git/commitdiff
config: introduce missing setters that take repo as parameter
authorPatrick Steinhardt <ps@pks.im>
Tue, 13 Aug 2024 09:13:43 +0000 (11:13 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 13 Aug 2024 17:01:02 +0000 (10:01 -0700)
While we already provide some of the config-setting interfaces with a
`struct repository` as parameter, others only have a variant that
implicitly depends on `the_repository`. Fill in those gaps such that we
can start to deprecate the repo-less variants.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
config.c
config.h

index 6421894614092428780e80b57d2d3f0ca21c975c..ac89b708e7d031a203e9f8036ecb9d2468d04492 100644 (file)
--- a/config.c
+++ b/config.c
@@ -3178,21 +3178,39 @@ static void maybe_remove_section(struct config_store_data *store,
                *end_offset = store->parsed[store->parsed_nr - 1].end;
 }
 
+int repo_config_set_in_file_gently(struct repository *r, const char *config_filename,
+                                  const char *key, const char *comment, const char *value)
+{
+       return repo_config_set_multivar_in_file_gently(r, config_filename, key, value, NULL, comment, 0);
+}
+
 int git_config_set_in_file_gently(const char *config_filename,
                                  const char *key, const char *comment, const char *value)
 {
-       return git_config_set_multivar_in_file_gently(config_filename, key, value, NULL, comment, 0);
+       return repo_config_set_in_file_gently(the_repository, config_filename,
+                                             key, comment, value);
+}
+
+void repo_config_set_in_file(struct repository *r, const char *config_filename,
+                            const char *key, const char *value)
+{
+       repo_config_set_multivar_in_file(r, config_filename, key, value, NULL, 0);
 }
 
 void git_config_set_in_file(const char *config_filename,
                            const char *key, const char *value)
 {
-       git_config_set_multivar_in_file(config_filename, key, value, NULL, 0);
+       repo_config_set_in_file(the_repository, config_filename, key, value);
+}
+
+int repo_config_set_gently(struct repository *r, const char *key, const char *value)
+{
+       return repo_config_set_multivar_gently(r, key, value, NULL, 0);
 }
 
 int git_config_set_gently(const char *key, const char *value)
 {
-       return git_config_set_multivar_gently(key, value, NULL, 0);
+       return repo_config_set_gently(the_repository, key, value);
 }
 
 int repo_config_set_worktree_gently(struct repository *r,
@@ -3209,13 +3227,18 @@ int repo_config_set_worktree_gently(struct repository *r,
        return repo_config_set_multivar_gently(r, key, value, NULL, 0);
 }
 
-void git_config_set(const char *key, const char *value)
+void repo_config_set(struct repository *r, const char *key, const char *value)
 {
-       git_config_set_multivar(key, value, NULL, 0);
+       repo_config_set_multivar(r, key, value, NULL, 0);
 
        trace2_cmd_set_config(key, value);
 }
 
+void git_config_set(const char *key, const char *value)
+{
+       repo_config_set(the_repository, key, value);
+}
+
 char *git_config_prepare_comment_string(const char *comment)
 {
        size_t leading_blanks;
@@ -3293,11 +3316,12 @@ static void validate_comment_string(const char *comment)
  * - the config file is removed and the lock file rename()d to it.
  *
  */
-int git_config_set_multivar_in_file_gently(const char *config_filename,
-                                          const char *key, const char *value,
-                                          const char *value_pattern,
-                                          const char *comment,
-                                          unsigned flags)
+int repo_config_set_multivar_in_file_gently(struct repository *r,
+                                           const char *config_filename,
+                                           const char *key, const char *value,
+                                           const char *value_pattern,
+                                           const char *comment,
+                                           unsigned flags)
 {
        int fd = -1, in_fd = -1;
        int ret;
@@ -3317,7 +3341,7 @@ int git_config_set_multivar_in_file_gently(const char *config_filename,
        store.multi_replace = (flags & CONFIG_FLAGS_MULTI_REPLACE) != 0;
 
        if (!config_filename)
-               config_filename = filename_buf = git_pathdup("config");
+               config_filename = filename_buf = repo_git_path(r, "config");
 
        /*
         * The lock serves a purpose in addition to locking: the new
@@ -3526,7 +3550,7 @@ int git_config_set_multivar_in_file_gently(const char *config_filename,
        ret = 0;
 
        /* Invalidate the config cache */
-       git_config_clear();
+       repo_config_clear(r);
 
 out_free:
        rollback_lock_file(&lock);
@@ -3543,12 +3567,24 @@ write_err_out:
        goto out_free;
 }
 
-void git_config_set_multivar_in_file(const char *config_filename,
-                                    const char *key, const char *value,
-                                    const char *value_pattern, unsigned flags)
+int git_config_set_multivar_in_file_gently(const char *config_filename,
+                                          const char *key, const char *value,
+                                          const char *value_pattern,
+                                          const char *comment,
+                                          unsigned flags)
 {
-       if (!git_config_set_multivar_in_file_gently(config_filename, key, value,
-                                                   value_pattern, NULL, flags))
+       return repo_config_set_multivar_in_file_gently(the_repository, config_filename,
+                                                      key, value, value_pattern,
+                                                      comment, flags);
+}
+
+void repo_config_set_multivar_in_file(struct repository *r,
+                                     const char *config_filename,
+                                     const char *key, const char *value,
+                                     const char *value_pattern, unsigned flags)
+{
+       if (!repo_config_set_multivar_in_file_gently(r, config_filename, key, value,
+                                                    value_pattern, NULL, flags))
                return;
        if (value)
                die(_("could not set '%s' to '%s'"), key, value);
@@ -3556,6 +3592,14 @@ void git_config_set_multivar_in_file(const char *config_filename,
                die(_("could not unset '%s'"), key);
 }
 
+void git_config_set_multivar_in_file(const char *config_filename,
+                                    const char *key, const char *value,
+                                    const char *value_pattern, unsigned flags)
+{
+       repo_config_set_multivar_in_file(the_repository, config_filename,
+                                        key, value, value_pattern, flags);
+}
+
 int git_config_set_multivar_gently(const char *key, const char *value,
                                   const char *value_pattern, unsigned flags)
 {
@@ -3576,12 +3620,21 @@ int repo_config_set_multivar_gently(struct repository *r, const char *key,
        return res;
 }
 
+void repo_config_set_multivar(struct repository *r,
+                             const char *key, const char *value,
+                             const char *value_pattern, unsigned flags)
+{
+       char *file = repo_git_path(r, "config");
+       git_config_set_multivar_in_file(file, key, value,
+                                       value_pattern, flags);
+       free(file);
+}
+
 void git_config_set_multivar(const char *key, const char *value,
                             const char *value_pattern, unsigned flags)
 {
-       git_config_set_multivar_in_file(git_path("config"),
-                                       key, value, value_pattern,
-                                       flags);
+       repo_config_set_multivar(the_repository, key, value,
+                                value_pattern, flags);
 }
 
 static size_t section_name_match (const char *buf, const char *name)
index 54b47dec9e2709ee958c9e3d70e67eddec07944e..b13e1bfb8d7f982a086582b882ca83b55542ca71 100644 (file)
--- a/config.h
+++ b/config.h
@@ -298,14 +298,18 @@ int git_config_pathname(char **, const char *, const char *);
 int git_config_expiry_date(timestamp_t *, const char *, const char *);
 int git_config_color(char *, const char *, const char *);
 int git_config_set_in_file_gently(const char *, const char *, const char *, const char *);
+int repo_config_set_in_file_gently(struct repository *r, const char *config_filename,
+                                  const char *key, const char *comment, const char *value);
 
 /**
  * write config values to a specific config file, takes a key/value pair as
  * parameter.
  */
 void git_config_set_in_file(const char *, const char *, const char *);
+void repo_config_set_in_file(struct repository *, const char *, const char *, const char *);
 
 int git_config_set_gently(const char *, const char *);
+int repo_config_set_gently(struct repository *r, const char *, const char *);
 
 /**
  * Write a config value that should apply to the current worktree. If
@@ -318,6 +322,7 @@ int repo_config_set_worktree_gently(struct repository *, const char *, const cha
  * write config values to `.git/config`, takes a key/value pair as parameter.
  */
 void git_config_set(const char *, const char *);
+void repo_config_set(struct repository *, const char *, const char *);
 
 int git_config_parse_key(const char *, char **, size_t *);
 
@@ -341,9 +346,11 @@ int git_config_parse_key(const char *, char **, size_t *);
 #define CONFIG_FLAGS_FIXED_VALUE (1 << 1)
 
 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 repo_config_set_multivar_gently(struct repository *, const char *, const char *, const char *, unsigned);
+void git_config_set_multivar(const char *, const char *, const char *, unsigned);
+void repo_config_set_multivar(struct repository *r, const char *, const char *, const char *, unsigned);
 int git_config_set_multivar_in_file_gently(const char *, const char *, const char *, const char *, const char *, unsigned);
+int repo_config_set_multivar_in_file_gently(struct repository *, const char *, const char *, const char *, const char *, const char *, unsigned);
 
 char *git_config_prepare_comment_string(const char *);
 
@@ -372,6 +379,12 @@ void git_config_set_multivar_in_file(const char *config_filename,
                                     const char *value,
                                     const char *value_pattern,
                                     unsigned flags);
+void repo_config_set_multivar_in_file(struct repository *r,
+                                     const char *config_filename,
+                                     const char *key,
+                                     const char *value,
+                                     const char *value_pattern,
+                                     unsigned flags);
 
 /**
  * rename or remove sections in the config file