Improve reporting of errors in config file routines

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Alex Riesen 2008-05-12 23:41:04 +02:00 committed by Junio C Hamano
parent eafa29b7cb
commit 64c0d71ce9
1 changed files with 16 additions and 19 deletions

View File

@ -627,11 +627,9 @@ static int store_aux(const char* key, const char* value)
case KEY_SEEN: case KEY_SEEN:
if (matches(key, value)) { if (matches(key, value)) {
if (store.seen == 1 && store.multi_replace == 0) { if (store.seen == 1 && store.multi_replace == 0) {
fprintf(stderr, warning("%s has multiple values", key);
"Warning: %s has multiple values\n",
key);
} else if (store.seen >= MAX_MATCHES) { } else if (store.seen >= MAX_MATCHES) {
fprintf(stderr, "Too many matches\n"); error("too many matches for %s", key);
return 1; return 1;
} }


@ -681,9 +679,9 @@ static int store_aux(const char* key, const char* value)
return 0; return 0;
} }


static int write_error(void) static int write_error(const char *filename)
{ {
fprintf(stderr, "Failed to write new configuration file\n"); error("failed to write new configuration file %s", filename);


/* Same error code as "failed to rename". */ /* Same error code as "failed to rename". */
return 4; return 4;
@ -842,7 +840,7 @@ int git_config_set_multivar(const char* key, const char* value,
*/ */


if (last_dot == NULL) { if (last_dot == NULL) {
fprintf(stderr, "key does not contain a section: %s\n", key); error("key does not contain a section: %s", key);
ret = 2; ret = 2;
goto out_free; goto out_free;
} }
@ -862,14 +860,14 @@ int git_config_set_multivar(const char* key, const char* value,
/* Leave the extended basename untouched.. */ /* Leave the extended basename untouched.. */
if (!dot || i > store.baselen) { if (!dot || i > store.baselen) {
if (!iskeychar(c) || (i == store.baselen+1 && !isalpha(c))) { if (!iskeychar(c) || (i == store.baselen+1 && !isalpha(c))) {
fprintf(stderr, "invalid key: %s\n", key); error("invalid key: %s", key);
free(store.key); free(store.key);
ret = 1; ret = 1;
goto out_free; goto out_free;
} }
c = tolower(c); c = tolower(c);
} else if (c == '\n') { } else if (c == '\n') {
fprintf(stderr, "invalid key (newline): %s\n", key); error("invalid key (newline): %s", key);
free(store.key); free(store.key);
ret = 1; ret = 1;
goto out_free; goto out_free;
@ -885,7 +883,7 @@ int git_config_set_multivar(const char* key, const char* value,
lock = xcalloc(sizeof(struct lock_file), 1); lock = xcalloc(sizeof(struct lock_file), 1);
fd = hold_lock_file_for_update(lock, config_filename, 0); fd = hold_lock_file_for_update(lock, config_filename, 0);
if (fd < 0) { if (fd < 0) {
fprintf(stderr, "could not lock config file\n"); error("could not lock config file %s", config_filename);
free(store.key); free(store.key);
ret = -1; ret = -1;
goto out_free; goto out_free;
@ -932,8 +930,7 @@ int git_config_set_multivar(const char* key, const char* value,
store.value_regex = (regex_t*)xmalloc(sizeof(regex_t)); store.value_regex = (regex_t*)xmalloc(sizeof(regex_t));
if (regcomp(store.value_regex, value_regex, if (regcomp(store.value_regex, value_regex,
REG_EXTENDED)) { REG_EXTENDED)) {
fprintf(stderr, "Invalid pattern: %s\n", error("invalid pattern: %s", value_regex);
value_regex);
free(store.value_regex); free(store.value_regex);
ret = 6; ret = 6;
goto out_free; goto out_free;
@ -951,7 +948,7 @@ int git_config_set_multivar(const char* key, const char* value,
* existing config file. * existing config file.
*/ */
if (git_config_from_file(store_aux, config_filename)) { if (git_config_from_file(store_aux, config_filename)) {
fprintf(stderr, "invalid config file\n"); error("invalid config file %s", config_filename);
free(store.key); free(store.key);
if (store.value_regex != NULL) { if (store.value_regex != NULL) {
regfree(store.value_regex); regfree(store.value_regex);
@ -1030,7 +1027,7 @@ int git_config_set_multivar(const char* key, const char* value,
} }


if (commit_lock_file(lock) < 0) { if (commit_lock_file(lock) < 0) {
fprintf(stderr, "Cannot commit config file!\n"); error("could not commit config file %s", config_filename);
ret = 4; ret = 4;
goto out_free; goto out_free;
} }
@ -1051,7 +1048,7 @@ out_free:
return ret; return ret;


write_err_out: write_err_out:
ret = write_error(); ret = write_error(lock->filename);
goto out_free; goto out_free;


} }
@ -1101,7 +1098,7 @@ int git_config_rename_section(const char *old_name, const char *new_name)
config_filename = xstrdup(config_filename); config_filename = xstrdup(config_filename);
out_fd = hold_lock_file_for_update(lock, config_filename, 0); out_fd = hold_lock_file_for_update(lock, config_filename, 0);
if (out_fd < 0) { if (out_fd < 0) {
ret = error("Could not lock config file!"); ret = error("could not lock config file %s", config_filename);
goto out; goto out;
} }


@ -1125,7 +1122,7 @@ int git_config_rename_section(const char *old_name, const char *new_name)
} }
store.baselen = strlen(new_name); store.baselen = strlen(new_name);
if (!store_write_section(out_fd, new_name)) { if (!store_write_section(out_fd, new_name)) {
ret = write_error(); ret = write_error(lock->filename);
goto out; goto out;
} }
continue; continue;
@ -1136,14 +1133,14 @@ int git_config_rename_section(const char *old_name, const char *new_name)
continue; continue;
length = strlen(buf); length = strlen(buf);
if (write_in_full(out_fd, buf, length) != length) { if (write_in_full(out_fd, buf, length) != length) {
ret = write_error(); ret = write_error(lock->filename);
goto out; goto out;
} }
} }
fclose(config_file); fclose(config_file);
unlock_and_out: unlock_and_out:
if (commit_lock_file(lock) < 0) if (commit_lock_file(lock) < 0)
ret = error("Cannot commit config file!"); ret = error("could not commit config file %s", config_filename);
out: out:
free(config_filename); free(config_filename);
return ret; return ret;