* [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