http-fetch: don't use double-slash as directory separator in URLs
Please see http://bugs.debian.org/409887 http-fetch expected the URL given at the command line to have a trailing slash anyway, and then added '/objects...' when requesting objects files from the http server. Now it doesn't require the trailing slash in <url> anymore, and strips trailing slashes if given nonetheless. Signed-off-by: Gerrit Pape <pape@smarden.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
fa21b60232
commit
2afea3bcd2
@ -60,7 +60,7 @@ Perhaps git-update-server-info needs to be run there?"
|
|||||||
else
|
else
|
||||||
tname=$name
|
tname=$name
|
||||||
fi
|
fi
|
||||||
git-http-fetch $v -a -w "$tname" "$name" "$1/" || exit 1
|
git-http-fetch $v -a -w "$tname" "$name" "$1" || exit 1
|
||||||
done <"$clone_tmp/refs"
|
done <"$clone_tmp/refs"
|
||||||
rm -fr "$clone_tmp"
|
rm -fr "$clone_tmp"
|
||||||
http_fetch "$1/HEAD" "$GIT_DIR/REMOTE_HEAD" ||
|
http_fetch "$1/HEAD" "$GIT_DIR/REMOTE_HEAD" ||
|
||||||
|
@ -248,7 +248,7 @@ fetch_per_ref () {
|
|||||||
expr "z$head" : "z$_x40\$" >/dev/null ||
|
expr "z$head" : "z$_x40\$" >/dev/null ||
|
||||||
die "No such ref $remote_name at $remote"
|
die "No such ref $remote_name at $remote"
|
||||||
echo >&2 "Fetching $remote_name from $remote using $proto"
|
echo >&2 "Fetching $remote_name from $remote using $proto"
|
||||||
git-http-fetch -v -a "$head" "$remote/" || exit
|
git-http-fetch -v -a "$head" "$remote" || exit
|
||||||
;;
|
;;
|
||||||
rsync://*)
|
rsync://*)
|
||||||
test -n "$shallow_depth" &&
|
test -n "$shallow_depth" &&
|
||||||
|
21
http-fetch.c
21
http-fetch.c
@ -16,7 +16,7 @@ static struct curl_slist *no_pragma_header;
|
|||||||
|
|
||||||
struct alt_base
|
struct alt_base
|
||||||
{
|
{
|
||||||
const char *base;
|
char *base;
|
||||||
int path_len;
|
int path_len;
|
||||||
int got_indices;
|
int got_indices;
|
||||||
struct packed_git *packs;
|
struct packed_git *packs;
|
||||||
@ -158,12 +158,12 @@ static void start_object_request(struct object_request *obj_req)
|
|||||||
|
|
||||||
SHA1_Init(&obj_req->c);
|
SHA1_Init(&obj_req->c);
|
||||||
|
|
||||||
url = xmalloc(strlen(obj_req->repo->base) + 50);
|
url = xmalloc(strlen(obj_req->repo->base) + 51);
|
||||||
obj_req->url = xmalloc(strlen(obj_req->repo->base) + 50);
|
obj_req->url = xmalloc(strlen(obj_req->repo->base) + 51);
|
||||||
strcpy(url, obj_req->repo->base);
|
strcpy(url, obj_req->repo->base);
|
||||||
posn = url + strlen(obj_req->repo->base);
|
posn = url + strlen(obj_req->repo->base);
|
||||||
strcpy(posn, "objects/");
|
strcpy(posn, "/objects/");
|
||||||
posn += 8;
|
posn += 9;
|
||||||
memcpy(posn, hex, 2);
|
memcpy(posn, hex, 2);
|
||||||
posn += 2;
|
posn += 2;
|
||||||
*(posn++) = '/';
|
*(posn++) = '/';
|
||||||
@ -938,14 +938,14 @@ static char *quote_ref_url(const char *base, const char *ref)
|
|||||||
int len, baselen, ch;
|
int len, baselen, ch;
|
||||||
|
|
||||||
baselen = strlen(base);
|
baselen = strlen(base);
|
||||||
len = baselen + 6; /* "refs/" + NUL */
|
len = baselen + 7; /* "/refs/" + NUL */
|
||||||
for (cp = ref; (ch = *cp) != 0; cp++, len++)
|
for (cp = ref; (ch = *cp) != 0; cp++, len++)
|
||||||
if (needs_quote(ch))
|
if (needs_quote(ch))
|
||||||
len += 2; /* extra two hex plus replacement % */
|
len += 2; /* extra two hex plus replacement % */
|
||||||
qref = xmalloc(len);
|
qref = xmalloc(len);
|
||||||
memcpy(qref, base, baselen);
|
memcpy(qref, base, baselen);
|
||||||
memcpy(qref + baselen, "refs/", 5);
|
memcpy(qref + baselen, "/refs/", 6);
|
||||||
for (cp = ref, dp = qref + baselen + 5; (ch = *cp) != 0; cp++) {
|
for (cp = ref, dp = qref + baselen + 6; (ch = *cp) != 0; cp++) {
|
||||||
if (needs_quote(ch)) {
|
if (needs_quote(ch)) {
|
||||||
*dp++ = '%';
|
*dp++ = '%';
|
||||||
*dp++ = hex((ch >> 4) & 0xF);
|
*dp++ = hex((ch >> 4) & 0xF);
|
||||||
@ -1044,7 +1044,10 @@ int main(int argc, const char **argv)
|
|||||||
no_pragma_header = curl_slist_append(no_pragma_header, "Pragma:");
|
no_pragma_header = curl_slist_append(no_pragma_header, "Pragma:");
|
||||||
|
|
||||||
alt = xmalloc(sizeof(*alt));
|
alt = xmalloc(sizeof(*alt));
|
||||||
alt->base = url;
|
alt->base = xmalloc(strlen(url) + 1);
|
||||||
|
strcpy(alt->base, url);
|
||||||
|
for (path = alt->base + strlen(alt->base) - 1; *path == '/'; --path)
|
||||||
|
*path = 0;
|
||||||
alt->got_indices = 0;
|
alt->got_indices = 0;
|
||||||
alt->packs = NULL;
|
alt->packs = NULL;
|
||||||
alt->next = NULL;
|
alt->next = NULL;
|
||||||
|
Loading…
Reference in New Issue
Block a user