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:
parent
9b15770220
commit
356bece0a2
32
connect.c
32
connect.c
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user