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@xxxxxxxxxxxxxx> --- config.c | 5 +++++ t/t1300-repo-config.sh | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 0 deletions(-) My usual "I can't code C" disclaimer applies diff --git a/config.c b/config.c index 498259e..1649aae 100644 --- a/config.c +++ b/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; ssize_t offset; +contline: for (offset = offset_-2; offset > 0 && contents[offset] != '\n'; offset--) switch (contents[offset]) { case '=': equal_offset = offset; break; case ']': bracket_offset = offset; break; } + if (offset > 0 && contents[offset-1] == '\\') { + offset_ = offset; + goto contline; + } if (bracket_offset < equal_offset) { *found_bracket = 1; offset = bracket_offset+1; diff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh index 66aeb88..5f7c3a5 100755 --- a/t/t1300-repo-config.sh +++ b/t/t1300-repo-config.sh @@ -72,6 +72,25 @@ EOF 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 [beta] ; silly comment # another comment noIndent= sillyValue ; 'nother silly comment -- 1.5.4 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html