4
4
static const char git_config_set_usage[] =
5
"git-config [ --global | --system ] [ --bool | --int ] [--get | --get-all | --get-regexp | --replace-all | --add | --unset | --unset-all] name [value [value_regex]] | --rename-section old_name new_name | --remove-section name | --list";
5
"git-config [ --global | --system | [ -f | --file ] config-file ] [ --bool | --int ] [ -z | --null ] [--get | --get-all | --get-regexp | --replace-all | --add | --unset | --unset-all] name [value [value_regex]] | --rename-section old_name new_name | --remove-section name | --list";
8
8
static regex_t *key_regexp;
13
13
static int do_not_match;
15
static char delim = '=';
16
static char key_delim = ' ';
17
static char term = '\n';
15
18
static enum { T_RAW, T_INT, T_BOOL } type = T_RAW;
17
20
static int show_all_config(const char *key_, const char *value_)
20
printf("%s=%s\n", key_, value_);
23
printf("%s%c%s%c", key_, delim, value_, term);
25
printf("%s%c", key_, term);
141
char *normalize_value(const char *key, const char *value)
149
normalized = xstrdup(value);
151
normalized = xmalloc(64);
153
int v = git_config_int(key, value);
154
sprintf(normalized, "%d", v);
156
else if (type == T_BOOL)
157
sprintf(normalized, "%s",
158
git_config_bool(key, value) ? "true" : "false");
138
164
int cmd_config(int argc, const char **argv, const char *prefix)
141
168
setup_git_directory_gently(&nongit);
143
170
while (1 < argc) {
151
178
char *home = getenv("HOME");
153
180
char *user_config = xstrdup(mkpath("%s/.gitconfig", home));
154
setenv("GIT_CONFIG", user_config, 1);
181
setenv(CONFIG_ENVIRONMENT, user_config, 1);
155
182
free(user_config);
157
184
die("$HOME not set");
160
187
else if (!strcmp(argv[1], "--system"))
161
setenv("GIT_CONFIG", ETC_GITCONFIG, 1);
188
setenv(CONFIG_ENVIRONMENT, ETC_GITCONFIG, 1);
189
else if (!strcmp(argv[1], "--file") || !strcmp(argv[1], "-f")) {
191
usage(git_config_set_usage);
192
setenv(CONFIG_ENVIRONMENT, argv[2], 1);
196
else if (!strcmp(argv[1], "--null") || !strcmp(argv[1], "-z")) {
162
201
else if (!strcmp(argv[1], "--rename-section")) {
209
248
use_key_regexp = 1;
211
250
return get_value(argv[2], NULL);
214
return git_config_set(argv[1], argv[2]);
252
value = normalize_value(argv[1], argv[2]);
253
return git_config_set(argv[1], value);
216
256
if (!strcmp(argv[1], "--unset"))
217
257
return git_config_set_multivar(argv[2], NULL, argv[3], 0);
227
267
use_key_regexp = 1;
229
269
return get_value(argv[2], argv[3]);
230
} else if (!strcmp(argv[1], "--add"))
231
return git_config_set_multivar(argv[2], argv[3], "^$", 0);
232
else if (!strcmp(argv[1], "--replace-all"))
234
return git_config_set_multivar(argv[2], argv[3], NULL, 1);
237
return git_config_set_multivar(argv[1], argv[2], argv[3], 0);
270
} else if (!strcmp(argv[1], "--add")) {
271
value = normalize_value(argv[2], argv[3]);
272
return git_config_set_multivar(argv[2], value, "^$", 0);
273
} else if (!strcmp(argv[1], "--replace-all")) {
274
value = normalize_value(argv[2], argv[3]);
275
return git_config_set_multivar(argv[2], value, NULL, 1);
277
value = normalize_value(argv[1], argv[2]);
278
return git_config_set_multivar(argv[1], value, argv[3], 0);
239
if (!strcmp(argv[1], "--replace-all"))
240
return git_config_set_multivar(argv[2], argv[3], argv[4], 1);
281
if (!strcmp(argv[1], "--replace-all")) {
282
value = normalize_value(argv[2], argv[3]);
283
return git_config_set_multivar(argv[2], value, argv[4], 1);
243
287
usage(git_config_set_usage);