aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config.c14
-rwxr-xr-xt/t1300-config.sh2
2 files changed, 14 insertions, 2 deletions
diff --git a/config.c b/config.c
index 69c4188ce8..d4527beb44 100644
--- a/config.c
+++ b/config.c
@@ -2336,6 +2336,12 @@ static int store_aux_event(enum config_event_t type,
store->parsed[store->parsed_nr].is_keys_section =
cf->var.len - 1 == store->baselen &&
!strncasecmp(cf->var.buf, store->key, store->baselen);
+ if (store->is_keys_section) {
+ store->section_seen = 1;
+ ALLOC_GROW(store->seen, store->seen_nr + 1,
+ store->seen_alloc);
+ store->seen[store->seen_nr] = store->parsed_nr;
+ }
}
store->parsed_nr++;
@@ -2770,7 +2776,13 @@ int git_config_set_multivar_in_file_gently(const char *config_filename,
new_line = 0;
if (!store.key_seen) {
- replace_end = copy_end = store.parsed[j].end;
+ copy_end = store.parsed[j].end;
+ /* include '\n' when copying section header */
+ if (copy_end > 0 && copy_end < contents_sz &&
+ contents[copy_end - 1] != '\n' &&
+ contents[copy_end] == '\n')
+ copy_end++;
+ replace_end = copy_end;
} else {
replace_end = store.parsed[j].end;
copy_end = store.parsed[j].begin;
diff --git a/t/t1300-config.sh b/t/t1300-config.sh
index 92aaa53794..e43982a9c1 100755
--- a/t/t1300-config.sh
+++ b/t/t1300-config.sh
@@ -1483,7 +1483,7 @@ test_expect_success '--unset-all removes section if empty & uncommented' '
test_line_count = 0 .git/config
'
-test_expect_failure 'adding a key into an empty section reuses header' '
+test_expect_success 'adding a key into an empty section reuses header' '
cat >.git/config <<-\EOF &&
[section]
EOF