config: Fix --unset for continuation lines
find_beginning_of_line didn't take into account that the previous line might have ended with \ in which case it shouldn't stop but continue its search. Signed-off-by: Frank Lichtenheld <frank@lichtenheld.de> Acked-by: Johannes Schindelin <Johannes.Schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
527270689c
commit
7a31cc0f96
5
config.c
5
config.c
@ -701,12 +701,17 @@ static ssize_t find_beginning_of_line(const char* contents, size_t size,
|
|||||||
size_t equal_offset = size, bracket_offset = size;
|
size_t equal_offset = size, bracket_offset = size;
|
||||||
ssize_t offset;
|
ssize_t offset;
|
||||||
|
|
||||||
|
contline:
|
||||||
for (offset = offset_-2; offset > 0
|
for (offset = offset_-2; offset > 0
|
||||||
&& contents[offset] != '\n'; offset--)
|
&& contents[offset] != '\n'; offset--)
|
||||||
switch (contents[offset]) {
|
switch (contents[offset]) {
|
||||||
case '=': equal_offset = offset; break;
|
case '=': equal_offset = offset; break;
|
||||||
case ']': bracket_offset = offset; break;
|
case ']': bracket_offset = offset; break;
|
||||||
}
|
}
|
||||||
|
if (offset > 0 && contents[offset-1] == '\\') {
|
||||||
|
offset_ = offset;
|
||||||
|
goto contline;
|
||||||
|
}
|
||||||
if (bracket_offset < equal_offset) {
|
if (bracket_offset < equal_offset) {
|
||||||
*found_bracket = 1;
|
*found_bracket = 1;
|
||||||
offset = bracket_offset+1;
|
offset = bracket_offset+1;
|
||||||
|
@ -71,6 +71,25 @@ EOF
|
|||||||
|
|
||||||
test_expect_success 'non-match result' 'cmp .git/config expect'
|
test_expect_success 'non-match result' 'cmp .git/config expect'
|
||||||
|
|
||||||
|
cat > .git/config <<\EOF
|
||||||
|
[alpha]
|
||||||
|
bar = foo
|
||||||
|
[beta]
|
||||||
|
baz = multiple \
|
||||||
|
lines
|
||||||
|
EOF
|
||||||
|
|
||||||
|
test_expect_success 'unset with cont. lines' \
|
||||||
|
'git config --unset beta.baz'
|
||||||
|
|
||||||
|
cat > expect <<\EOF
|
||||||
|
[alpha]
|
||||||
|
bar = foo
|
||||||
|
[beta]
|
||||||
|
EOF
|
||||||
|
|
||||||
|
test_expect_success 'unset with cont. lines is correct' 'cmp .git/config expect'
|
||||||
|
|
||||||
cat > .git/config << EOF
|
cat > .git/config << EOF
|
||||||
[beta] ; silly comment # another comment
|
[beta] ; silly comment # another comment
|
||||||
noIndent= sillyValue ; 'nother silly comment
|
noIndent= sillyValue ; 'nother silly comment
|
||||||
|
Loading…
Reference in New Issue
Block a user