git-ssh-push/pull: usability improvements

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.
This commit is contained in:
Linus Torvalds 2005-06-07 14:23:46 -07:00
parent 972d1bb067
commit 001d4a27db
4 changed files with 13 additions and 8 deletions

12
rsh.c

@ -8,7 +8,7 @@
#define COMMAND_SIZE 4096 #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 *url, int rmt_argc, char **rmt_argv)
{ {
char *host; char *host;
@ -25,11 +25,13 @@ int setup_connection(int *fd_in, int *fd_out, char *remote_prog,
} }
host = strstr(url, "//"); host = strstr(url, "//");
if (!host) { if (host) {
return error("Bad URL: %s", url); host += 2;
path = strchr(host, '/');
} else {
host = url;
path = strchr(host, ':');
} }
host += 2;
path = strchr(host, '/');
if (!path) { if (!path) {
return error("Bad URL: %s", url); return error("Bad URL: %s", url);
} }

2
rsh.h

@ -1,7 +1,7 @@
#ifndef RSH_H #ifndef RSH_H
#define 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); char *url, int rmt_argc, char **rmt_argv);
#endif #endif

@ -58,6 +58,7 @@ int main(int argc, char **argv)
char *commit_id; char *commit_id;
char *url; char *url;
int arg = 1; int arg = 1;
const char *prog = getenv("GIT_SSH_PUSH") ? : "git-ssh-push";
while (arg < argc && argv[arg][0] == '-') { while (arg < argc && argv[arg][0] == '-') {
if (argv[arg][1] == 't') { if (argv[arg][1] == 't') {
@ -87,7 +88,7 @@ int main(int argc, char **argv)
commit_id = argv[arg]; commit_id = argv[arg];
url = argv[arg + 1]; 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; return 1;
if (get_version()) if (get_version())

@ -109,6 +109,8 @@ int main(int argc, char **argv)
char *commit_id; char *commit_id;
char *url; char *url;
int fd_in, fd_out; int fd_in, fd_out;
const char *prog = getenv("GIT_SSH_PULL") ? : "git-ssh-pull";
while (arg < argc && argv[arg][0] == '-') { while (arg < argc && argv[arg][0] == '-') {
if (argv[arg][1] == 'w') if (argv[arg][1] == 'w')
arg++; arg++;
@ -120,7 +122,7 @@ int main(int argc, char **argv)
} }
commit_id = argv[arg]; commit_id = argv[arg];
url = argv[arg + 1]; 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; return 1;
service(fd_in, fd_out); service(fd_in, fd_out);