diff options
author | Michael S. Tsirkin <mst@dev.mellanox.co.il> | 2007-05-16 20:09:41 +0300 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-05-16 12:48:18 -0700 |
commit | 7841ce79854868eaaa146c1d018b17fc4f3320be (patch) | |
tree | 297639aba698d4c6a1c1b573ea96aa741c6bc9c3 /connect.c | |
parent | fdcb769916c93b53517ef1b4cae447a3333c9b86 (diff) | |
download | git-7841ce79854868eaaa146c1d018b17fc4f3320be.tar.gz |
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>
Diffstat (limited to 'connect.c')
-rw-r--r-- | connect.c | 30 |
1 files changed, 24 insertions, 6 deletions
@@ -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. |