diff options
author | Junio C Hamano <gitster@pobox.com> | 2016-10-27 14:58:49 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2016-10-27 14:58:49 -0700 |
commit | 65aaa29f7d767acf744796ab47cb3a74dbb1c324 (patch) | |
tree | 7fe4dc74d5c9fccdc9980c20013f9b1e5f0c1bd7 /builtin | |
parent | 0d9c527d5963fca098ea4964f4129511bd5d82d8 (diff) | |
parent | 77b63ac31e5e1a67a34cfb7567ca1673a596be71 (diff) | |
download | git-65aaa29f7d767acf744796ab47cb3a74dbb1c324.tar.gz |
Merge branch 'sb/submodule-ignore-trailing-slash'
A minor regression fix for "git submodule".
* sb/submodule-ignore-trailing-slash:
t0060: sidestep surprising path mangling results on Windows
submodule: ignore trailing slash in relative url
submodule: ignore trailing slash on superproject URL
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/submodule--helper.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index 6182eb3197..4beeda5f9f 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -95,6 +95,8 @@ static int chop_last_dir(char **remoteurl, int is_relative) * NEEDSWORK: This works incorrectly on the domain and protocol part. * remote_url url outcome expectation * http://a.com/b ../c http://a.com/c as is + * http://a.com/b/ ../c http://a.com/c same as previous line, but + * ignore trailing slash in url * http://a.com/b ../../c http://c error out * http://a.com/b ../../../c http:/c error out * http://a.com/b ../../../../c http:c error out @@ -113,8 +115,8 @@ static char *relative_url(const char *remote_url, struct strbuf sb = STRBUF_INIT; size_t len = strlen(remoteurl); - if (is_dir_sep(remoteurl[len])) - remoteurl[len] = '\0'; + if (is_dir_sep(remoteurl[len-1])) + remoteurl[len-1] = '\0'; if (!url_is_local_not_ssh(remoteurl) || is_absolute_path(remoteurl)) is_relative = 0; @@ -147,6 +149,8 @@ static char *relative_url(const char *remote_url, } strbuf_reset(&sb); strbuf_addf(&sb, "%s%s%s", remoteurl, colonsep ? ":" : "/", url); + if (ends_with(url, "/")) + strbuf_setlen(&sb, sb.len - 1); free(remoteurl); if (starts_with_dot_slash(sb.buf)) |