From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH 3/6] config.c: add repo_config_set_worktree_gently()
Date: Thu, 27 Dec 2018 16:56:08 +0100 [thread overview]
Message-ID: <20181227155611.10585-4-pclouds@gmail.com> (raw)
In-Reply-To: <20181227155611.10585-1-pclouds@gmail.com>
This is C equivalent of "git config --set --worktree". In other words,
it will
- write to $GIT_DIR/config in single-worktree setup
- write to $GIT_COMMON_DIR/worktrees/<x>/config.worktree or
$GIT_COMMON_DIR/config.worktree (for main worktree)
if extensions.worktreeConfig is enabled
- return error in multiple-worktree setup if extensions.worktreeConfig
is not enabled.
While at there, also add repo_config_set*() for writing to
$GIT_COMMON_DIR/config.
Note, since git_config_set_multivar_in_file_gently() only invalidates
the config set of the_repository, anybody who uses these functions on
submodules must do additional invalidation if needed.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
config.c | 41 ++++++++++++++++++++++++++++++++++++++++-
config.h | 3 +++
2 files changed, 43 insertions(+), 1 deletion(-)
diff --git a/config.c b/config.c
index 79fbe65da8..151d28664e 100644
--- a/config.c
+++ b/config.c
@@ -19,6 +19,7 @@
#include "utf8.h"
#include "dir.h"
#include "color.h"
+#include "worktree.h"
struct config_source {
struct config_source *prev;
@@ -2137,6 +2138,39 @@ int repo_config_get_pathname(struct repository *repo,
return ret;
}
+int repo_config_set_gently(struct repository *r,
+ const char *key, const char *value)
+{
+ char *path = repo_git_path(r, "config");
+ int ret = git_config_set_multivar_in_file_gently(path, key, value, NULL, 0);
+ free(path);
+ return ret;
+}
+
+void repo_config_set(struct repository *r, const char *key, const char *value)
+{
+ if (!repo_config_set_gently(r, key, value))
+ return;
+ if (value)
+ die(_("could not set '%s' to '%s'"), key, value);
+ else
+ die(_("could not unset '%s'"), key);
+}
+
+int repo_config_set_worktree_gently(struct repository *r,
+ const char *key, const char *value)
+{
+ char *path;
+ int ret;
+
+ path = get_worktree_config(r);
+ if (!path)
+ return CONFIG_INVALID_FILE;
+ ret = git_config_set_multivar_in_file_gently(path, key, value, NULL, 0);
+ free(path);
+ return ret;
+}
+
/* Functions used historically to read configuration from 'the_repository' */
void git_config(config_fn_t fn, void *data)
{
@@ -2912,7 +2946,12 @@ int git_config_set_multivar_in_file_gently(const char *config_filename,
ret = 0;
- /* Invalidate the config cache */
+ /*
+ * Invalidate the config cache
+ *
+ * NEEDSWORK: invalidate _all_ existing config caches, not
+ * just one from the_repository
+ */
git_config_clear();
out_free:
diff --git a/config.h b/config.h
index ee5d3fa7b4..62204dc252 100644
--- a/config.h
+++ b/config.h
@@ -103,6 +103,9 @@ extern int git_config_color(char *, const char *, const char *);
extern int git_config_set_in_file_gently(const char *, const char *, const char *);
extern void git_config_set_in_file(const char *, const char *, const char *);
extern int git_config_set_gently(const char *, const char *);
+extern int repo_config_set_gently(struct repository *, const char *, const char *);
+extern void repo_config_set(struct repository *, const char *, const char *);
+extern int repo_config_set_worktree_gently(struct repository *, const char *, const char *);
extern void git_config_set(const char *, const char *);
extern int git_config_parse_key(const char *, char **, int *);
extern int git_config_key_is_valid(const char *key);
--
2.20.0.482.g66447595a7
next prev parent reply other threads:[~2018-12-27 15:56 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-27 15:56 [PATCH 0/6] Add "git config --move-to" Nguyễn Thái Ngọc Duy
2018-12-27 15:56 ` [PATCH 1/6] config.c: avoid git_path() in do_git_config_sequence() Nguyễn Thái Ngọc Duy
2019-01-10 21:38 ` Junio C Hamano
2018-12-27 15:56 ` [PATCH 2/6] worktree.c: add get_worktree_config() Nguyễn Thái Ngọc Duy
2018-12-27 20:36 ` Eric Sunshine
2018-12-27 15:56 ` Nguyễn Thái Ngọc Duy [this message]
2019-04-30 16:40 ` [PATCH 3/6] config.c: add repo_config_set_worktree_gently() Derrick Stolee
2019-05-01 9:55 ` Duy Nguyen
2018-12-27 15:56 ` [PATCH 4/6] config: use OPT_FILENAME() Nguyễn Thái Ngọc Duy
2018-12-27 20:40 ` Eric Sunshine
2018-12-27 15:56 ` [PATCH 5/6] config: factor out set_config_source_file() Nguyễn Thái Ngọc Duy
2018-12-27 15:56 ` [PATCH 6/6] config: add --move-to Nguyễn Thái Ngọc Duy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181227155611.10585-4-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.