connect: display connection progress
Make git notify the user about host resolution/connection attempts. This is useful both as a progress indicator on slow links, and helps reassure the user there are no firewall problems. Signed-off-by: Michael S. Tsirkin <mst@dev.mellanox.co.il> Acked-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:

committed by
Junio C Hamano

parent
fdcb769916
commit
7841ce7985
30
connect.c
30
connect.c
@ -394,7 +394,7 @@ static enum protocol get_protocol(const char *name)
|
||||
/*
|
||||
* Returns a connected socket() fd, or else die()s.
|
||||
*/
|
||||
static int git_tcp_connect_sock(char *host)
|
||||
static int git_tcp_connect_sock(char *host, int flags)
|
||||
{
|
||||
int sockfd = -1, saved_errno = 0;
|
||||
char *colon, *end;
|
||||
@ -425,10 +425,16 @@ static int git_tcp_connect_sock(char *host)
|
||||
hints.ai_socktype = SOCK_STREAM;
|
||||
hints.ai_protocol = IPPROTO_TCP;
|
||||
|
||||
if (flags & CONNECT_VERBOSE)
|
||||
fprintf(stderr, "Looking up %s ... ", host);
|
||||
|
||||
gai = getaddrinfo(host, port, &hints, &ai);
|
||||
if (gai)
|
||||
die("Unable to look up %s (port %s) (%s)", host, port, gai_strerror(gai));
|
||||
|
||||
if (flags & CONNECT_VERBOSE)
|
||||
fprintf(stderr, "done.\nConnecting to %s (port %s) ... ", host, port);
|
||||
|
||||
for (ai0 = ai; ai; ai = ai->ai_next) {
|
||||
sockfd = socket(ai->ai_family,
|
||||
ai->ai_socktype, ai->ai_protocol);
|
||||
@ -450,6 +456,9 @@ static int git_tcp_connect_sock(char *host)
|
||||
if (sockfd < 0)
|
||||
die("unable to connect a socket (%s)", strerror(saved_errno));
|
||||
|
||||
if (flags & CONNECT_VERBOSE)
|
||||
fprintf(stderr, "done.\n");
|
||||
|
||||
return sockfd;
|
||||
}
|
||||
|
||||
@ -458,7 +467,7 @@ static int git_tcp_connect_sock(char *host)
|
||||
/*
|
||||
* Returns a connected socket() fd, or else die()s.
|
||||
*/
|
||||
static int git_tcp_connect_sock(char *host)
|
||||
static int git_tcp_connect_sock(char *host, int flags)
|
||||
{
|
||||
int sockfd = -1, saved_errno = 0;
|
||||
char *colon, *end;
|
||||
@ -485,6 +494,9 @@ static int git_tcp_connect_sock(char *host)
|
||||
port = colon + 1;
|
||||
}
|
||||
|
||||
if (flags & CONNECT_VERBOSE)
|
||||
fprintf(stderr, "Looking up %s ... ", host);
|
||||
|
||||
he = gethostbyname(host);
|
||||
if (!he)
|
||||
die("Unable to look up %s (%s)", host, hstrerror(h_errno));
|
||||
@ -497,6 +509,9 @@ static int git_tcp_connect_sock(char *host)
|
||||
nport = se->s_port;
|
||||
}
|
||||
|
||||
if (flags & CONNECT_VERBOSE)
|
||||
fprintf(stderr, "done.\nConnecting to %s (port %s) ... ", host, port);
|
||||
|
||||
for (ap = he->h_addr_list; *ap; ap++) {
|
||||
sockfd = socket(he->h_addrtype, SOCK_STREAM, 0);
|
||||
if (sockfd < 0) {
|
||||
@ -521,15 +536,18 @@ static int git_tcp_connect_sock(char *host)
|
||||
if (sockfd < 0)
|
||||
die("unable to connect a socket (%s)", strerror(saved_errno));
|
||||
|
||||
if (flags & CONNECT_VERBOSE)
|
||||
fprintf(stderr, "done.\n");
|
||||
|
||||
return sockfd;
|
||||
}
|
||||
|
||||
#endif /* NO_IPV6 */
|
||||
|
||||
|
||||
static void git_tcp_connect(int fd[2], char *host)
|
||||
static void git_tcp_connect(int fd[2], char *host, int flags)
|
||||
{
|
||||
int sockfd = git_tcp_connect_sock(host);
|
||||
int sockfd = git_tcp_connect_sock(host, flags);
|
||||
|
||||
fd[0] = sockfd;
|
||||
fd[1] = dup(sockfd);
|
||||
@ -646,7 +664,7 @@ static void git_proxy_connect(int fd[2], char *host)
|
||||
*
|
||||
* Does not return a negative value on error; it just dies.
|
||||
*/
|
||||
pid_t git_connect(int fd[2], char *url, const char *prog)
|
||||
pid_t git_connect(int fd[2], char *url, const char *prog, int flags)
|
||||
{
|
||||
char *host, *path = url;
|
||||
char *end;
|
||||
@ -719,7 +737,7 @@ pid_t git_connect(int fd[2], char *url, const char *prog)
|
||||
if (git_use_proxy(host))
|
||||
git_proxy_connect(fd, host);
|
||||
else
|
||||
git_tcp_connect(fd, host);
|
||||
git_tcp_connect(fd, host, flags);
|
||||
/*
|
||||
* Separate original protocol components prog and path
|
||||
* from extended components with a NUL byte.
|
||||
|
Reference in New Issue
Block a user