X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=shell.c;h=9826109d5b1b3746aea33dc6b7ebe7b6da19bd22;hb=47e83e3cc0b5b5e2402afb34b7617515f905b7a7;hp=8c08cf0fb339d293383c3dacb8cdfc805afa3727;hpb=64ecb6247f89783a53297436fa452478a83bda53;p=git.git diff --git a/shell.c b/shell.c index 8c08cf0fb..9826109d5 100644 --- a/shell.c +++ b/shell.c @@ -1,6 +1,7 @@ #include "cache.h" #include "quote.h" #include "exec_cmd.h" +#include "strbuf.h" static int do_generic_cmd(const char *me, char *arg) { @@ -8,7 +9,7 @@ static int do_generic_cmd(const char *me, char *arg) if (!arg || !(arg = sq_dequote(arg))) die("bad argument"); - if (strncmp(me, "git-", 4)) + if (prefixcmp(me, "git-")) die("bad command"); my_argv[0] = me + 4; @@ -18,12 +19,28 @@ static int do_generic_cmd(const char *me, char *arg) return execv_git_cmd(my_argv); } +static int do_cvs_cmd(const char *me, char *arg) +{ + const char *cvsserver_argv[3] = { + "cvsserver", "server", NULL + }; + + if (!arg || strcmp(arg, "server")) + die("git-cvsserver only handles server: %s", arg); + + setup_path(NULL); + + return execv_git_cmd(cvsserver_argv); +} + + static struct commands { const char *name; int (*exec)(const char *me, char *arg); } cmd_list[] = { { "git-receive-pack", do_generic_cmd }, { "git-upload-pack", do_generic_cmd }, + { "cvs", do_cvs_cmd }, { NULL }, }; @@ -32,8 +49,10 @@ int main(int argc, char **argv) char *prog; struct commands *cmd; + if (argc == 2 && !strcmp(argv[1], "cvs server")) + argv--; /* We want to see "-c cmd args", and nothing else */ - if (argc != 3 || strcmp(argv[1], "-c")) + else if (argc != 3 || strcmp(argv[1], "-c")) die("What do you think I am? A shell?"); prog = argv[2];