http-push: when making directories, have a trailing slash in the path name
The function lock_remote() sends MKCOL requests to make leading directories; However, if it does not put a forward slash '/' at the end of the path, the server sends a 301 redirect. By leaving the '/' in place, we can avoid this additional step. Incidentally, at least one version of Curl (7.16.3) does not resend credentials when it follows a 301 redirect, so this commit also fixes a bug. Original patch by Tay Ray Chuan <rctay89@gmail.com>. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
20642801e4
commit
466ddf90c2
@ -1201,7 +1201,8 @@ static struct remote_lock *lock_remote(const char *path, long timeout)
|
||||
/* Make sure leading directories exist for the remote ref */
|
||||
ep = strchr(url + strlen(remote->url) + 1, '/');
|
||||
while (ep) {
|
||||
*ep = 0;
|
||||
char saved_character = ep[1];
|
||||
ep[1] = '\0';
|
||||
slot = get_active_slot();
|
||||
slot->results = &results;
|
||||
curl_easy_setopt(slot->curl, CURLOPT_HTTPGET, 1);
|
||||
@ -1223,7 +1224,7 @@ static struct remote_lock *lock_remote(const char *path, long timeout)
|
||||
free(url);
|
||||
return NULL;
|
||||
}
|
||||
*ep = '/';
|
||||
ep[1] = saved_character;
|
||||
ep = strchr(ep + 1, '/');
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user