зеркало из https://github.com/microsoft/git.git
Merge branch 'mg/config-symbolic-constants'
* mg/config-symbolic-constants: config: Give error message when not changing a multivar config: define and document exit codes
This commit is contained in:
Коммит
6bb696c304
|
@ -50,16 +50,18 @@ The default is to assume the config file of the current repository,
|
|||
.git/config unless defined otherwise with GIT_DIR and GIT_CONFIG
|
||||
(see <<FILES>>).
|
||||
|
||||
This command will fail if:
|
||||
This command will fail (with exit code ret) if:
|
||||
|
||||
. The config file is invalid,
|
||||
. Can not write to the config file,
|
||||
. no section was provided,
|
||||
. the section or key is invalid,
|
||||
. you try to unset an option which does not exist,
|
||||
. you try to unset/set an option for which multiple lines match, or
|
||||
. you use '--global' option without $HOME being properly set.
|
||||
. The config file is invalid (ret=3),
|
||||
. can not write to the config file (ret=4),
|
||||
. no section or name was provided (ret=2),
|
||||
. the section or key is invalid (ret=1),
|
||||
. you try to unset an option which does not exist (ret=5),
|
||||
. you try to unset/set an option for which multiple lines match (ret=5),
|
||||
. you try to use an invalid regexp (ret=6), or
|
||||
. you use '--global' option without $HOME being properly set (ret=128).
|
||||
|
||||
On success, the command returns the exit code 0.
|
||||
|
||||
OPTIONS
|
||||
-------
|
||||
|
|
|
@ -436,9 +436,14 @@ int cmd_config(int argc, const char **argv, const char *prefix)
|
|||
NULL, NULL);
|
||||
}
|
||||
else if (actions == ACTION_SET) {
|
||||
int ret;
|
||||
check_argc(argc, 2, 2);
|
||||
value = normalize_value(argv[0], argv[1]);
|
||||
return git_config_set(argv[0], value);
|
||||
ret = git_config_set(argv[0], value);
|
||||
if (ret == CONFIG_NOTHING_SET)
|
||||
error("cannot overwrite multiple values with a single value\n"
|
||||
" Use a regexp, --add or --set-all to change %s.", argv[0]);
|
||||
return ret;
|
||||
}
|
||||
else if (actions == ACTION_SET_ALL) {
|
||||
check_argc(argc, 2, 3);
|
||||
|
|
10
cache.h
10
cache.h
|
@ -1023,6 +1023,16 @@ extern const char *packed_object_info_detail(struct packed_git *, off_t, unsigne
|
|||
/* Dumb servers support */
|
||||
extern int update_server_info(int);
|
||||
|
||||
/* git_config_parse_key() returns these negated: */
|
||||
#define CONFIG_INVALID_KEY 1
|
||||
#define CONFIG_NO_SECTION_OR_NAME 2
|
||||
/* git_config_set(), git_config_set_multivar() return the above or these: */
|
||||
#define CONFIG_NO_LOCK -1
|
||||
#define CONFIG_INVALID_FILE 3
|
||||
#define CONFIG_NO_WRITE 4
|
||||
#define CONFIG_NOTHING_SET 5
|
||||
#define CONFIG_INVALID_PATTERN 6
|
||||
|
||||
typedef int (*config_fn_t)(const char *, const char *, void *);
|
||||
extern int git_default_config(const char *, const char *, void *);
|
||||
extern int git_config_from_file(config_fn_t fn, const char *, void *);
|
||||
|
|
20
config.c
20
config.c
|
@ -1123,12 +1123,12 @@ int git_config_parse_key(const char *key, char **store_key, int *baselen_)
|
|||
|
||||
if (last_dot == NULL || last_dot == key) {
|
||||
error("key does not contain a section: %s", key);
|
||||
return -2;
|
||||
return -CONFIG_NO_SECTION_OR_NAME;
|
||||
}
|
||||
|
||||
if (!last_dot[1]) {
|
||||
error("key does not contain variable name: %s", key);
|
||||
return -2;
|
||||
return -CONFIG_NO_SECTION_OR_NAME;
|
||||
}
|
||||
|
||||
baselen = last_dot - key;
|
||||
|
@ -1165,7 +1165,7 @@ int git_config_parse_key(const char *key, char **store_key, int *baselen_)
|
|||
|
||||
out_free_ret_1:
|
||||
free(*store_key);
|
||||
return -1;
|
||||
return -CONFIG_INVALID_KEY;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1221,7 +1221,7 @@ int git_config_set_multivar(const char *key, const char *value,
|
|||
if (fd < 0) {
|
||||
error("could not lock config file %s: %s", config_filename, strerror(errno));
|
||||
free(store.key);
|
||||
ret = -1;
|
||||
ret = CONFIG_NO_LOCK;
|
||||
goto out_free;
|
||||
}
|
||||
|
||||
|
@ -1235,12 +1235,12 @@ int git_config_set_multivar(const char *key, const char *value,
|
|||
if ( ENOENT != errno ) {
|
||||
error("opening %s: %s", config_filename,
|
||||
strerror(errno));
|
||||
ret = 3; /* same as "invalid config file" */
|
||||
ret = CONFIG_INVALID_FILE; /* same as "invalid config file" */
|
||||
goto out_free;
|
||||
}
|
||||
/* if nothing to unset, error out */
|
||||
if (value == NULL) {
|
||||
ret = 5;
|
||||
ret = CONFIG_NOTHING_SET;
|
||||
goto out_free;
|
||||
}
|
||||
|
||||
|
@ -1268,7 +1268,7 @@ int git_config_set_multivar(const char *key, const char *value,
|
|||
REG_EXTENDED)) {
|
||||
error("invalid pattern: %s", value_regex);
|
||||
free(store.value_regex);
|
||||
ret = 6;
|
||||
ret = CONFIG_INVALID_PATTERN;
|
||||
goto out_free;
|
||||
}
|
||||
}
|
||||
|
@ -1290,7 +1290,7 @@ int git_config_set_multivar(const char *key, const char *value,
|
|||
regfree(store.value_regex);
|
||||
free(store.value_regex);
|
||||
}
|
||||
ret = 3;
|
||||
ret = CONFIG_INVALID_FILE;
|
||||
goto out_free;
|
||||
}
|
||||
|
||||
|
@ -1303,7 +1303,7 @@ int git_config_set_multivar(const char *key, const char *value,
|
|||
/* if nothing to unset, or too many matches, error out */
|
||||
if ((store.seen == 0 && value == NULL) ||
|
||||
(store.seen > 1 && multi_replace == 0)) {
|
||||
ret = 5;
|
||||
ret = CONFIG_NOTHING_SET;
|
||||
goto out_free;
|
||||
}
|
||||
|
||||
|
@ -1364,7 +1364,7 @@ int git_config_set_multivar(const char *key, const char *value,
|
|||
|
||||
if (commit_lock_file(lock) < 0) {
|
||||
error("could not commit config file %s", config_filename);
|
||||
ret = 4;
|
||||
ret = CONFIG_NO_WRITE;
|
||||
goto out_free;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче