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@intel.com