Fix "git clone" for git:// protocol
In ba227857(Reduce the number of connects when fetching), we checked the return value of git_connect() to see if the connection was successful. However, for the git:// protocol, there is no need to have another process, so the return value was NULL. Now, it makes sense to assume the rule that git_connect() will return NULL if it fails (at the moment, it die()s if it fails), so return a dummy child process. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Acked-by: Daniel Barkalow <barkalow@iabervon.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
ba227857d2
commit
fb32c9172a
20
connect.c
20
connect.c
@ -472,14 +472,18 @@ char *get_port(char *host)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct child_process no_fork;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This returns NULL if the transport protocol does not need fork(2), or a
|
* This returns a dummy child_process if the transport protocol does not
|
||||||
* struct child_process object if it does. Once done, finish the connection
|
* need fork(2), or a struct child_process object if it does. Once done,
|
||||||
* with finish_connect() with the value returned from this function
|
* finish the connection with finish_connect() with the value returned from
|
||||||
* (it is safe to call finish_connect() with NULL to support the former
|
* this function (it is safe to call finish_connect() with NULL to support
|
||||||
* case).
|
* the former case).
|
||||||
*
|
*
|
||||||
* If it returns, the connect is successful; it just dies on errors.
|
* If it returns, the connect is successful; it just dies on errors (this
|
||||||
|
* will hopefully be changed in a libification effort, to return NULL when
|
||||||
|
* the connection failed).
|
||||||
*/
|
*/
|
||||||
struct child_process *git_connect(int fd[2], const char *url_orig,
|
struct child_process *git_connect(int fd[2], const char *url_orig,
|
||||||
const char *prog, int flags)
|
const char *prog, int flags)
|
||||||
@ -577,7 +581,7 @@ struct child_process *git_connect(int fd[2], const char *url_orig,
|
|||||||
free(url);
|
free(url);
|
||||||
if (free_path)
|
if (free_path)
|
||||||
free(path);
|
free(path);
|
||||||
return NULL;
|
return &no_fork;
|
||||||
}
|
}
|
||||||
|
|
||||||
conn = xcalloc(1, sizeof(*conn));
|
conn = xcalloc(1, sizeof(*conn));
|
||||||
@ -635,7 +639,7 @@ struct child_process *git_connect(int fd[2], const char *url_orig,
|
|||||||
int finish_connect(struct child_process *conn)
|
int finish_connect(struct child_process *conn)
|
||||||
{
|
{
|
||||||
int code;
|
int code;
|
||||||
if (!conn)
|
if (!conn || conn == &no_fork)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
code = finish_command(conn);
|
code = finish_command(conn);
|
||||||
|
Loading…
Reference in New Issue
Block a user