On Mon, 2006-07-03 at 20:40 -0700, Linus Torvalds wrote: > "And, it's painfully slow, even when the repository is up to date" > > and gave a 17-second time. It's faster this evening, down to 8 seconds using ssh and 4 seconds using git. I clearly need to force use of the git protocol. Anyone else like the attached patch? --- connect.c | 18 ++++++++++++++---- 1 files changed, 14 insertions(+), 4 deletions(-) diff --git a/connect.c b/connect.c index 9a87bd9..e74eddc 100644 --- a/connect.c +++ b/connect.c @@ -303,6 +303,7 @@ enum protocol { PROTO_LOCAL = 1, PROTO_SSH, PROTO_GIT, + PROTO_GIT_SSH, }; static enum protocol get_protocol(const char *name) @@ -312,9 +313,9 @@ static enum protocol get_protocol(const if (!strcmp(name, "git")) return PROTO_GIT; if (!strcmp(name, "git+ssh")) - return PROTO_SSH; + return PROTO_GIT_SSH; if (!strcmp(name, "ssh+git")) - return PROTO_SSH; + return PROTO_GIT_SSH; die("I don't handle protocol '%s'", name); } @@ -572,6 +573,14 @@ static void git_proxy_connect(int fd[2], close(pipefd[1][0]); } +/* returns whether the specified command can be interpreted by the daemon */ +int git_is_daemon_command (const char *prog) +{ + if (!strcmp("git-upload-pack", prog)) + return 1; + return 0; +} + /* * Yeah, yeah, fixme. Need to pass in the heads etc. */ @@ -641,7 +650,8 @@ int git_connect(int fd[2], char *url, co *ptr = '\0'; } - if (protocol == PROTO_GIT) { + if (protocol == PROTO_GIT || + (protocol == PROTO_GIT_SSH && git_is_daemon_command (prog))) { /* These underlying connection commands die() if they * cannot connect. */ @@ -678,7 +688,7 @@ int git_connect(int fd[2], char *url, co close(pipefd[0][1]); close(pipefd[1][0]); close(pipefd[1][1]); - if (protocol == PROTO_SSH) { + if (protocol == PROTO_SSH || protocol == PROTO_GIT_SSH) { const char *ssh, *ssh_basename; ssh = getenv("GIT_SSH"); if (!ssh) ssh = "ssh"; -- 1.4.1.g8fced-dirty -- keith.packard@xxxxxxxxx
Attachment:
signature.asc
Description: This is a digitally signed message part