git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 2/2] After renaming a section, print any trailing variable definitions

From
Alex Vandiver <alex@chmrr.net>
Date
Jul 24, 2009, 21:21 UTC
Message-ID
<1248470504-16326-3-git-send-email-alex@chmrr.net>
In-Reply-To
<1248470504-16326-2-git-send-email-alex@chmrr.net>
Signed-off-by: Alex Vandiver <alex@chmrr.net>
---
 config.c               |   22 +++++++++++++++++++---
 t/t1300-repo-config.sh |   22 ++++++++++++++++++++++
 2 files changed, 41 insertions(+), 3 deletions(-)
diff --git a/config.c b/config.c
index 7d6f6f6..3a2965e 100644
--- a/config.c
+++ b/config.c
@@ -1257,6 +1257,7 @@ int git_config_rename_section(const char *old_name, const char *new_name)
 	while (fgets(buf, sizeof(buf), config_file)) {
 		int i;
 		int length;
+		char* output = buf;
 		for (i = 0; buf[i] && isspace(buf[i]); i++)
 			; /* do nothing */
 		if (buf[i] == '[') {
@@ -1273,14 +1274,29 @@ int git_config_rename_section(const char *old_name, const char *new_name)
 					ret = write_error(lock->filename);
 					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;
 		}
 		if (remove)
 			continue;
-		length = strlen(buf);
-		if (write_in_full(out_fd, buf, length) != length) {
+		length = strlen(output);
+		if (write_in_full(out_fd, output, length) != length) {
 			ret = write_error(lock->filename);
 			goto out;
 		}
diff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh
index 43ea283..8c43dcd 100755
--- a/t/t1300-repo-config.sh
+++ b/t/t1300-repo-config.sh
@@ -460,6 +460,28 @@ EOF
 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
   [branch "zwei"] a = 1 [branch "vier"]
 EOF
 
-- 
1.6.3.3.473.gb74fc4.dirty
Previous: Alex VandiverNext: Nanako Shiraishi
Message 3 of 17 in “Section renaming can lose content”
  1. 0/2 Section renaming can lose contentAlex Vandiver, Jul 24, 2009
  2. 1/2 Make section_name_match start on '[', and return the length on successAlex Vandiver, Jul 24, 2009
  3. 2/2 After renaming a section, print any trailing variable definitionsAlex Vandiver, Jul 24, 2009
  4. Nanako ShiraishiJul 24, 2009
  5. Alex VandiverJul 24, 2009
  6. Make git config fail on variables with no section, as documentedAlex Vandiver, Jul 26, 2009
  7. Johannes SchindelinJul 26, 2009
  8. Alex VandiverJul 26, 2009
  9. Johannes SchindelinJul 26, 2009
  10. Alex VandiverJul 26, 2009
  11. Junio C HamanoJul 24, 2009
  12. (unknown)Nanako Shiraishi, Jul 25, 2009
  13. Johannes SchindelinJul 25, 2009
  14. Johannes SchindelinJul 25, 2009
  15. Alex VandiverJul 25, 2009
  16. Junio C HamanoJul 25, 2009
  17. Johannes SchindelinJul 25, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.