* [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: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 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 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).