Merge branch 'mst/connect'

* mst/connect:
  connect: display connection progress
maint
Junio C Hamano 2007-05-20 02:18:50 -07:00
commit e223249a13
6 changed files with 30 additions and 11 deletions

View File

@ -45,7 +45,7 @@ static int run_remote_archiver(const char *remote, int argc,
} }


url = xstrdup(remote); url = xstrdup(remote);
pid = git_connect(fd, url, exec); pid = git_connect(fd, url, exec, 0);
if (pid < 0) if (pid < 0)
return pid; return pid;



View File

@ -461,7 +461,8 @@ struct ref {
#define REF_HEADS (1u << 1) #define REF_HEADS (1u << 1)
#define REF_TAGS (1u << 2) #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 finish_connect(pid_t pid);
extern int path_match(const char *path, int nr, char **match); 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, extern int match_refs(struct ref *src, struct ref *dst, struct ref ***dst_tail,

View File

@ -394,7 +394,7 @@ static enum protocol get_protocol(const char *name)
/* /*
* Returns a connected socket() fd, or else die()s. * 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; int sockfd = -1, saved_errno = 0;
char *colon, *end; char *colon, *end;
@ -425,10 +425,16 @@ static int git_tcp_connect_sock(char *host)
hints.ai_socktype = SOCK_STREAM; hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP; hints.ai_protocol = IPPROTO_TCP;


if (flags & CONNECT_VERBOSE)
fprintf(stderr, "Looking up %s ... ", host);

gai = getaddrinfo(host, port, &hints, &ai); gai = getaddrinfo(host, port, &hints, &ai);
if (gai) if (gai)
die("Unable to look up %s (port %s) (%s)", host, port, gai_strerror(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) { for (ai0 = ai; ai; ai = ai->ai_next) {
sockfd = socket(ai->ai_family, sockfd = socket(ai->ai_family,
ai->ai_socktype, ai->ai_protocol); ai->ai_socktype, ai->ai_protocol);
@ -450,6 +456,9 @@ static int git_tcp_connect_sock(char *host)
if (sockfd < 0) if (sockfd < 0)
die("unable to connect a socket (%s)", strerror(saved_errno)); die("unable to connect a socket (%s)", strerror(saved_errno));


if (flags & CONNECT_VERBOSE)
fprintf(stderr, "done.\n");

return sockfd; return sockfd;
} }


@ -458,7 +467,7 @@ static int git_tcp_connect_sock(char *host)
/* /*
* Returns a connected socket() fd, or else die()s. * 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; int sockfd = -1, saved_errno = 0;
char *colon, *end; char *colon, *end;
@ -485,6 +494,9 @@ static int git_tcp_connect_sock(char *host)
port = colon + 1; port = colon + 1;
} }


if (flags & CONNECT_VERBOSE)
fprintf(stderr, "Looking up %s ... ", host);

he = gethostbyname(host); he = gethostbyname(host);
if (!he) if (!he)
die("Unable to look up %s (%s)", host, hstrerror(h_errno)); 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; 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++) { for (ap = he->h_addr_list; *ap; ap++) {
sockfd = socket(he->h_addrtype, SOCK_STREAM, 0); sockfd = socket(he->h_addrtype, SOCK_STREAM, 0);
if (sockfd < 0) { if (sockfd < 0) {
@ -521,15 +536,18 @@ static int git_tcp_connect_sock(char *host)
if (sockfd < 0) if (sockfd < 0)
die("unable to connect a socket (%s)", strerror(saved_errno)); die("unable to connect a socket (%s)", strerror(saved_errno));


if (flags & CONNECT_VERBOSE)
fprintf(stderr, "done.\n");

return sockfd; return sockfd;
} }


#endif /* NO_IPV6 */ #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[0] = sockfd;
fd[1] = dup(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. * 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 *host, *path = url;
char *end; char *end;
@ -719,7 +737,7 @@ pid_t git_connect(int fd[2], char *url, const char *prog)
if (git_use_proxy(host)) if (git_use_proxy(host))
git_proxy_connect(fd, host); git_proxy_connect(fd, host);
else else
git_tcp_connect(fd, host); git_tcp_connect(fd, host, flags);
/* /*
* Separate original protocol components prog and path * Separate original protocol components prog and path
* from extended components with a NUL byte. * from extended components with a NUL byte.

View File

@ -733,7 +733,7 @@ int main(int argc, char **argv)
} }
if (!dest) if (!dest)
usage(fetch_pack_usage); usage(fetch_pack_usage);
pid = git_connect(fd, dest, uploadpack); pid = git_connect(fd, dest, uploadpack, verbose ? CONNECT_VERBOSE : 0);
if (pid < 0) if (pid < 0)
return 1; return 1;
if (heads && nr_heads) if (heads && nr_heads)

View File

@ -64,7 +64,7 @@ int main(int argc, char **argv)
if (!dest || i != argc - 1) if (!dest || i != argc - 1)
usage(peek_remote_usage); usage(peek_remote_usage);


pid = git_connect(fd, dest, uploadpack); pid = git_connect(fd, dest, uploadpack, 0);
if (pid < 0) if (pid < 0)
return 1; return 1;
ret = peek_remote(fd, flags); ret = peek_remote(fd, flags);

View File

@ -393,7 +393,7 @@ int main(int argc, char **argv)
usage(send_pack_usage); usage(send_pack_usage);
verify_remote_names(nr_heads, heads); 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) if (pid < 0)
return 1; return 1;
ret = send_pack(fd[0], fd[1], nr_heads, heads); ret = send_pack(fd[0], fd[1], nr_heads, heads);