diff options
author | Junio C Hamano <junkio@cox.net> | 2007-05-20 02:18:50 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-05-20 02:18:50 -0700 |
commit | e223249a13799c047797c80eab21e4e257283c3d (patch) | |
tree | b7648b50ce1279dc682063a9d952d85d01b8004e | |
parent | 063581e9b648b4da3b83061b06aed7ed417411e0 (diff) | |
parent | 7841ce79854868eaaa146c1d018b17fc4f3320be (diff) | |
download | git-e223249a13799c047797c80eab21e4e257283c3d.tar.gz |
Merge branch 'mst/connect'
* mst/connect:
connect: display connection progress
-rw-r--r-- | builtin-archive.c | 2 | ||||
-rw-r--r-- | cache.h | 3 | ||||
-rw-r--r-- | connect.c | 30 | ||||
-rw-r--r-- | fetch-pack.c | 2 | ||||
-rw-r--r-- | peek-remote.c | 2 | ||||
-rw-r--r-- | send-pack.c | 2 |
6 files changed, 30 insertions, 11 deletions
diff --git a/builtin-archive.c b/builtin-archive.c index 7f4e409c99..187491bc17 100644 --- a/builtin-archive.c +++ b/builtin-archive.c @@ -45,7 +45,7 @@ static int run_remote_archiver(const char *remote, int argc, } url = xstrdup(remote); - pid = git_connect(fd, url, exec); + pid = git_connect(fd, url, exec, 0); if (pid < 0) return pid; @@ -461,7 +461,8 @@ struct ref { #define REF_HEADS (1u << 1) #define REF_TAGS (1u << 2) -extern pid_t git_connect(int fd[2], char *url, const char *prog); +#define CONNECT_VERBOSE (1u << 0) +extern pid_t git_connect(int fd[2], char *url, const char *prog, int flags); extern int finish_connect(pid_t pid); extern int path_match(const char *path, int nr, char **match); extern int match_refs(struct ref *src, struct ref *dst, struct ref ***dst_tail, @@ -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. diff --git a/fetch-pack.c b/fetch-pack.c index 06f4aeced4..aa59043c03 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -733,7 +733,7 @@ int main(int argc, char **argv) } if (!dest) usage(fetch_pack_usage); - pid = git_connect(fd, dest, uploadpack); + pid = git_connect(fd, dest, uploadpack, verbose ? CONNECT_VERBOSE : 0); if (pid < 0) return 1; if (heads && nr_heads) diff --git a/peek-remote.c b/peek-remote.c index 96bfac498b..ceb787170e 100644 --- a/peek-remote.c +++ b/peek-remote.c @@ -64,7 +64,7 @@ int main(int argc, char **argv) if (!dest || i != argc - 1) usage(peek_remote_usage); - pid = git_connect(fd, dest, uploadpack); + pid = git_connect(fd, dest, uploadpack, 0); if (pid < 0) return 1; ret = peek_remote(fd, flags); diff --git a/send-pack.c b/send-pack.c index d5b51628df..83ee87dcf8 100644 --- a/send-pack.c +++ b/send-pack.c @@ -393,7 +393,7 @@ int main(int argc, char **argv) usage(send_pack_usage); verify_remote_names(nr_heads, heads); - pid = git_connect(fd, dest, receivepack); + pid = git_connect(fd, dest, receivepack, verbose ? CONNECT_VERBOSE : 0); if (pid < 0) return 1; ret = send_pack(fd[0], fd[1], nr_heads, heads); |