* [RFC/PATCH] git wrapper: add --git-path=<path> and --bare options @ 2006-07-25 17:30 Johannes Schindelin 2006-07-25 17:43 ` Linus Torvalds 0 siblings, 1 reply; 7+ messages in thread From: Johannes Schindelin @ 2006-07-25 17:30 UTC (permalink / raw) To: git, junkio With this, you can say git --bare repack -a -d inside a bare repository, and it will actually work. While at documenting these options, also document the --paginate option. Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de> --- This is on top of my "allow wrapper options in aliases" patch. I hope I did not fsck up the asciidoc formatting; ATM I cannot test that. If you agree this is a good approach, should I also move the --version and --exec-path options into handle_options()? If you do, I will also make this more user-friendly, i.e. it should not crash when saying "git --bare". Documentation/git.txt | 12 +++++++++++- git.c | 9 +++++++++ 2 files changed, 20 insertions(+), 1 deletions(-) diff --git a/Documentation/git.txt b/Documentation/git.txt index ce30581..b5da5f9 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -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-path=<path>:: + Set the path to the repository. This can also be controlled by + setting the GIT_DIR environment variable. + +--bare:: + Same as --git-path=`pwd`. FURTHER DOCUMENTATION --------------------- diff --git a/git.c b/git.c index 8d7c644..e048f54 100644 --- a/git.c +++ b/git.c @@ -46,6 +46,15 @@ static int handle_options(const char*** if (!strcmp(cmd, "-p") || !strcmp(cmd, "--paginate")) { setup_pager(); + } else if (!strcmp(cmd, "--git-dir") && *argc > 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 die ("Unknown option: %s", cmd); -- 1.4.2.rc1.gf725-dirty ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [RFC/PATCH] git wrapper: add --git-path=<path> and --bare options 2006-07-25 17:30 [RFC/PATCH] git wrapper: add --git-path=<path> and --bare options Johannes Schindelin @ 2006-07-25 17:43 ` Linus Torvalds 2006-07-25 17:52 ` Johannes Schindelin 0 siblings, 1 reply; 7+ messages in thread From: Linus Torvalds @ 2006-07-25 17:43 UTC (permalink / raw) To: Johannes Schindelin; +Cc: git, junkio On Tue, 25 Jul 2006, Johannes Schindelin wrote: > > 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] Here you have "--git-dir" > @@ -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-path=<path>:: > + Set the path to the repository. This can also be controlled by > + setting the GIT_DIR environment variable. But here you have "--git-path". > + } else if (!strcmp(cmd, "--git-dir") && *argc > 1) { > + setenv("GIT_DIR", (*argv)[1], 1); > + (*argv)++; > + (*argc)--; > + } else if (!strncmp(cmd, "--git-dir=", 10)) { > + setenv("GIT_DIR", cmd + 10, 1); And here you have "--git-dir" again. Since "--git-dir" makes more sense than "--git-path", I'd suggest just fixing the OPTIONS section ;) Linus ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [RFC/PATCH] git wrapper: add --git-path=<path> and --bare options 2006-07-25 17:43 ` Linus Torvalds @ 2006-07-25 17:52 ` Johannes Schindelin 2006-07-25 18:24 ` [PATCH] " Johannes Schindelin 2006-07-26 6:18 ` [RFC/PATCH] " Uwe Zeisberger 0 siblings, 2 replies; 7+ messages in thread From: Johannes Schindelin @ 2006-07-25 17:52 UTC (permalink / raw) To: Linus Torvalds; +Cc: git, junkio Hi, On Tue, 25 Jul 2006, Linus Torvalds wrote: > Since "--git-dir" makes more sense than "--git-path", I'd suggest just > fixing the OPTIONS section ;) Will do. Thanks. Ciao, Dscho ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] git wrapper: add --git-path=<path> and --bare options 2006-07-25 17:52 ` Johannes Schindelin @ 2006-07-25 18:24 ` Johannes Schindelin 2006-07-25 21:01 ` Junio C Hamano 2006-07-26 6:18 ` [RFC/PATCH] " Uwe Zeisberger 1 sibling, 1 reply; 7+ messages in thread From: Johannes Schindelin @ 2006-07-25 18:24 UTC (permalink / raw) To: Linus Torvalds; +Cc: git, junkio 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> --- The change in builtin-help.c is not only clean, but is also necessary for t0000 on cygwin. I have to run off now, but will answer your comments in about three hours. Documentation/git.txt | 12 ++++++ builtin-help.c | 2 + git.c | 93 +++++++++++++++++++++++++------------------------ 3 files changed, 60 insertions(+), 47 deletions(-) diff --git a/Documentation/git.txt b/Documentation/git.txt index ce30581..29aebe9 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -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-path=`pwd`. FURTHER DOCUMENTATION --------------------- diff --git a/builtin-help.c b/builtin-help.c index 335fe5f..bc1b4da 100644 --- a/builtin-help.c +++ b/builtin-help.c @@ -229,7 +229,7 @@ int cmd_version(int argc, const char **a 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")) diff --git a/git.c b/git.c index 8d7c644..e4b2174 100644 --- a/git.c +++ b/git.c @@ -44,10 +44,44 @@ static int handle_options(const char*** 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 (which by now must be + * "--exec-path", but maybe we will accept + * other arguments some day) + */ + 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)--; @@ -294,50 +328,19 @@ int main(int argc, const char **argv, ch 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: -- 1.4.2.rc1.g8b0c5 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] git wrapper: add --git-path=<path> and --bare options 2006-07-25 18:24 ` [PATCH] " Johannes Schindelin @ 2006-07-25 21:01 ` Junio C Hamano 0 siblings, 0 replies; 7+ messages in thread From: Junio C Hamano @ 2006-07-25 21:01 UTC (permalink / raw) To: Johannes Schindelin; +Cc: git Johannes Schindelin <Johannes.Schindelin@gmx.de> writes: > 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. Thanks. Took a liberty cleaning up a few stuff, but will have both alias-p and this patch in "next" shortly. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [RFC/PATCH] git wrapper: add --git-path=<path> and --bare options 2006-07-25 17:52 ` Johannes Schindelin 2006-07-25 18:24 ` [PATCH] " Johannes Schindelin @ 2006-07-26 6:18 ` Uwe Zeisberger 2006-07-26 7:12 ` Junio C Hamano 1 sibling, 1 reply; 7+ messages in thread From: Uwe Zeisberger @ 2006-07-26 6:18 UTC (permalink / raw) To: Johannes Schindelin; +Cc: Linus Torvalds, git, junkio Hi, Johannes Schindelin wrote: > > Since "--git-dir" makes more sense than "--git-path", I'd suggest just > > fixing the OPTIONS section ;) > > Will do. Thanks. When you're at it, you may want to change the Subject, too. Oh, you already sent out a new patch with the old Subject :-) Best regards Uwe -- Uwe Zeisberger http://www.google.com/search?q=sin%28pi%2F2%29 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [RFC/PATCH] git wrapper: add --git-path=<path> and --bare options 2006-07-26 6:18 ` [RFC/PATCH] " Uwe Zeisberger @ 2006-07-26 7:12 ` Junio C Hamano 0 siblings, 0 replies; 7+ messages in thread From: Junio C Hamano @ 2006-07-26 7:12 UTC (permalink / raw) To: Uwe Zeisberger; +Cc: Johannes Schindelin, Linus Torvalds, git, junkio Uwe Zeisberger <zeisberg@informatik.uni-freiburg.de> writes: > Johannes Schindelin wrote: >> > Since "--git-dir" makes more sense than "--git-path", I'd suggest just >> > fixing the OPTIONS section ;) >> >> Will do. Thanks. > > When you're at it, you may want to change the Subject, too. > > Oh, you already sent out a new patch with the old Subject :-) I've fixed things up to replace all --git-path with --git-dir, I think. ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2006-07-26 7:12 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2006-07-25 17:30 [RFC/PATCH] git wrapper: add --git-path=<path> and --bare options Johannes Schindelin 2006-07-25 17:43 ` Linus Torvalds 2006-07-25 17:52 ` Johannes Schindelin 2006-07-25 18:24 ` [PATCH] " Johannes Schindelin 2006-07-25 21:01 ` Junio C Hamano 2006-07-26 6:18 ` [RFC/PATCH] " Uwe Zeisberger 2006-07-26 7:12 ` Junio C Hamano
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox