diff options
author | Johannes Schindelin <Johannes.Schindelin@gmx.de> | 2008-02-10 03:06:57 +0000 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-02-09 20:12:54 -0800 |
commit | fb32c9172a1f2828d75f5d17d8ceea8ffe692f2a (patch) | |
tree | 0a43f4b9284124a791579584d61ad23f864d1f28 /connect.c | |
parent | ba227857d24029917f1e939647d826037f026205 (diff) | |
download | git-fb32c9172a1f2828d75f5d17d8ceea8ffe692f2a.tar.gz git-fb32c9172a1f2828d75f5d17d8ceea8ffe692f2a.tar.xz |
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>
Diffstat (limited to 'connect.c')
-rw-r--r-- | connect.c | 20 |
1 files changed, 12 insertions, 8 deletions
@@ -472,14 +472,18 @@ char *get_port(char *host) return NULL; } +static struct child_process no_fork; + /* - * This returns NULL if the transport protocol does not need fork(2), or a - * struct child_process object if it does. Once done, finish the connection - * with finish_connect() with the value returned from this function - * (it is safe to call finish_connect() with NULL to support the former - * case). + * This returns a dummy child_process if the transport protocol does not + * need fork(2), or a struct child_process object if it does. Once done, + * finish the connection with finish_connect() with the value returned from + * this function (it is safe to call finish_connect() with NULL to support + * 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, const char *prog, int flags) @@ -577,7 +581,7 @@ struct child_process *git_connect(int fd[2], const char *url_orig, free(url); if (free_path) free(path); - return NULL; + return &no_fork; } 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 code; - if (!conn) + if (!conn || conn == &no_fork) return 0; code = finish_command(conn); |