]> asedeno.scripts.mit.edu Git - git.git/commitdiff
git wrapper: add --git-dir=<path> and --bare options
authorJohannes Schindelin <Johannes.Schindelin@gmx.de>
Tue, 25 Jul 2006 18:24:22 +0000 (20:24 +0200)
committerJunio C Hamano <junkio@cox.net>
Tue, 25 Jul 2006 21:15:47 +0000 (14:15 -0700)
With this, you can say

git --bare repack -a -d

inside a bare repository, and it will actually work. While at it,
also move the --version, --help and --exec-path options to the
handle_options() function.

While at documenting the new options, also document the --paginate
option.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Documentation/git.txt
builtin-help.c
git.c

index ce3058182fead833c45daf02a2806f151b15f61f..7310a2b8b8bc474f53d498d254cab772a8ef45ae 100644 (file)
@@ -8,7 +8,8 @@ git - the stupid content tracker
 
 SYNOPSIS
 --------
 
 SYNOPSIS
 --------
-'git' [--version] [--exec-path[=GIT_EXEC_PATH]] [--help] COMMAND [ARGS]
+'git' [--version] [--exec-path[=GIT_EXEC_PATH]] [-p|--paginate]
+       [--bare] [--git-dir=GIT_DIR] [--help] COMMAND [ARGS]
 
 DESCRIPTION
 -----------
 
 DESCRIPTION
 -----------
@@ -41,6 +42,15 @@ OPTIONS
        environment variable. If no path is given 'git' will print
        the current setting and then exit.
 
        environment variable. If no path is given 'git' will print
        the current setting and then exit.
 
+-p|--paginate::
+       Pipe all output into 'less' (or if set, $PAGER).
+
+--git-dir=<path>::
+       Set the path to the repository. This can also be controlled by
+       setting the GIT_DIR environment variable.
+
+--bare::
+       Same as --git-dir=`pwd`.
 
 FURTHER DOCUMENTATION
 ---------------------
 
 FURTHER DOCUMENTATION
 ---------------------
index 335fe5fedcc6523a3b49a3e00686fe381098bcda..bc1b4da3bc0186487fac40173203cac91c1e3710 100644 (file)
@@ -229,7 +229,7 @@ int cmd_version(int argc, const char **argv, char **envp)
 
 int cmd_help(int argc, const char **argv, char **envp)
 {
 
 int cmd_help(int argc, const char **argv, char **envp)
 {
-       const char *help_cmd = argv[1];
+       const char *help_cmd = argc > 1 ? argv[1] : NULL;
        if (!help_cmd)
                cmd_usage(0, git_exec_path(), NULL);
        else if (!strcmp(help_cmd, "--all") || !strcmp(help_cmd, "-a"))
        if (!help_cmd)
                cmd_usage(0, git_exec_path(), NULL);
        else if (!strcmp(help_cmd, "--all") || !strcmp(help_cmd, "-a"))
diff --git a/git.c b/git.c
index c0bd19d0ef2f44608425e35b6e80ff1baef31564..885e1ce75b5c085c544c74029d2a32562b4fcaa1 100644 (file)
--- a/git.c
+++ b/git.c
@@ -44,10 +44,42 @@ static int handle_options(const char*** argv, int* argc)
                if (cmd[0] != '-')
                        break;
 
                if (cmd[0] != '-')
                        break;
 
-               if (!strcmp(cmd, "-p") || !strcmp(cmd, "--paginate")) {
+               /*
+                * For legacy reasons, the "version" and "help"
+                * commands can be written with "--" prepended
+                * to make them look like flags.
+                */
+               if (!strcmp(cmd, "--help") || !strcmp(cmd, "--version"))
+                       break;
+
+               /*
+                * Check remaining flags.
+                */
+               if (!strncmp(cmd, "--exec-path", 11)) {
+                       cmd += 11;
+                       if (*cmd == '=')
+                               git_set_exec_path(cmd + 1);
+                       else {
+                               puts(git_exec_path());
+                               exit(0);
+                       }
+               } else if (!strcmp(cmd, "-p") || !strcmp(cmd, "--paginate")) {
                        setup_pager();
                        setup_pager();
-               } else
-                       die ("Unknown option: %s", cmd);
+               } else if (!strcmp(cmd, "--git-dir")) {
+                       if (*argc < 1)
+                               return -1;
+                       setenv("GIT_DIR", (*argv)[1], 1);
+                       (*argv)++;
+                       (*argc)--;
+               } else if (!strncmp(cmd, "--git-dir=", 10)) {
+                       setenv("GIT_DIR", cmd + 10, 1);
+               } else if (!strcmp(cmd, "--bare")) {
+                       static char git_dir[1024];
+                       setenv("GIT_DIR", getcwd(git_dir, 1024), 1);
+               } else {
+                       fprintf(stderr, "Unknown option: %s\n", cmd);
+                       cmd_usage(0, NULL, NULL);
+               }
 
                (*argv)++;
                (*argc)--;
 
                (*argv)++;
                (*argc)--;
@@ -293,50 +325,19 @@ int main(int argc, const char **argv, char **envp)
                die("cannot handle %s internally", cmd);
        }
 
                die("cannot handle %s internally", cmd);
        }
 
-       /* Default command: "help" */
-       cmd = "help";
-
        /* Look for flags.. */
        /* Look for flags.. */
-       while (argc > 1) {
-               argv++;
-               argc--;
-
-               handle_options(&argv, &argc);
-
-               cmd = *argv;
-
-               if (strncmp(cmd, "--", 2))
-                       break;
-
-               cmd += 2;
-
-               /*
-                * For legacy reasons, the "version" and "help"
-                * commands can be written with "--" prepended
-                * to make them look like flags.
-                */
-               if (!strcmp(cmd, "help"))
-                       break;
-               if (!strcmp(cmd, "version"))
-                       break;
-
-               /*
-                * Check remaining flags (which by now must be
-                * "--exec-path", but maybe we will accept
-                * other arguments some day)
-                */
-               if (!strncmp(cmd, "exec-path", 9)) {
-                       cmd += 9;
-                       if (*cmd == '=') {
-                               git_set_exec_path(cmd + 1);
-                               continue;
-                       }
-                       puts(git_exec_path());
-                       exit(0);
-               }
-               cmd_usage(0, NULL, NULL);
+       argv++;
+       argc--;
+       handle_options(&argv, &argc);
+       if (argc > 0) {
+               if (!strncmp(argv[0], "--", 2))
+                       argv[0] += 2;
+       } else {
+               /* Default command: "help" */
+               argv[0] = "help";
+               argc = 1;
        }
        }
-       argv[0] = cmd;
+       cmd = argv[0];
 
        /*
         * We search for git commands in the following order:
 
        /*
         * We search for git commands in the following order: