git-ssh-push/pull: usability improvements
authorLinus Torvalds <torvalds@ppc970.osdl.org>
Tue, 7 Jun 2005 21:23:46 +0000 (14:23 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Tue, 7 Jun 2005 21:23:46 +0000 (14:23 -0700)
Allow traditional ssh path specifiers (host:path), and let the user
override the command name on the other end.

With this, I can push to kernel.org with this script

export GIT_SSH_PULL=/home/torvalds/bin/git-ssh-pull
git-ssh-push -a -v -w heads/master heads/master master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

which while not pretty is at least workable.

rsh.c
rsh.h
ssh-pull.c
ssh-push.c

diff --git a/rsh.c b/rsh.c
index 3eb9d91..8eea1d0 100644 (file)
--- a/rsh.c
+++ b/rsh.c
@@ -8,7 +8,7 @@
 
 #define COMMAND_SIZE 4096
 
-int setup_connection(int *fd_in, int *fd_out, char *remote_prog, 
+int setup_connection(int *fd_in, int *fd_out, const char *remote_prog, 
                     char *url, int rmt_argc, char **rmt_argv)
 {
        char *host;
@@ -25,11 +25,13 @@ int setup_connection(int *fd_in, int *fd_out, char *remote_prog,
        }
 
        host = strstr(url, "//");
-       if (!host) {
-               return error("Bad URL: %s", url);
+       if (host) {
+               host += 2;
+               path = strchr(host, '/');
+       } else {
+               host = url;
+               path = strchr(host, ':');
        }
-       host += 2;
-       path = strchr(host, '/');
        if (!path) {
                return error("Bad URL: %s", url);
        }
diff --git a/rsh.h b/rsh.h
index 97e4f20..3b41942 100644 (file)
--- a/rsh.h
+++ b/rsh.h
@@ -1,7 +1,7 @@
 #ifndef RSH_H
 #define RSH_H
 
-int setup_connection(int *fd_in, int *fd_out, char *remote_prog, 
+int setup_connection(int *fd_in, int *fd_out, const char *remote_prog, 
                     char *url, int rmt_argc, char **rmt_argv);
 
 #endif
index c2cb59a..2748412 100644 (file)
@@ -58,6 +58,7 @@ int main(int argc, char **argv)
        char *commit_id;
        char *url;
        int arg = 1;
+       const char *prog = getenv("GIT_SSH_PUSH") ? : "git-ssh-push";
 
        while (arg < argc && argv[arg][0] == '-') {
                if (argv[arg][1] == 't') {
@@ -87,7 +88,7 @@ int main(int argc, char **argv)
        commit_id = argv[arg];
        url = argv[arg + 1];
 
-       if (setup_connection(&fd_in, &fd_out, "git-ssh-push", url, arg, argv + 1))
+       if (setup_connection(&fd_in, &fd_out, prog, url, arg, argv + 1))
                return 1;
 
        if (get_version())
index b67a95b..18c0b65 100644 (file)
@@ -109,6 +109,8 @@ int main(int argc, char **argv)
         char *commit_id;
         char *url;
        int fd_in, fd_out;
+       const char *prog = getenv("GIT_SSH_PULL") ? : "git-ssh-pull";
+
        while (arg < argc && argv[arg][0] == '-') {
                if (argv[arg][1] == 'w')
                        arg++;
@@ -120,7 +122,7 @@ int main(int argc, char **argv)
         }
        commit_id = argv[arg];
        url = argv[arg + 1];
-       if (setup_connection(&fd_in, &fd_out, "git-ssh-pull", url, arg, argv + 1))
+       if (setup_connection(&fd_in, &fd_out, prog, url, arg, argv + 1))
                return 1;
 
        service(fd_in, fd_out);