packaging: Add contrib installation
[platform/upstream/git.git] / shell.c
diff --git a/shell.c b/shell.c
index c5439a6..cef7ffd 100644 (file)
--- a/shell.c
+++ b/shell.c
@@ -1,8 +1,10 @@
 #include "cache.h"
 #include "quote.h"
-#include "exec_cmd.h"
+#include "exec-cmd.h"
 #include "strbuf.h"
 #include "run-command.h"
+#include "alias.h"
+#include "prompt.h"
 
 #define COMMAND_DIR "git-shell-commands"
 #define HELP_COMMAND COMMAND_DIR "/help"
@@ -13,31 +15,18 @@ static int do_generic_cmd(const char *me, char *arg)
        const char *my_argv[4];
 
        setup_path();
-       if (!arg || !(arg = sq_dequote(arg)))
+       if (!arg || !(arg = sq_dequote(arg)) || *arg == '-')
                die("bad argument");
-       if (!starts_with(me, "git-"))
+       if (!skip_prefix(me, "git-", &me))
                die("bad command");
 
-       my_argv[0] = me + 4;
+       my_argv[0] = me;
        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 int is_valid_cmd_name(const char *cmd)
 {
        /* Test command contains no . or / characters */
@@ -88,12 +77,11 @@ static void run_shell(void)
                int count;
 
                fprintf(stderr, "git> ");
-               if (strbuf_getline_lf(&line, stdin) == EOF) {
+               if (git_read_line_interactively(&line) == EOF) {
                        fprintf(stderr, "\n");
                        strbuf_release(&line);
                        break;
                }
-               strbuf_trim(&line);
                rawargs = strbuf_detach(&line, NULL);
                split_args = xstrdup(rawargs);
                count = split_cmdline(split_args, &argv);
@@ -134,28 +122,16 @@ static struct commands {
        { "git-receive-pack", do_generic_cmd },
        { "git-upload-pack", do_generic_cmd },
        { "git-upload-archive", do_generic_cmd },
-       { "cvs", do_cvs_cmd },
        { NULL },
 };
 
-int main(int argc, char **argv)
+int cmd_main(int argc, const char **argv)
 {
        char *prog;
        const char **user_argv;
        struct commands *cmd;
        int count;
 
-       git_setup_gettext();
-
-       git_extract_argv0_path(argv[0]);
-
-       /*
-        * Always open file descriptors 0/1/2 to avoid clobbering files
-        * in die().  It also avoids messing up when the pipes are dup'ed
-        * onto stdin/stdout/stderr in the child processes we spawn.
-        */
-       sanitize_stdfds();
-
        /*
         * Special hack to pretend to be a CVS server
         */