connect: let callers know if connection is a socket

They might care because they want to do a half-duplex close.
With pipes, that means simply closing the output descriptor;
with a socket, you must actually call shutdown.

Instead of exposing the magic no_fork child_process struct,
let's encapsulate the test in a function.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jeff King 2011-05-16 02:52:11 -04:00 committed by Junio C Hamano
parent 5cbf8246d2
commit 7ffe853b10
2 changed files with 7 additions and 1 deletions

View File

@ -865,6 +865,7 @@ extern struct ref *find_ref_by_name(const struct ref *list, const char *name);
#define CONNECT_VERBOSE (1u << 0) #define CONNECT_VERBOSE (1u << 0)
extern struct child_process *git_connect(int fd[2], const char *url, const char *prog, int flags); extern struct child_process *git_connect(int fd[2], const char *url, const char *prog, int flags);
extern int finish_connect(struct child_process *conn); extern int finish_connect(struct child_process *conn);
extern int git_connection_is_socket(struct child_process *conn);
extern int path_match(const char *path, int nr, char **match); extern int path_match(const char *path, int nr, char **match);
struct extra_have_objects { struct extra_have_objects {
int nr, alloc; int nr, alloc;

View File

@ -633,10 +633,15 @@ struct child_process *git_connect(int fd[2], const char *url_orig,
return conn; return conn;
} }
int git_connection_is_socket(struct child_process *conn)
{
return conn == &no_fork;
}
int finish_connect(struct child_process *conn) int finish_connect(struct child_process *conn)
{ {
int code; int code;
if (!conn || conn == &no_fork) if (!conn || git_connection_is_socket(conn))
return 0; return 0;
code = finish_command(conn); code = finish_command(conn);