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;