* [PATCH] Check for -amend as a common wrong usage of --amend.
@ 2008-01-24 18:13 Pascal Obry
2008-01-24 18:16 ` Pascal Obry
2008-01-24 18:20 ` Johannes Schindelin
0 siblings, 2 replies; 11+ messages in thread
From: Pascal Obry @ 2008-01-24 18:13 UTC (permalink / raw)
To: git; +Cc: gitster, Pascal Obry
It happens from time to time to type -amend (with a single
dash) when --amend is meant. In those case there is no mistake
and git commit all files modified with the log message set
to "end". As -amend is just doing something stupid it is
better to check for this wrong usage and give hint to the
user about the possible mistake.
Signed-off-by: Pascal Obry <pascal@obry.net>
---
parse-options.c | 7 +++++++
1 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/parse-options.c b/parse-options.c
index 7a08a0c..248515d 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -233,6 +233,13 @@ int parse_options(int argc, const char **argv, const struct option *options,
continue;
}
+ if (!strcmp(arg + 1, "amend")) {
+ error("-amend looks suspicious, don't you meant --amend\n");
+ args.argc--;
+ args.argv++;
+ break;
+ }
+
if (arg[1] != '-') {
args.opt = arg + 1;
do {
--
1.5.4.rc4.23.gcab31
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH] Check for -amend as a common wrong usage of --amend.
2008-01-24 18:13 [PATCH] Check for -amend as a common wrong usage of --amend Pascal Obry
@ 2008-01-24 18:16 ` Pascal Obry
2008-01-26 0:10 ` Jörg Sommer
2008-01-24 18:20 ` Johannes Schindelin
1 sibling, 1 reply; 11+ messages in thread
From: Pascal Obry @ 2008-01-24 18:16 UTC (permalink / raw)
Cc: git, gitster
Typing too fast I've just made this mistake the third time today. It is
of course easy to revert but a check seems appropriate here.
Pascal.
--
--|------------------------------------------------------
--| Pascal Obry Team-Ada Member
--| 45, rue Gabriel Peri - 78114 Magny Les Hameaux FRANCE
--|------------------------------------------------------
--| http://www.obry.net
--| "The best way to travel is by means of imagination"
--|
--| gpg --keyserver wwwkeys.pgp.net --recv-key C1082595
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] Check for -amend as a common wrong usage of --amend.
2008-01-24 18:13 [PATCH] Check for -amend as a common wrong usage of --amend Pascal Obry
2008-01-24 18:16 ` Pascal Obry
@ 2008-01-24 18:20 ` Johannes Schindelin
2008-01-24 18:52 ` Pascal Obry
1 sibling, 1 reply; 11+ messages in thread
From: Johannes Schindelin @ 2008-01-24 18:20 UTC (permalink / raw)
To: Pascal Obry; +Cc: git, gitster, Pascal Obry
Hi,
On Thu, 24 Jan 2008, Pascal Obry wrote:
> diff --git a/parse-options.c b/parse-options.c
> index 7a08a0c..248515d 100644
> --- a/parse-options.c
> +++ b/parse-options.c
> @@ -233,6 +233,13 @@ int parse_options(int argc, const char **argv, const struct option *options,
> continue;
> }
>
> + if (!strcmp(arg + 1, "amend")) {
> + error("-amend looks suspicious, don't you meant --amend\n");
> + args.argc--;
> + args.argv++;
> + break;
> + }
> +
> if (arg[1] != '-') {
> args.opt = arg + 1;
> do {
That is ugly. In a source file which is by no means specific to
git-commit, you cannot possibly mean to check for "amend".
I don't like it,
Dscho
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] Check for -amend as a common wrong usage of --amend.
2008-01-24 18:20 ` Johannes Schindelin
@ 2008-01-24 18:52 ` Pascal Obry
2008-01-24 19:25 ` Charles Bailey
2008-01-24 20:47 ` Joey Hess
0 siblings, 2 replies; 11+ messages in thread
From: Pascal Obry @ 2008-01-24 18:52 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: Pascal Obry, git, gitster
Johannes Schindelin a écrit :
> That is ugly. In a source file which is by no means specific to
> git-commit, you cannot possibly mean to check for "amend".
Agreed :( I'll try to come with something better.
Pascal.
--
--|------------------------------------------------------
--| Pascal Obry Team-Ada Member
--| 45, rue Gabriel Peri - 78114 Magny Les Hameaux FRANCE
--|------------------------------------------------------
--| http://www.obry.net
--| "The best way to travel is by means of imagination"
--|
--| gpg --keyserver wwwkeys.pgp.net --recv-key C1082595
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] Check for -amend as a common wrong usage of --amend.
2008-01-24 18:52 ` Pascal Obry
@ 2008-01-24 19:25 ` Charles Bailey
2008-01-24 19:35 ` Pascal Obry
2008-01-24 20:47 ` Joey Hess
1 sibling, 1 reply; 11+ messages in thread
From: Charles Bailey @ 2008-01-24 19:25 UTC (permalink / raw)
To: Pascal Obry; +Cc: Johannes Schindelin, Pascal Obry, git, gitster
On Thu, Jan 24, 2008 at 07:52:26PM +0100, Pascal Obry wrote:
> Johannes Schindelin a écrit :
> >That is ugly. In a source file which is by no means specific to
> >git-commit, you cannot possibly mean to check for "amend".
>
> Agreed :( I'll try to come with something better.
>
> Pascal.
>
Would this be better handled by a commit-msg hook. E.g.:
test "$(cat $1)" = "end" && {
echo >&2 Commit message is \"end\", possible mis-type of --amend
echo >&2 Use --no-verify to really commit with this commit message
exit 1
}
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] Check for -amend as a common wrong usage of --amend.
2008-01-24 19:25 ` Charles Bailey
@ 2008-01-24 19:35 ` Pascal Obry
0 siblings, 0 replies; 11+ messages in thread
From: Pascal Obry @ 2008-01-24 19:35 UTC (permalink / raw)
To: Charles Bailey; +Cc: Johannes Schindelin, Pascal Obry, git, gitster
Charles Bailey a écrit :
> Would this be better handled by a commit-msg hook. E.g.:
I do not agree. Why check this late as this option is boggus? And
furthermore I do not want to have to install this commit message hook in
all my Git repositories.
Pascal.
--
--|------------------------------------------------------
--| Pascal Obry Team-Ada Member
--| 45, rue Gabriel Peri - 78114 Magny Les Hameaux FRANCE
--|------------------------------------------------------
--| http://www.obry.net
--| "The best way to travel is by means of imagination"
--|
--| gpg --keyserver wwwkeys.pgp.net --recv-key C1082595
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] Check for -amend as a common wrong usage of --amend.
2008-01-24 18:52 ` Pascal Obry
2008-01-24 19:25 ` Charles Bailey
@ 2008-01-24 20:47 ` Joey Hess
2008-01-26 6:20 ` Junio C Hamano
1 sibling, 1 reply; 11+ messages in thread
From: Joey Hess @ 2008-01-24 20:47 UTC (permalink / raw)
To: git
[-- Attachment #1: Type: text/plain, Size: 747 bytes --]
Pascal Obry wrote:
> Johannes Schindelin a écrit :
>> That is ugly. In a source file which is by no means specific to
>> git-commit, you cannot possibly mean to check for "amend".
>
> Agreed :( I'll try to come with something better.
Some option parsers avoid this sort of ambiguity by not allowing short
options that take a string to be bundled in the same word with other
short options.
So, for example, git-commit -am<msg> would not be allowed, while
git-commit -a -m<msg> and perhaps git-commit -am <msg> would be allowed.
There could still be problems if there were a --mend option that could
be typoed as -mend.
I don't know enough about compatability to say if this would work for git.
--
see shy jo
<relurk>
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] Check for -amend as a common wrong usage of --amend.
2008-01-24 18:16 ` Pascal Obry
@ 2008-01-26 0:10 ` Jörg Sommer
0 siblings, 0 replies; 11+ messages in thread
From: Jörg Sommer @ 2008-01-26 0:10 UTC (permalink / raw)
To: git
Hi Pascal,
Pascal Obry <pascal@obry.net> wrote:
> Typing too fast I've just made this mistake the third time today. It is
> of course easy to revert but a check seems appropriate here.
Why not use an alias?
% git config --get alias.cia
commit --amend
Bye, Jörg.
--
Two types have compatible type if their types are the same.
[ANSI C, 6.2.7]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] Check for -amend as a common wrong usage of --amend.
2008-01-24 20:47 ` Joey Hess
@ 2008-01-26 6:20 ` Junio C Hamano
2008-01-26 10:42 ` Pierre Habouzit
0 siblings, 1 reply; 11+ messages in thread
From: Junio C Hamano @ 2008-01-26 6:20 UTC (permalink / raw)
To: Joey Hess; +Cc: git, Pierre Habouzit
Joey Hess <joey@kitenet.net> writes:
> Some option parsers avoid this sort of ambiguity by not allowing short
> options that take a string to be bundled in the same word with other
> short options.
>
> So, for example, git-commit -am<msg> would not be allowed, while
> git-commit -a -m<msg> and perhaps git-commit -am <msg> would be allowed.
>
> There could still be problems if there were a --mend option that could
> be typoed as -mend.
>
> I don't know enough about compatability to say if this would work for git.
Yeah, I think that is quite a sensible workaround.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH] Check for -amend as a common wrong usage of --amend.
2008-01-26 6:20 ` Junio C Hamano
@ 2008-01-26 10:42 ` Pierre Habouzit
2008-01-26 11:26 ` [PATCH] parse-options: catch some likely in presense of aggregated options Pierre Habouzit
0 siblings, 1 reply; 11+ messages in thread
From: Pierre Habouzit @ 2008-01-26 10:42 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Joey Hess, git
[-- Attachment #1: Type: text/plain, Size: 1135 bytes --]
On Sat, Jan 26, 2008 at 06:20:41AM +0000, Junio C Hamano wrote:
> Joey Hess <joey@kitenet.net> writes:
>
> > Some option parsers avoid this sort of ambiguity by not allowing short
> > options that take a string to be bundled in the same word with other
> > short options.
> >
> > So, for example, git-commit -am<msg> would not be allowed, while
> > git-commit -a -m<msg> and perhaps git-commit -am <msg> would be allowed.
> >
> > There could still be problems if there were a --mend option that could
> > be typoed as -mend.
> >
> > I don't know enough about compatability to say if this would work for git.
>
> Yeah, I think that is quite a sensible workaround.
I agree, I think that we should refuse things where the string after a
/one/ dash starts with 3 or more consecutive characters that are also
the beginning of a long option. I think that 2 is usually a bit "short"
to assume that it's a typo. I'll provide a patch soon
--
·O· Pierre Habouzit
··O madcoder@debian.org
OOO http://www.madism.org
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH] parse-options: catch some likely in presense of aggregated options.
2008-01-26 10:42 ` Pierre Habouzit
@ 2008-01-26 11:26 ` Pierre Habouzit
0 siblings, 0 replies; 11+ messages in thread
From: Pierre Habouzit @ 2008-01-26 11:26 UTC (permalink / raw)
To: Junio C Hamano, Joey Hess, git
[-- Attachment #1: Type: text/plain, Size: 4006 bytes --]
If options are aggregated, and that the whole token looks like (is the exact
prefix of length >= 3 of) a long option, then parse_options rejects it.
The typo check isn't performed if there is no aggregation, because the stuck
for is the recommended one, hence if we have `-o` being a valid short option
that takes an argument, and --option a long one, then we _MUST_ accept
-option as it is our official recommended form.
Signed-off-by: Pierre Habouzit <madcoder@debian.org>
---
parse-options.c | 30 ++++++++++++++++++++++++++++--
t/t0040-parse-options.sh | 11 +++++++++++
test-parse-options.c | 1 +
3 files changed, 40 insertions(+), 2 deletions(-)
On Sat, Jan 26, 2008 at 10:42:16AM +0000, Pierre Habouzit wrote:
> I agree, I think that we should refuse things where the string after a
> /one/ dash starts with 3 or more consecutive characters that are also
> the beginning of a long option. I think that 2 is usually a bit "short"
> to assume that it's a typo. I'll provide a patch soon
Here it is, and we have now:
$ git commit -amend
error: did you mean `--amend` (with two dashes ?)
diff --git a/parse-options.c b/parse-options.c
index 7a08a0c..d9562ba 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -216,6 +216,26 @@ is_abbreviated:
return error("unknown option `%s'", arg);
}
+void check_typos(const char *arg, const struct option *options)
+{
+ if (strlen(arg) < 3)
+ return;
+
+ if (!prefixcmp(arg, "no-")) {
+ error ("did you mean `--%s` (with two dashes ?)", arg);
+ exit(129);
+ }
+
+ for (; options->type != OPTION_END; options++) {
+ if (!options->long_name)
+ continue;
+ if (!prefixcmp(options->long_name, arg)) {
+ error ("did you mean `--%s` (with two dashes ?)", arg);
+ exit(129);
+ }
+ }
+}
+
static NORETURN void usage_with_options_internal(const char * const *,
const struct option *, int);
@@ -235,12 +255,18 @@ int parse_options(int argc, const char **argv, const struct option *options,
if (arg[1] != '-') {
args.opt = arg + 1;
- do {
+ if (*args.opt == 'h')
+ usage_with_options(usagestr, options);
+ if (parse_short_opt(&args, options) < 0)
+ usage_with_options(usagestr, options);
+ if (args.opt)
+ check_typos(arg + 1, options);
+ while (args.opt) {
if (*args.opt == 'h')
usage_with_options(usagestr, options);
if (parse_short_opt(&args, options) < 0)
usage_with_options(usagestr, options);
- } while (args.opt);
+ }
continue;
}
diff --git a/t/t0040-parse-options.sh b/t/t0040-parse-options.sh
index 462fdf2..0a3b55d 100755
--- a/t/t0040-parse-options.sh
+++ b/t/t0040-parse-options.sh
@@ -19,6 +19,7 @@ string options
get a string
--string2 <str> get another string
--st <st> get another string (pervert ordering)
+ -o <str> get another string
EOF
@@ -103,4 +104,14 @@ test_expect_success 'non ambiguous option (after two options it abbreviates)' '
git diff expect output
'
+cat > expect.err << EOF
+error: did you mean \`--boolean\` (with two dashes ?)
+EOF
+
+test_expect_success 'detect possible typos' '
+ ! test-parse-options -boolean > output 2> output.err &&
+ test ! -s output &&
+ git diff expect.err output.err
+'
+
test_done
diff --git a/test-parse-options.c b/test-parse-options.c
index 4d3e2ec..eed8a02 100644
--- a/test-parse-options.c
+++ b/test-parse-options.c
@@ -19,6 +19,7 @@ int main(int argc, const char **argv)
OPT_STRING('s', "string", &string, "string", "get a string"),
OPT_STRING(0, "string2", &string, "str", "get another string"),
OPT_STRING(0, "st", &string, "st", "get another string (pervert ordering)"),
+ OPT_STRING('o', NULL, &string, "str", "get another string"),
OPT_END(),
};
int i;
--
1.5.4.rc4.24.g5232a
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply related [flat|nested] 11+ messages in thread
end of thread, other threads:[~2008-01-26 11:27 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-01-24 18:13 [PATCH] Check for -amend as a common wrong usage of --amend Pascal Obry
2008-01-24 18:16 ` Pascal Obry
2008-01-26 0:10 ` Jörg Sommer
2008-01-24 18:20 ` Johannes Schindelin
2008-01-24 18:52 ` Pascal Obry
2008-01-24 19:25 ` Charles Bailey
2008-01-24 19:35 ` Pascal Obry
2008-01-24 20:47 ` Joey Hess
2008-01-26 6:20 ` Junio C Hamano
2008-01-26 10:42 ` Pierre Habouzit
2008-01-26 11:26 ` [PATCH] parse-options: catch some likely in presense of aggregated options Pierre Habouzit
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).