config: Introduce functions to write non-standard file
Introduce two new functions corresponding to "git_config_set" and "git_config_set_multivar" to write a non-standard configuration file. Expose these new functions in cache.h for other git programs to use. Helped-by: Jeff King <peff@peff.net> Helped-by: Jonathan Nieder <jrnieder@gmail.com> Reviewed-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
38ef61cfde
commit
5ec3118293
2
cache.h
2
cache.h
@ -1051,9 +1051,11 @@ extern int git_config_bool(const char *, const char *);
|
||||
extern int git_config_maybe_bool(const char *, const char *);
|
||||
extern int git_config_string(const char **, const char *, const char *);
|
||||
extern int git_config_pathname(const char **, const char *, const char *);
|
||||
extern int git_config_set_in_file(const char *, const char *, const char *);
|
||||
extern int git_config_set(const char *, const char *);
|
||||
extern int git_config_parse_key(const char *, char **, int *);
|
||||
extern int git_config_set_multivar(const char *, const char *, const char *, int);
|
||||
extern int git_config_set_multivar_in_file(const char *, const char *, const char *, const char *, int);
|
||||
extern int git_config_rename_section(const char *, const char *);
|
||||
extern const char *git_etc_gitconfig(void);
|
||||
extern int check_repository_format_version(const char *var, const char *value, void *cb);
|
||||
|
36
config.c
36
config.c
@ -1073,6 +1073,12 @@ contline:
|
||||
return offset;
|
||||
}
|
||||
|
||||
int git_config_set_in_file(const char *config_filename,
|
||||
const char *key, const char *value)
|
||||
{
|
||||
return git_config_set_multivar_in_file(config_filename, key, value, NULL, 0);
|
||||
}
|
||||
|
||||
int git_config_set(const char *key, const char *value)
|
||||
{
|
||||
return git_config_set_multivar(key, value, NULL, 0);
|
||||
@ -1170,19 +1176,14 @@ out_free_ret_1:
|
||||
* - the config file is removed and the lock file rename()d to it.
|
||||
*
|
||||
*/
|
||||
int git_config_set_multivar(const char *key, const char *value,
|
||||
const char *value_regex, int multi_replace)
|
||||
int git_config_set_multivar_in_file(const char *config_filename,
|
||||
const char *key, const char *value,
|
||||
const char *value_regex, int multi_replace)
|
||||
{
|
||||
int fd = -1, in_fd;
|
||||
int ret;
|
||||
char *config_filename;
|
||||
struct lock_file *lock = NULL;
|
||||
|
||||
if (config_exclusive_filename)
|
||||
config_filename = xstrdup(config_exclusive_filename);
|
||||
else
|
||||
config_filename = git_pathdup("config");
|
||||
|
||||
/* parse-key returns negative; flip the sign to feed exit(3) */
|
||||
ret = 0 - git_config_parse_key(key, &store.key, &store.baselen);
|
||||
if (ret)
|
||||
@ -1359,7 +1360,6 @@ int git_config_set_multivar(const char *key, const char *value,
|
||||
out_free:
|
||||
if (lock)
|
||||
rollback_lock_file(lock);
|
||||
free(config_filename);
|
||||
return ret;
|
||||
|
||||
write_err_out:
|
||||
@ -1368,6 +1368,24 @@ write_err_out:
|
||||
|
||||
}
|
||||
|
||||
int git_config_set_multivar(const char *key, const char *value,
|
||||
const char *value_regex, int multi_replace)
|
||||
{
|
||||
const char *config_filename;
|
||||
char *buf = NULL;
|
||||
int ret;
|
||||
|
||||
if (config_exclusive_filename)
|
||||
config_filename = config_exclusive_filename;
|
||||
else
|
||||
config_filename = buf = git_pathdup("config");
|
||||
|
||||
ret = git_config_set_multivar_in_file(config_filename, key, value,
|
||||
value_regex, multi_replace);
|
||||
free(buf);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int section_name_match (const char *buf, const char *name)
|
||||
{
|
||||
int i = 0, j = 0, dot = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user