Merge branch 'ds/sparse-checkout-requires-per-worktree-config'
"git sparse-checkout" wants to work with per-worktree configuration, but did not work well in a worktree attached to a bare repository. * ds/sparse-checkout-requires-per-worktree-config: config: make git_configset_get_string_tmp() private worktree: copy sparse-checkout patterns and config on add sparse-checkout: set worktree-config correctly config: add repo_config_set_worktree_gently() worktree: create init_worktree_config() Documentation: add extensions.worktreeConfig details
This commit is contained in:
39
config.c
39
config.c
@ -21,6 +21,7 @@
|
||||
#include "dir.h"
|
||||
#include "color.h"
|
||||
#include "refs.h"
|
||||
#include "worktree.h"
|
||||
|
||||
struct config_source {
|
||||
struct config_source *prev;
|
||||
@ -2294,8 +2295,8 @@ int git_configset_get_string(struct config_set *cs, const char *key, char **dest
|
||||
return 1;
|
||||
}
|
||||
|
||||
int git_configset_get_string_tmp(struct config_set *cs, const char *key,
|
||||
const char **dest)
|
||||
static int git_configset_get_string_tmp(struct config_set *cs, const char *key,
|
||||
const char **dest)
|
||||
{
|
||||
const char *value;
|
||||
if (!git_configset_get_value(cs, key, &value)) {
|
||||
@ -3000,6 +3001,20 @@ int git_config_set_gently(const char *key, const char *value)
|
||||
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)
|
||||
{
|
||||
git_config_set_multivar(key, value, NULL, 0);
|
||||
@ -3297,14 +3312,28 @@ void git_config_set_multivar_in_file(const char *config_filename,
|
||||
int git_config_set_multivar_gently(const char *key, const char *value,
|
||||
const char *value_pattern, unsigned flags)
|
||||
{
|
||||
return git_config_set_multivar_in_file_gently(NULL, key, value, value_pattern,
|
||||
flags);
|
||||
return repo_config_set_multivar_gently(the_repository, key, value,
|
||||
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,
|
||||
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);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user