git wrapper: add --git-dir=<path> and --bare options
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>
This commit is contained in:
parent
4ab243a944
commit
6acbcb927f
@ -8,7 +8,8 @@ git - the stupid content tracker
|
||||
|
||||
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
|
||||
-----------
|
||||
@ -41,6 +42,15 @@ OPTIONS
|
||||
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
|
||||
---------------------
|
||||
|
@ -229,7 +229,7 @@ int cmd_version(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"))
|
||||
|
91
git.c
91
git.c
@ -44,10 +44,42 @@ static int handle_options(const char*** argv, int* argc)
|
||||
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();
|
||||
} 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)--;
|
||||
@ -293,50 +325,19 @@ int main(int argc, const char **argv, char **envp)
|
||||
die("cannot handle %s internally", cmd);
|
||||
}
|
||||
|
||||
/* Default command: "help" */
|
||||
cmd = "help";
|
||||
|
||||
/* 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:
|
||||
|
Loading…
Reference in New Issue
Block a user