git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).