After renaming a section, print any trailing variable definitions
Signed-off-by: Alex Vandiver <alex@chmrr.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
a4c0d463c0
commit
9a5abfc737
22
config.c
22
config.c
@ -1237,6 +1237,7 @@ int git_config_rename_section(const char *old_name, const char *new_name)
|
|||||||
while (fgets(buf, sizeof(buf), config_file)) {
|
while (fgets(buf, sizeof(buf), config_file)) {
|
||||||
int i;
|
int i;
|
||||||
int length;
|
int length;
|
||||||
|
char *output = buf;
|
||||||
for (i = 0; buf[i] && isspace(buf[i]); i++)
|
for (i = 0; buf[i] && isspace(buf[i]); i++)
|
||||||
; /* do nothing */
|
; /* do nothing */
|
||||||
if (buf[i] == '[') {
|
if (buf[i] == '[') {
|
||||||
@ -1253,14 +1254,29 @@ int git_config_rename_section(const char *old_name, const char *new_name)
|
|||||||
ret = write_error(lock->filename);
|
ret = write_error(lock->filename);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
continue;
|
/*
|
||||||
|
* We wrote out the new section, with
|
||||||
|
* a newline, now skip the old
|
||||||
|
* section's length
|
||||||
|
*/
|
||||||
|
output += offset + i;
|
||||||
|
if (strlen(output) > 0) {
|
||||||
|
/*
|
||||||
|
* More content means there's
|
||||||
|
* a declaration to put on the
|
||||||
|
* next line; indent with a
|
||||||
|
* tab
|
||||||
|
*/
|
||||||
|
output -= 1;
|
||||||
|
output[0] = '\t';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
remove = 0;
|
remove = 0;
|
||||||
}
|
}
|
||||||
if (remove)
|
if (remove)
|
||||||
continue;
|
continue;
|
||||||
length = strlen(buf);
|
length = strlen(output);
|
||||||
if (write_in_full(out_fd, buf, length) != length) {
|
if (write_in_full(out_fd, output, length) != length) {
|
||||||
ret = write_error(lock->filename);
|
ret = write_error(lock->filename);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -459,6 +459,28 @@ EOF
|
|||||||
|
|
||||||
test_expect_success "rename succeeded" "test_cmp expect .git/config"
|
test_expect_success "rename succeeded" "test_cmp expect .git/config"
|
||||||
|
|
||||||
|
cat >> .git/config << EOF
|
||||||
|
[branch "vier"] z = 1
|
||||||
|
EOF
|
||||||
|
|
||||||
|
test_expect_success "rename a section with a var on the same line" \
|
||||||
|
'git config --rename-section branch.vier branch.zwei'
|
||||||
|
|
||||||
|
cat > expect << EOF
|
||||||
|
# Hallo
|
||||||
|
#Bello
|
||||||
|
[branch "zwei"]
|
||||||
|
x = 1
|
||||||
|
[branch "zwei"]
|
||||||
|
y = 1
|
||||||
|
[branch "drei"]
|
||||||
|
weird
|
||||||
|
[branch "zwei"]
|
||||||
|
z = 1
|
||||||
|
EOF
|
||||||
|
|
||||||
|
test_expect_success "rename succeeded" "test_cmp expect .git/config"
|
||||||
|
|
||||||
cat >> .git/config << EOF
|
cat >> .git/config << EOF
|
||||||
[branch "zwei"] a = 1 [branch "vier"]
|
[branch "zwei"] a = 1 [branch "vier"]
|
||||||
EOF
|
EOF
|
||||||
|
Loading…
Reference in New Issue
Block a user