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 <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Patrick Steinhardt committed Feb 16, 2016 at 13:56 UTC b4c8aba659cb3264bcce3110d54bfcaab485408b
2 files changed +31
cache.h
+4
@@ -1523,11 +1523,15 @@ extern int git_config_maybe_bool(const char *, const char *);
1523 extern int git_config_string(const char **, const char *, const char *);
1524 extern int git_config_pathname(const char **, const char *, const char *);
1525 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 *);
1527 extern int git_config_set(const char *, const char *);
1528 +extern void git_config_set_or_die(const char *, const char *);
1529 extern int git_config_parse_key(const char *, char **, int *);
1530 extern int git_config_key_is_valid(const char *key);
1531 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);
1533 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);
1535 extern int git_config_rename_section(const char *, const char *);
1536 extern int git_config_rename_section_in_file(const char *, const char *, const char *);
1537 extern const char *git_etc_gitconfig(void);
config.c
+27
@@ -1831,11 +1831,22 @@ int git_config_set_in_file(const char *config_filename,
1831 return git_config_set_multivar_in_file(config_filename, key, value, NULL, 0);
1832 }
1833
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 +
1840 int git_config_set(const char *key, const char *value)
1841 {
1842 return git_config_set_multivar(key, value, NULL, 0);
1843 }
1844
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 +
1850 /*
1851 * Auxiliary function to sanity-check and split the key into the section
1852 * identifier and variable name.
@@ -2179,6 +2190,15 @@ write_err_out:
2190
2191 }
2192
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 +
2202 int git_config_set_multivar(const char *key, const char *value,
2203 const char *value_regex, int multi_replace)
2204 {
@@ -2186,6 +2206,13 @@ int git_config_set_multivar(const char *key, const char *value,
2206 multi_replace);
2207 }
2208
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 +
2216 static int section_name_match (const char *buf, const char *name)
2217 {
2218 int i = 0, j = 0, dot = 0;