Skip to content

Commit b4c8aba

Browse files
pks-tgitster
authored andcommitted
config: introduce set_or_die wrappers
A lot of call-sites for the existing family of `git_config_set` functions do not check for errors that may occur, e.g. when the configuration file is locked. In many cases we simply want to die when such a situation arises. Introduce wrappers that will cause the program to die in those cases. These wrappers are temporary only to ease the transition to let `git_config_set` die by default. They will be removed later on when `git_config_set` itself has been replaced by `git_config_set_gently`. Signed-off-by: Patrick Steinhardt <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent a08595f commit b4c8aba

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

cache.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1523,11 +1523,15 @@ extern int git_config_maybe_bool(const char *, const char *);
15231523
extern int git_config_string(const char **, const char *, const char *);
15241524
extern int git_config_pathname(const char **, const char *, const char *);
15251525
extern int git_config_set_in_file(const char *, const char *, const char *);
1526+
extern void git_config_set_in_file_or_die(const char *, const char *, const char *);
15261527
extern int git_config_set(const char *, const char *);
1528+
extern void git_config_set_or_die(const char *, const char *);
15271529
extern int git_config_parse_key(const char *, char **, int *);
15281530
extern int git_config_key_is_valid(const char *key);
15291531
extern int git_config_set_multivar(const char *, const char *, const char *, int);
1532+
extern void git_config_set_multivar_or_die(const char *, const char *, const char *, int);
15301533
extern int git_config_set_multivar_in_file(const char *, const char *, const char *, const char *, int);
1534+
extern void git_config_set_multivar_in_file_or_die(const char *, const char *, const char *, const char *, int);
15311535
extern int git_config_rename_section(const char *, const char *);
15321536
extern int git_config_rename_section_in_file(const char *, const char *, const char *);
15331537
extern const char *git_etc_gitconfig(void);

config.c

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1831,11 +1831,22 @@ int git_config_set_in_file(const char *config_filename,
18311831
return git_config_set_multivar_in_file(config_filename, key, value, NULL, 0);
18321832
}
18331833

1834+
void git_config_set_in_file_or_die(const char *config_filename,
1835+
const char *key, const char *value)
1836+
{
1837+
git_config_set_multivar_in_file_or_die(config_filename, key, value, NULL, 0);
1838+
}
1839+
18341840
int git_config_set(const char *key, const char *value)
18351841
{
18361842
return git_config_set_multivar(key, value, NULL, 0);
18371843
}
18381844

1845+
void git_config_set_or_die(const char *key, const char *value)
1846+
{
1847+
git_config_set_multivar_or_die(key, value, NULL, 0);
1848+
}
1849+
18391850
/*
18401851
* Auxiliary function to sanity-check and split the key into the section
18411852
* identifier and variable name.
@@ -2179,13 +2190,29 @@ int git_config_set_multivar_in_file(const char *config_filename,
21792190

21802191
}
21812192

2193+
void git_config_set_multivar_in_file_or_die(const char *config_filename,
2194+
const char *key, const char *value,
2195+
const char *value_regex, int multi_replace)
2196+
{
2197+
if (git_config_set_multivar_in_file(config_filename, key, value,
2198+
value_regex, multi_replace) < 0)
2199+
die(_("Could not set '%s' to '%s'"), key, value);
2200+
}
2201+
21822202
int git_config_set_multivar(const char *key, const char *value,
21832203
const char *value_regex, int multi_replace)
21842204
{
21852205
return git_config_set_multivar_in_file(NULL, key, value, value_regex,
21862206
multi_replace);
21872207
}
21882208

2209+
void git_config_set_multivar_or_die(const char *key, const char *value,
2210+
const char *value_regex, int multi_replace)
2211+
{
2212+
git_config_set_multivar_in_file_or_die(NULL, key, value, value_regex,
2213+
multi_replace);
2214+
}
2215+
21892216
static int section_name_match (const char *buf, const char *name)
21902217
{
21912218
int i = 0, j = 0, dot = 0;

0 commit comments

Comments
 (0)