X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=connect.c;h=02e738a0146a5c46aaf3f1d8edc3c055a99e98b9;hb=3c8710aeaa81a70ecad9facfc332d843ee37de35;hp=9ae991ac42544716599ff8bf3ebaaa376c8119e4;hpb=443f26cbcac66368eb0ec8a8a250bf5815ad0a10;p=git.git diff --git a/connect.c b/connect.c index 9ae991ac4..02e738a01 100644 --- a/connect.c +++ b/connect.c @@ -5,6 +5,7 @@ #include "refs.h" #include "run-command.h" #include "remote.h" +#include "url.h" static char *server_capabilities; @@ -131,7 +132,7 @@ int path_match(const char *path, int nr, char **match) enum protocol { PROTO_LOCAL = 1, PROTO_SSH, - PROTO_GIT, + PROTO_GIT }; static enum protocol get_protocol(const char *name) @@ -450,7 +451,7 @@ static struct child_process no_fork; struct child_process *git_connect(int fd[2], const char *url_orig, const char *prog, int flags) { - char *url = xstrdup(url_orig); + char *url; char *host, *path; char *end; int c; @@ -466,6 +467,11 @@ struct child_process *git_connect(int fd[2], const char *url_orig, */ signal(SIGCHLD, SIG_DFL); + if (is_url(url_orig)) + url = url_decode(url_orig); + else + url = xstrdup(url_orig); + host = strstr(url, "://"); if (host) { *host = '\0';