GIT: Support [address] in URLs

Allow IPv6address/IPvFuture enclosed by [] in URLs, like:
   git push '[3ffe:ffff:...:1]:GIT/git'
or
   git push 'ssh://[3ffe:ffff:...:1]/GIT/git'

Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
YOSHIFUJI Hideaki / 吉藤英明 2005-12-21 19:23:42 +09:00 committed by Junio C Hamano
parent 9b15770220
commit 356bece0a2

View File

@ -561,7 +561,8 @@ int git_connect(int fd[2], char *url, const char *prog)
{ {
char command[1024]; char command[1024];
char *host, *path = url; char *host, *path = url;
char *colon = NULL; char *end;
int c;
int pipefd[2][2]; int pipefd[2][2];
pid_t pid; pid_t pid;
enum protocol protocol = PROTO_LOCAL; enum protocol protocol = PROTO_LOCAL;
@ -571,15 +572,30 @@ int git_connect(int fd[2], char *url, const char *prog)
*host = '\0'; *host = '\0';
protocol = get_protocol(url); protocol = get_protocol(url);
host += 3; host += 3;
path = strchr(host, '/'); c = '/';
} } else {
else {
host = url; host = url;
if ((colon = strchr(host, ':'))) { c = ':';
}
if (host[0] == '[') {
end = strchr(host + 1, ']');
if (end) {
*end = 0;
end++;
host++;
} else
end = host;
} else
end = host;
path = strchr(end, c);
if (c == ':') {
if (path) {
protocol = PROTO_SSH; protocol = PROTO_SSH;
*colon = '\0'; *path++ = '\0';
path = colon + 1; } else
} path = host;
} }
if (!path || !*path) if (!path || !*path)