diff options
author | Junio C Hamano <gitster@pobox.com> | 2012-03-13 12:35:53 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-03-13 12:35:53 -0700 |
commit | 3f263099fca47c278e696fbc0f0d5525318eae0a (patch) | |
tree | b78a78ebcf7b864dcb705ab48b398cc79766936b | |
parent | 9d9bfea8f50f17fa52ff4a1161ef1d78b71ea40a (diff) | |
parent | 4b340593551217904d794cc0a8db55db89b5b066 (diff) | |
download | git-3f263099fca47c278e696fbc0f0d5525318eae0a.tar.gz |
Merge branch 'ms/maint-config-error-at-eol-linecount'
When "git config" diagnoses an error in a configuration file and
shows the line number for the offending line, it miscounted if the
error was at the end of line.
By Martin Stenberg
* ms/maint-config-error-at-eol-linecount:
config: report errors at the EOL with correct line number
Conflicts:
t/t1300-repo-config.sh
-rw-r--r-- | config.c | 13 | ||||
-rwxr-xr-x | t/t1300-repo-config.sh | 31 |
2 files changed, 40 insertions, 4 deletions
@@ -196,8 +196,10 @@ static char *parse_value(void) for (;;) { int c = get_next_char(); if (c == '\n') { - if (quote) + if (quote) { + cf->linenr--; return NULL; + } return cf->value.buf; } if (comment) @@ -287,7 +289,7 @@ static int get_extended_base_var(char *name, int baselen, int c) { do { if (c == '\n') - return -1; + goto error_incomplete_line; c = get_next_char(); } while (isspace(c)); @@ -299,13 +301,13 @@ static int get_extended_base_var(char *name, int baselen, int c) for (;;) { int c = get_next_char(); if (c == '\n') - return -1; + goto error_incomplete_line; if (c == '"') break; if (c == '\\') { c = get_next_char(); if (c == '\n') - return -1; + goto error_incomplete_line; } name[baselen++] = c; if (baselen > MAXNAME / 2) @@ -316,6 +318,9 @@ static int get_extended_base_var(char *name, int baselen, int c) if (get_next_char() != ']') return -1; return baselen; +error_incomplete_line: + cf->linenr--; + return -1; } static int get_base_var(char *name) diff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh index 5f249f681e..36e227b3bb 100755 --- a/t/t1300-repo-config.sh +++ b/t/t1300-repo-config.sh @@ -985,4 +985,35 @@ test_expect_success 'git config --edit respects core.editor' ' test_cmp expect actual ' +# malformed configuration files +test_expect_success 'barf on syntax error' ' + cat >.git/config <<-\EOF && + # broken section line + [section] + key garbage + EOF + test_must_fail git config --get section.key >actual 2>error && + grep " line 3 " error +' + +test_expect_success 'barf on incomplete section header' ' + cat >.git/config <<-\EOF && + # broken section line + [section + key = value + EOF + test_must_fail git config --get section.key >actual 2>error && + grep " line 2 " error +' + +test_expect_success 'barf on incomplete string' ' + cat >.git/config <<-\EOF && + # broken section line + [section] + key = "value string + EOF + test_must_fail git config --get section.key >actual 2>error && + grep " line 3 " error +' + test_done |