All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.