threads / discuss / 20288

remote url format in config

Subject: remote url format in config

## tl;dr

2 messages between Jul 30, 2009 and Jul 30, 2009.

replies: 1people: 2as markdown or json

John te Bokkel / Tempus· Jul 30, 2009, 00:52 UTC · lore

There is a bug in the way the url is stored for remote urls. It is really a minor problem and easily worked around. However it may a good idea for the future to url encode that string.

What happened:
added a remote with two consecutive spaces in the url.

git remote add local_remote /dir/folder with\ \ -\ \ two consecutive\ \ spaces/project.git

git push local_remote master
error: url with only single spaces is not a git repo

the .git/config url is written correctly however it gets munged when it is read from the config.

 url = /dir/folder with  -  two consecutive  spaces/project.git
to make it work correctly, just quote it.
 url = "/dir/folder with  -  two consecutive  spaces/project.git"

perhaps it would be a good idea to url encode the url when it is first written to the config file.

 url = /dir/folder%20with%20%20-%20%20two%20consecutive%20%20spaces/project.git
Björn Steinbrink· Jul 30, 2009, 11:41 UTC · re: John te Bokkel / Tempus · lore

[PATCH] config: Keep inner whitespace verbatim

Configuration values are expected to be quoted when they have leading or trailing whitespace, but inner whitespace should be kept verbatim even if the value is not quoted. This is already documented in git-config(1), but the code caused inner whitespace to be collapsed to a single space, breaking, for example, clones from a path that has two consecutive spaces in it, as future fetches would only see a single space.

Reported-by: John te Bokkel <tanj.tanj@gmail.com>
Signed-off-by: Björn Steinbrink <B.Steinbrink@gmx.de>
---
 config.c               |    6 +++---
 t/t1300-repo-config.sh |    5 +++++
 2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/config.c b/config.c
index 738b244..e25b7d6 100644
--- a/config.c
+++ b/config.c
@@ -62,7 +62,8 @@ static char *parse_value(void)
 		if (comment)
 			continue;
 		if (isspace(c) && !quote) {
-			space = 1;
+			if (len)
+				space++;
 			continue;
 		}
 		if (!quote) {
@@ -72,9 +73,8 @@ static char *parse_value(void)
 			}
 		}
 		if (space) {
-			if (len)
+			for (; space; --space)
 				value[len++] = ' ';
-			space = 0;
 		}
 		if (c == '\\') {
 			c = get_next_char();
diff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh
index 8c43dcd..83b7294 100755
--- a/t/t1300-repo-config.sh
+++ b/t/t1300-repo-config.sh
@@ -755,6 +755,11 @@ echo >>result
 
 test_expect_success '--null --get-regexp' 'cmp result expect'
 
+test_expect_success 'inner whitespace kept verbatim' '
+	git config section.val "foo 	  bar" &&
+	test "z$(git config section.val)" = "zfoo 	  bar"
+'
+
 test_expect_success SYMLINKS 'symlinked configuration' '
 
 	ln -s notyet myconfig &&
-- 
1.6.3.GIT

← back to recent threads