On Thu, Mar 29, 2018 at 8:18 AM, Johannes Schindelin
<[email protected]> wrote:
> Currently, we are slightly overzealous When removing an entry from a
> config file of this form:
>
> [abc]a
> [xyz]
> key = value
>
> When calling `git config --unset abc.a` on this file, it leaves this
> (invalid) config behind:
>
> [
> [xyz]
> key = value
>
> The reason is that we try to search for the beginning of the line (or
> for the end of the preceding section header on the same line) that
> defines abc.a, but as an optimization, we subtract 2 from the offset
> pointing just after the definition before we call
> find_beginning_of_line(). That function, however, *also* performs that
> optimization and promptly fails to find the section header correctly.
This commit message would be more convincing if we had it in test form.
[abc]a
is not written by Git, but would be written from an outside tool or person
and we barely cope with it?
Thanks,
Stefan
>
> Signed-off-by: Johannes Schindelin <[email protected]>
> ---
> config.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/config.c b/config.c
> index b0c20e6cb8a..5cc049aaef0 100644
> --- a/config.c
> +++ b/config.c
> @@ -2632,7 +2632,7 @@ int git_config_set_multivar_in_file_gently(const char
> *config_filename,
> } else
> copy_end = find_beginning_of_line(
> contents, contents_sz,
> - store.offset[i]-2, &new_line);
> + store.offset[i], &new_line);
>
> if (copy_end > 0 && contents[copy_end-1] != '\n')
> new_line = 1;
> --
> 2.16.2.windows.1.26.g2cc3565eb4b
>
>