@matheusbsbs / matheus-bagliano / commits / fb32c9172a
Fork 0

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>

Johannes Schindelin committed Feb 10, 2008 at 03:06 UTC fb32c9172a1f2828d75f5d17d8ceea8ffe692f2a
1 file changed +12 -8
connect.c
+12 -8
@@ -472,14 +472,18 @@ char *get_port(char *host)
472 return NULL;
473 }
474
475 +static struct child_process no_fork;
476 +
477 /*
476 - * This returns NULL if the transport protocol does not need fork(2), or a
477 - * struct child_process object if it does. Once done, finish the connection
478 - * with finish_connect() with the value returned from this function
479 - * (it is safe to call finish_connect() with NULL to support the former
480 - * case).
478 + * This returns a dummy child_process if the transport protocol does not
479 + * need fork(2), or a struct child_process object if it does. Once done,
480 + * finish the connection with finish_connect() with the value returned from
481 + * this function (it is safe to call finish_connect() with NULL to support
482 + * the former case).
483 *
482 - * If it returns, the connect is successful; it just dies on errors.
484 + * If it returns, the connect is successful; it just dies on errors (this
485 + * will hopefully be changed in a libification effort, to return NULL when
486 + * the connection failed).
487 */
488 struct child_process *git_connect(int fd[2], const char *url_orig,
489 const char *prog, int flags)
@@ -577,7 +581,7 @@ struct child_process *git_connect(int fd[2], const char *url_orig,
581 free(url);
582 if (free_path)
583 free(path);
580 - return NULL;
584 + return &no_fork;
585 }
586
587 conn = xcalloc(1, sizeof(*conn));
@@ -635,7 +639,7 @@ struct child_process *git_connect(int fd[2], const char *url_orig,
639 int finish_connect(struct child_process *conn)
640 {
641 int code;
638 - if (!conn)
642 + if (!conn || conn == &no_fork)
643 return 0;
644
645 code = finish_command(conn);