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:
parent
972d1bb067
commit
001d4a27db
12
rsh.c
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
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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user