mirror of
https://github.com/git/git.git
synced 2024-11-18 17:23:49 +01:00
decode file:// and ssh:// URLs
We generally treat these as equivalent to "/path/to/repo" and "host:path_to_repo" respectively. However, they are URLs and as such may be percent-encoded. The current code simply uses them as-is without any decoding. With this patch, we will now percent-decode any file:// or ssh:// url (or ssh+git, git+ssh, etc) at the transport layer. We continue to treat plain paths and "host:path" syntax literally. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
638794cde0
commit
9d2e942070
@ -5,6 +5,7 @@
|
||||
#include "refs.h"
|
||||
#include "run-command.h"
|
||||
#include "remote.h"
|
||||
#include "url.h"
|
||||
|
||||
static char *server_capabilities;
|
||||
|
||||
@ -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';
|
||||
|
@ -176,4 +176,16 @@ test_expect_success 'clone respects global branch.autosetuprebase' '
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'respect url-encoding of file://' '
|
||||
git init x+y &&
|
||||
test_must_fail git clone "file://$PWD/x+y" xy-url &&
|
||||
git clone "file://$PWD/x%2By" xy-url
|
||||
'
|
||||
|
||||
test_expect_success 'do not respect url-encoding of non-url path' '
|
||||
git init x+y &&
|
||||
test_must_fail git clone x%2By xy-regular &&
|
||||
git clone x+y xy-regular
|
||||
'
|
||||
|
||||
test_done
|
||||
|
Loading…
Reference in New Issue
Block a user