config: add repo_config_set_worktree_gently()
Some config settings, such as those for sparse-checkout, are likely intended to only apply to one worktree at a time. To make this write easier, add a new config API method, repo_config_set_worktree_gently(). This method will attempt to write to the worktree-specific config, but will instead write to the common config file if worktree config is not enabled. The next change will introduce a consumer of this method. Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Reviewed-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
615a84ad78
commit
fe18733927
35
config.c
35
config.c
@ -21,6 +21,7 @@
|
|||||||
#include "dir.h"
|
#include "dir.h"
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "refs.h"
|
#include "refs.h"
|
||||||
|
#include "worktree.h"
|
||||||
|
|
||||||
struct config_source {
|
struct config_source {
|
||||||
struct config_source *prev;
|
struct config_source *prev;
|
||||||
@ -2884,6 +2885,20 @@ int git_config_set_gently(const char *key, const char *value)
|
|||||||
return git_config_set_multivar_gently(key, value, NULL, 0);
|
return git_config_set_multivar_gently(key, value, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int repo_config_set_worktree_gently(struct repository *r,
|
||||||
|
const char *key, const char *value)
|
||||||
|
{
|
||||||
|
/* Only use worktree-specific config if it is is already enabled. */
|
||||||
|
if (repository_format_worktree_config) {
|
||||||
|
char *file = repo_git_path(r, "config.worktree");
|
||||||
|
int ret = git_config_set_multivar_in_file_gently(
|
||||||
|
file, key, value, NULL, 0);
|
||||||
|
free(file);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return repo_config_set_multivar_gently(r, key, value, NULL, 0);
|
||||||
|
}
|
||||||
|
|
||||||
void git_config_set(const char *key, const char *value)
|
void git_config_set(const char *key, const char *value)
|
||||||
{
|
{
|
||||||
git_config_set_multivar(key, value, NULL, 0);
|
git_config_set_multivar(key, value, NULL, 0);
|
||||||
@ -3181,14 +3196,28 @@ void git_config_set_multivar_in_file(const char *config_filename,
|
|||||||
int git_config_set_multivar_gently(const char *key, const char *value,
|
int git_config_set_multivar_gently(const char *key, const char *value,
|
||||||
const char *value_pattern, unsigned flags)
|
const char *value_pattern, unsigned flags)
|
||||||
{
|
{
|
||||||
return git_config_set_multivar_in_file_gently(NULL, key, value, value_pattern,
|
return repo_config_set_multivar_gently(the_repository, key, value,
|
||||||
flags);
|
value_pattern, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
int repo_config_set_multivar_gently(struct repository *r, const char *key,
|
||||||
|
const char *value,
|
||||||
|
const char *value_pattern, unsigned flags)
|
||||||
|
{
|
||||||
|
char *file = repo_git_path(r, "config");
|
||||||
|
int res = git_config_set_multivar_in_file_gently(file,
|
||||||
|
key, value,
|
||||||
|
value_pattern,
|
||||||
|
flags);
|
||||||
|
free(file);
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
void git_config_set_multivar(const char *key, const char *value,
|
void git_config_set_multivar(const char *key, const char *value,
|
||||||
const char *value_pattern, unsigned flags)
|
const char *value_pattern, unsigned flags)
|
||||||
{
|
{
|
||||||
git_config_set_multivar_in_file(NULL, key, value, value_pattern,
|
git_config_set_multivar_in_file(git_path("config"),
|
||||||
|
key, value, value_pattern,
|
||||||
flags);
|
flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
8
config.h
8
config.h
@ -253,6 +253,13 @@ void git_config_set_in_file(const char *, const char *, const char *);
|
|||||||
|
|
||||||
int git_config_set_gently(const char *, const char *);
|
int git_config_set_gently(const char *, const char *);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write a config value that should apply to the current worktree. If
|
||||||
|
* extensions.worktreeConfig is enabled, then the write will happen in the
|
||||||
|
* current worktree's config. Otherwise, write to the common config file.
|
||||||
|
*/
|
||||||
|
int repo_config_set_worktree_gently(struct repository *, const char *, const char *);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* write config values to `.git/config`, takes a key/value pair as parameter.
|
* write config values to `.git/config`, takes a key/value pair as parameter.
|
||||||
*/
|
*/
|
||||||
@ -281,6 +288,7 @@ int git_config_parse_key(const char *, char **, size_t *);
|
|||||||
|
|
||||||
int git_config_set_multivar_gently(const char *, const char *, const char *, unsigned);
|
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);
|
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);
|
||||||
int git_config_set_multivar_in_file_gently(const char *, const char *, const char *, const char *, unsigned);
|
int git_config_set_multivar_in_file_gently(const char *, const char *, const char *, const char *, unsigned);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user