diff options
author | Junio C Hamano <gitster@pobox.com> | 2008-08-19 18:05:43 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-08-20 01:36:10 -0700 |
commit | daa0cc9a92c9c2c714aa5f7da6d0ff65b93e0698 (patch) | |
tree | f81442a41f7bbd496be466120a878434c68aab23 /shell.c | |
parent | shell: do not play duplicated definition games to shrink the executable (diff) | |
download | tgif-daa0cc9a92c9c2c714aa5f7da6d0ff65b93e0698.tar.xz |
Build-in "git-shell"
This trivially makes "git-shell" a built-in. It makes the executable even
fatter, though.
And MinGW removed git-shell only because of the funny dependencies; there
is no reason to do so anymore.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Tested-on-MinGW-by: Johannes Sixt <johannes.sixt@telecom.at>
Diffstat (limited to 'shell.c')
-rw-r--r-- | shell.c | 89 |
1 files changed, 0 insertions, 89 deletions
diff --git a/shell.c b/shell.c deleted file mode 100644 index 0f6a727a8c..0000000000 --- a/shell.c +++ /dev/null @@ -1,89 +0,0 @@ -#include "cache.h" -#include "quote.h" -#include "exec_cmd.h" -#include "strbuf.h" - -static int do_generic_cmd(const char *me, char *arg) -{ - const char *my_argv[4]; - - setup_path(); - if (!arg || !(arg = sq_dequote(arg))) - die("bad argument"); - if (prefixcmp(me, "git-")) - die("bad command"); - - my_argv[0] = me + 4; - my_argv[1] = arg; - my_argv[2] = NULL; - - 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(); - 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 }, -}; - -int main(int argc, char **argv) -{ - char *prog; - struct commands *cmd; - - /* - * Special hack to pretend to be a CVS server - */ - if (argc == 2 && !strcmp(argv[1], "cvs server")) - argv--; - - /* - * We do not accept anything but "-c" followed by "cmd arg", - * where "cmd" is a very limited subset of git commands. - */ - else if (argc != 3 || strcmp(argv[1], "-c")) - die("What do you think I am? A shell?"); - - prog = argv[2]; - if (!strncmp(prog, "git", 3) && isspace(prog[3])) - /* Accept "git foo" as if the caller said "git-foo". */ - prog[3] = '-'; - - for (cmd = cmd_list ; cmd->name ; cmd++) { - int len = strlen(cmd->name); - char *arg; - if (strncmp(cmd->name, prog, len)) - continue; - arg = NULL; - switch (prog[len]) { - case '\0': - arg = NULL; - break; - case ' ': - arg = prog + len + 1; - break; - default: - continue; - } - exit(cmd->exec(cmd->name, arg)); - } - die("unrecognized command '%s'", prog); -} |