Skip to content

Commit

Permalink
Fix "git clone" for git:// protocol
Browse files Browse the repository at this point in the history
In ba22785(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>
  • Loading branch information
dscho authored and gitster committed Feb 10, 2008
1 parent ba22785 commit fb32c91
Showing 1 changed file with 12 additions and 8 deletions.
20 changes: 12 additions & 8 deletions connect.c
Expand Up @@ -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)
Expand Down Expand Up @@ -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));
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit fb32c91

Please sign in to comment.