1
0
mirror of https://github.com/git/git.git synced 2025-03-15 10:31:28 +00:00

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:
Johannes Schindelin 2006-07-25 20:24:22 +02:00 committed by Junio C Hamano
parent 4ab243a944
commit 6acbcb927f
3 changed files with 58 additions and 47 deletions

View 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 environment variable. If no path is given 'git' will print
the current setting and then exit. 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
--------------------- ---------------------

View 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) if (!help_cmd)
cmd_usage(0, git_exec_path(), NULL); cmd_usage(0, git_exec_path(), NULL);
else if (!strcmp(help_cmd, "--all") || !strcmp(help_cmd, "-a")) else if (!strcmp(help_cmd, "--all") || !strcmp(help_cmd, "-a"))

91
git.c
View File

@ -44,10 +44,42 @@ static int handle_options(const char*** argv, int* argc)
if (cmd[0] != '-') if (cmd[0] != '-')
break; 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 } else if (!strcmp(cmd, "--git-dir")) {
die ("Unknown option: %s", cmd); 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)++; (*argv)++;
(*argc)--; (*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++;
argv++; argc--;
argc--; handle_options(&argv, &argc);
if (argc > 0) {
handle_options(&argv, &argc); if (!strncmp(argv[0], "--", 2))
argv[0] += 2;
cmd = *argv; } else {
/* Default command: "help" */
if (strncmp(cmd, "--", 2)) argv[0] = "help";
break; argc = 1;
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[0] = cmd; cmd = argv[0];
/* /*
* We search for git commands in the following order: * We search for git commands in the following order: