* [PATCH] help.c: help.autocorrect=prompt waits for user action
@ 2021-08-11 0:15 Azeem Bande-Ali via GitGitGadget
2021-08-12 10:52 ` Bagas Sanjaya
` (2 more replies)
0 siblings, 3 replies; 12+ messages in thread
From: Azeem Bande-Ali via GitGitGadget @ 2021-08-11 0:15 UTC (permalink / raw)
To: git; +Cc: David Barr, Azeem Bande-Ali, Azeem Bande-Ali
From: Azeem Bande-Ali <me@azeemba.com>
If help.autocorrect is set to 'prompt', the user is prompted
before the suggested action is executed.
Based on original patch by David Barr
https://lore.kernel.org/git/1283758030-13345-1-git-send-email-david.barr@cordelta.com/
Signed-off-by: Azeem Bande-Ali <me@azeemba.com>
---
New config for help.autocorrect to prompt user before action
Currently the prompt setting will wait X amount of time before taking an
action. Adding a new config that will instead prompt the user for a
confirmation before taking the action.
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1012%2Fazeemba%2Fautoprompt-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1012/azeemba/autoprompt-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1012
Documentation/config/help.txt | 20 +++++++++++++-------
help.c | 17 ++++++++++++++++-
2 files changed, 29 insertions(+), 8 deletions(-)
diff --git a/Documentation/config/help.txt b/Documentation/config/help.txt
index 783a90a0f93..d36d98dd119 100644
--- a/Documentation/config/help.txt
+++ b/Documentation/config/help.txt
@@ -9,13 +9,19 @@ help.format::
help.autoCorrect::
If git detects typos and can identify exactly one valid command similar
- to the error, git will automatically run the intended command after
- waiting a duration of time defined by this configuration value in
- deciseconds (0.1 sec). If this value is 0, the suggested corrections
- will be shown, but not executed. If it is a negative integer, or
- "immediate", the suggested command
- is run immediately. If "never", suggestions are not shown at all. The
- default value is zero.
+ to the error, git will try to suggest the correct command or even
+ run the intended command.
+ If this config value is 0, then the suggested command will be shown.
+ If it is positive, the suggested command will automatically
+ run after waiting for that many deciseconds (0.1 sec).
+ If it is "immediate", the suggested command will be
+ run immediately.
+ If it is "prompt", then the user will be shown the
+ suggestion and will be prompted for confirmation before the command
+ is run.
+ If it is "never", then no suggestion will be shown and no command
+ will be run.
+ 0 is the default value for this config.
help.htmlPath::
Specify the path where the HTML documentation resides. File system paths
diff --git a/help.c b/help.c
index 3c3bdec2135..079156e0421 100644
--- a/help.c
+++ b/help.c
@@ -11,6 +11,7 @@
#include "version.h"
#include "refs.h"
#include "parse-options.h"
+#include "prompt.h"
struct category_description {
uint32_t category;
@@ -472,6 +473,7 @@ int is_in_cmdlist(struct cmdnames *c, const char *s)
static int autocorrect;
static struct cmdnames aliases;
+#define AUTOCORRECT_PROMPT (-3)
#define AUTOCORRECT_NEVER (-2)
#define AUTOCORRECT_IMMEDIATELY (-1)
@@ -486,6 +488,8 @@ static int git_unknown_cmd_config(const char *var, const char *value, void *cb)
autocorrect = AUTOCORRECT_NEVER;
} else if (!strcmp(value, "immediate")) {
autocorrect = AUTOCORRECT_IMMEDIATELY;
+ } else if (!strcmp(value, "prompt")) {
+ autocorrect = AUTOCORRECT_PROMPT;
} else {
int v = git_config_int(var, value);
autocorrect = (v < 0)
@@ -618,7 +622,18 @@ const char *help_unknown_cmd(const char *cmd)
_("Continuing under the assumption that "
"you meant '%s'."),
assumed);
- else {
+ else if (autocorrect == AUTOCORRECT_PROMPT) {
+ if (!isatty(STDIN_FILENO) | !isatty(STDERR_FILENO))
+ exit(1);
+
+ char *answer;
+ fprintf_ln(stderr, _("Assuming you meant: '%s'."),
+ assumed);
+ answer = git_prompt(_("Continue? (y/N)"), PROMPT_ECHO);
+ if (!(starts_with(answer, "y") ||
+ starts_with(answer, "Y")))
+ exit(1);
+ } else {
fprintf_ln(stderr,
_("Continuing in %0.1f seconds, "
"assuming that you meant '%s'."),
base-commit: 2d755dfac9aadab25c3e025b849252b8c0a61465
--
gitgitgadget
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH] help.c: help.autocorrect=prompt waits for user action
2021-08-11 0:15 [PATCH] help.c: help.autocorrect=prompt waits for user action Azeem Bande-Ali via GitGitGadget
@ 2021-08-12 10:52 ` Bagas Sanjaya
2021-08-14 2:57 ` Azeem Bande-Ali
2021-08-12 19:37 ` Junio C Hamano
2021-08-14 5:11 ` [PATCH v2] " Azeem Bande-Ali via GitGitGadget
2 siblings, 1 reply; 12+ messages in thread
From: Bagas Sanjaya @ 2021-08-12 10:52 UTC (permalink / raw)
To: Azeem Bande-Ali via GitGitGadget, git
Cc: David Barr, Azeem Bande-Ali, Azeem Bande-Ali
On 11/08/21 07.15, Azeem Bande-Ali via GitGitGadget wrote:
> help.autoCorrect::
> If git detects typos and can identify exactly one valid command similar
> - to the error, git will automatically run the intended command after
> - waiting a duration of time defined by this configuration value in
> - deciseconds (0.1 sec). If this value is 0, the suggested corrections
> - will be shown, but not executed. If it is a negative integer, or
> - "immediate", the suggested command
> - is run immediately. If "never", suggestions are not shown at all. The
> - default value is zero.
> + to the error, git will try to suggest the correct command or even
> + run the intended command.
> + If this config value is 0, then the suggested command will be shown.
> + If it is positive, the suggested command will automatically
> + run after waiting for that many deciseconds (0.1 sec).
> + If it is "immediate", the suggested command will be
> + run immediately.
> + If it is "prompt", then the user will be shown the
> + suggestion and will be prompted for confirmation before the command
> + is run.
> + If it is "never", then no suggestion will be shown and no command
> + will be run.
> + 0 is the default value for this config.
I think it's better to use bullet lists, e.g.:
```
If git detects typos and ...
<skip>
... git will try to suggest the correct command or even run the intended
command. Possible values are:
- 0 (default): show the suggested command
- positive number: run the suggested command after specified
deciseconds (0.1 sec).
- "immediate": run the suggested command immediately
- "prompt": show the suggestion and prompt for confirmation to run
the command
- "never": don't show any suggestions nor run them
```
--
An old man doll... just what I always wanted! - Clara
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] help.c: help.autocorrect=prompt waits for user action
2021-08-11 0:15 [PATCH] help.c: help.autocorrect=prompt waits for user action Azeem Bande-Ali via GitGitGadget
2021-08-12 10:52 ` Bagas Sanjaya
@ 2021-08-12 19:37 ` Junio C Hamano
2021-08-14 3:07 ` Azeem Bande-Ali
2021-08-14 5:11 ` [PATCH v2] " Azeem Bande-Ali via GitGitGadget
2 siblings, 1 reply; 12+ messages in thread
From: Junio C Hamano @ 2021-08-12 19:37 UTC (permalink / raw)
To: Azeem Bande-Ali via GitGitGadget
Cc: git, David Barr, Azeem Bande-Ali, Azeem Bande-Ali
> @@ -618,7 +622,18 @@ const char *help_unknown_cmd(const char *cmd)
> _("Continuing under the assumption that "
> "you meant '%s'."),
> assumed);
> - else {
> + else if (autocorrect == AUTOCORRECT_PROMPT) {
> + if (!isatty(STDIN_FILENO) | !isatty(STDERR_FILENO))
Don't do bitwise or when you only care about boolean outcome.
> + exit(1);
This is not a new issue, but I think it is probably a bug in the
original design of the help-unknown that we do not do this check
much early in help_unknown_cmd(), to disable auto-correction in
a non-interactive session. If we did so, we do not have to have
this check here.
If we cannot yet come to consensus that disabling autocorrection
when running non-interactively is a good idea, at least we should be
able to do so only for _PROMPT case, like the attached patch at the
end.
> + char *answer;
This is decl-after-statement, but as I am suggesting to get rid of
the tty check done inside this block, it will become OK.
> + fprintf_ln(stderr, _("Assuming you meant: '%s'."),
> + assumed);
> + answer = git_prompt(_("Continue? (y/N)"), PROMPT_ECHO);
Hmph, the above does not look WRONG per-se, but I wonder if it is
easier for the users to see a single line, e.g.
struct strbuf msg = STRBUF_INIT;
strbuf_addf(&msg, _("Run '%s' instead? (y/N)"), assumed);
answer = git_prompt(msg.buf, PROMPT_ECHO);
strbuf_release(&msg);
Thanks.
diff --git i/help.c w/help.c
index e22ba1d246..3629cb8796 100644
--- i/help.c
+++ w/help.c
@@ -540,6 +540,13 @@ const char *help_unknown_cmd(const char *cmd)
read_early_config(git_unknown_cmd_config, NULL);
+ /*
+ * Disable autocorrection prompt in a non-interactive session
+ */
+ if ((autocorrect != AUTOCORRECT_PROMPT) &&
+ (!isatty(0) || !isatty(2)))
+ autocorrect = AUTOCORRECT_NEVER;
+
if (autocorrect == AUTOCORRECT_NEVER) {
fprintf_ln(stderr, _("git: '%s' is not a git command. See 'git --help'."), cmd);
exit(1);
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH] help.c: help.autocorrect=prompt waits for user action
2021-08-12 10:52 ` Bagas Sanjaya
@ 2021-08-14 2:57 ` Azeem Bande-Ali
0 siblings, 0 replies; 12+ messages in thread
From: Azeem Bande-Ali @ 2021-08-14 2:57 UTC (permalink / raw)
To: Bagas Sanjaya; +Cc: Azeem Bande-Ali via GitGitGadget, git, David Barr
On Thu, Aug 12, 2021 at 6:52 AM Bagas Sanjaya <bagasdotme@gmail.com> wrote:
> I think it's better to use bullet lists, e.g.:
>
> ```
> If git detects typos and ...
> <skip>
> ... git will try to suggest the correct command or even run the intended
> command. Possible values are:
> - 0 (default): show the suggested command
> - positive number: run the suggested command after specified
> deciseconds (0.1 sec).
> - "immediate": run the suggested command immediately
> - "prompt": show the suggestion and prompt for confirmation to run
> the command
> - "never": don't show any suggestions nor run them
> ```
Thanks for the feedback. I agree the bullets do look much better!
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] help.c: help.autocorrect=prompt waits for user action
2021-08-12 19:37 ` Junio C Hamano
@ 2021-08-14 3:07 ` Azeem Bande-Ali
0 siblings, 0 replies; 12+ messages in thread
From: Azeem Bande-Ali @ 2021-08-14 3:07 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Azeem Bande-Ali via GitGitGadget, git, David Barr
On Thu, Aug 12, 2021 at 3:38 PM Junio C Hamano <gitster@pobox.com> wrote:
>
> If we cannot yet come to consensus that disabling autocorrection
> when running non-interactively is a good idea, at least we should be
> able to do so only for _PROMPT case, like the attached patch at the
> end.
Thanks for the suggestion. I think it makes sense to skip the autocorrection
completely when the setting is "prompt" and the user is not running
interactively.
> > + fprintf_ln(stderr, _("Assuming you meant: '%s'."),
> > + assumed);
> > + answer = git_prompt(_("Continue? (y/N)"), PROMPT_ECHO);
>
> Hmph, the above does not look WRONG per-se, but I wonder if it is
> easier for the users to see a single line, e.g.
>
> struct strbuf msg = STRBUF_INIT;
> strbuf_addf(&msg, _("Run '%s' instead? (y/N)"), assumed);
> answer = git_prompt(msg.buf, PROMPT_ECHO);
> strbuf_release(&msg);
>
I looked at the behavior for other settings and they
all behave pretty compactly. So I think this suggested
solution does fit better.
> + /*
> + * Disable autocorrection prompt in a non-interactive session
> + */
> + if ((autocorrect != AUTOCORRECT_PROMPT) &&
> + (!isatty(0) || !isatty(2)))
> + autocorrect = AUTOCORRECT_NEVER;
> +
That should be `(autocorrect == AUTOCORRECT_PROMPT)` right?
So we skip the autocorrect if the user is not running interactively
and has the "prompt" setting.
Thanks for all the feedback! I will send out a patch incorporating
this feedback soon.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v2] help.c: help.autocorrect=prompt waits for user action
2021-08-11 0:15 [PATCH] help.c: help.autocorrect=prompt waits for user action Azeem Bande-Ali via GitGitGadget
2021-08-12 10:52 ` Bagas Sanjaya
2021-08-12 19:37 ` Junio C Hamano
@ 2021-08-14 5:11 ` Azeem Bande-Ali via GitGitGadget
2021-08-14 5:50 ` Bagas Sanjaya
` (2 more replies)
2 siblings, 3 replies; 12+ messages in thread
From: Azeem Bande-Ali via GitGitGadget @ 2021-08-14 5:11 UTC (permalink / raw)
To: git
Cc: David Barr, Bagas Sanjaya, Azeem Bande-Ali, Azeem Bande-Ali,
Azeem Bande-Ali
From: Azeem Bande-Ali <me@azeemba.com>
If help.autocorrect is set to 'prompt', the user is prompted
before the suggested action is executed.
Based on original patch by David Barr
https://lore.kernel.org/git/1283758030-13345-1-git-send-email-david.barr@cordelta.com/
Signed-off-by: Azeem Bande-Ali <me@azeemba.com>
---
New config for help.autocorrect to prompt user before action
Changes since v1:
* Use bullet lists for documenting the various settings now supported
by help.autoCorrect
* Add a check for an interactive terminal early to bail if the user has
the "prompt" setting
* Make the output more compact so the user can see the suggestion and
the prompt in one line.
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1012%2Fazeemba%2Fautoprompt-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1012/azeemba/autoprompt-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/1012
Range-diff vs v1:
1: 7f72819b805 ! 1: 5819b872356 help.c: help.autocorrect=prompt waits for user action
@@ Documentation/config/help.txt: help.format::
- is run immediately. If "never", suggestions are not shown at all. The
- default value is zero.
+ to the error, git will try to suggest the correct command or even
-+ run the intended command.
-+ If this config value is 0, then the suggested command will be shown.
-+ If it is positive, the suggested command will automatically
-+ run after waiting for that many deciseconds (0.1 sec).
-+ If it is "immediate", the suggested command will be
-+ run immediately.
-+ If it is "prompt", then the user will be shown the
-+ suggestion and will be prompted for confirmation before the command
-+ is run.
-+ If it is "never", then no suggestion will be shown and no command
-+ will be run.
-+ 0 is the default value for this config.
++ run the suggestion automatically. Possible config values are:
++ - 0 (default): show the suggested command.
++ - positive number: run the suggested command after specified
++deciseconds (0.1 sec).
++ - "immediate": run the suggested command immediately.
++ - "prompt": show the suggestion and prompt for confirmation to run
++the command.
++ - "never": don't run or show any suggested command.
help.htmlPath::
Specify the path where the HTML documentation resides. File system paths
@@ help.c: static int git_unknown_cmd_config(const char *var, const char *value, vo
int v = git_config_int(var, value);
autocorrect = (v < 0)
@@ help.c: const char *help_unknown_cmd(const char *cmd)
+
+ read_early_config(git_unknown_cmd_config, NULL);
+
++ /*
++ * Disable autocorrection prompt in a non-interactive session
++ */
++ if ((autocorrect == AUTOCORRECT_PROMPT) && (!isatty(0) || !isatty(2)))
++ autocorrect = AUTOCORRECT_NEVER;
++
+ if (autocorrect == AUTOCORRECT_NEVER) {
+ fprintf_ln(stderr, _("git: '%s' is not a git command. See 'git --help'."), cmd);
+ exit(1);
+@@ help.c: const char *help_unknown_cmd(const char *cmd)
_("Continuing under the assumption that "
"you meant '%s'."),
assumed);
- else {
+ else if (autocorrect == AUTOCORRECT_PROMPT) {
-+ if (!isatty(STDIN_FILENO) | !isatty(STDERR_FILENO))
-+ exit(1);
-+
-+ char *answer;
-+ fprintf_ln(stderr, _("Assuming you meant: '%s'."),
-+ assumed);
-+ answer = git_prompt(_("Continue? (y/N)"), PROMPT_ECHO);
++ char* answer;
++ struct strbuf msg = STRBUF_INIT;
++ strbuf_addf(&msg, _("Run '%s' instead? (y/N)"),
++ assumed);
++ answer = git_prompt(msg.buf, PROMPT_ECHO);
++ strbuf_release(&msg);
+ if (!(starts_with(answer, "y") ||
+ starts_with(answer, "Y")))
+ exit(1);
Documentation/config/help.txt | 16 +++++++++-------
help.c | 22 +++++++++++++++++++++-
2 files changed, 30 insertions(+), 8 deletions(-)
diff --git a/Documentation/config/help.txt b/Documentation/config/help.txt
index 783a90a0f93..610701f9a37 100644
--- a/Documentation/config/help.txt
+++ b/Documentation/config/help.txt
@@ -9,13 +9,15 @@ help.format::
help.autoCorrect::
If git detects typos and can identify exactly one valid command similar
- to the error, git will automatically run the intended command after
- waiting a duration of time defined by this configuration value in
- deciseconds (0.1 sec). If this value is 0, the suggested corrections
- will be shown, but not executed. If it is a negative integer, or
- "immediate", the suggested command
- is run immediately. If "never", suggestions are not shown at all. The
- default value is zero.
+ to the error, git will try to suggest the correct command or even
+ run the suggestion automatically. Possible config values are:
+ - 0 (default): show the suggested command.
+ - positive number: run the suggested command after specified
+deciseconds (0.1 sec).
+ - "immediate": run the suggested command immediately.
+ - "prompt": show the suggestion and prompt for confirmation to run
+the command.
+ - "never": don't run or show any suggested command.
help.htmlPath::
Specify the path where the HTML documentation resides. File system paths
diff --git a/help.c b/help.c
index 3c3bdec2135..22bb05e8e3d 100644
--- a/help.c
+++ b/help.c
@@ -11,6 +11,7 @@
#include "version.h"
#include "refs.h"
#include "parse-options.h"
+#include "prompt.h"
struct category_description {
uint32_t category;
@@ -472,6 +473,7 @@ int is_in_cmdlist(struct cmdnames *c, const char *s)
static int autocorrect;
static struct cmdnames aliases;
+#define AUTOCORRECT_PROMPT (-3)
#define AUTOCORRECT_NEVER (-2)
#define AUTOCORRECT_IMMEDIATELY (-1)
@@ -486,6 +488,8 @@ static int git_unknown_cmd_config(const char *var, const char *value, void *cb)
autocorrect = AUTOCORRECT_NEVER;
} else if (!strcmp(value, "immediate")) {
autocorrect = AUTOCORRECT_IMMEDIATELY;
+ } else if (!strcmp(value, "prompt")) {
+ autocorrect = AUTOCORRECT_PROMPT;
} else {
int v = git_config_int(var, value);
autocorrect = (v < 0)
@@ -539,6 +543,12 @@ const char *help_unknown_cmd(const char *cmd)
read_early_config(git_unknown_cmd_config, NULL);
+ /*
+ * Disable autocorrection prompt in a non-interactive session
+ */
+ if ((autocorrect == AUTOCORRECT_PROMPT) && (!isatty(0) || !isatty(2)))
+ autocorrect = AUTOCORRECT_NEVER;
+
if (autocorrect == AUTOCORRECT_NEVER) {
fprintf_ln(stderr, _("git: '%s' is not a git command. See 'git --help'."), cmd);
exit(1);
@@ -618,7 +628,17 @@ const char *help_unknown_cmd(const char *cmd)
_("Continuing under the assumption that "
"you meant '%s'."),
assumed);
- else {
+ else if (autocorrect == AUTOCORRECT_PROMPT) {
+ char* answer;
+ struct strbuf msg = STRBUF_INIT;
+ strbuf_addf(&msg, _("Run '%s' instead? (y/N)"),
+ assumed);
+ answer = git_prompt(msg.buf, PROMPT_ECHO);
+ strbuf_release(&msg);
+ if (!(starts_with(answer, "y") ||
+ starts_with(answer, "Y")))
+ exit(1);
+ } else {
fprintf_ln(stderr,
_("Continuing in %0.1f seconds, "
"assuming that you meant '%s'."),
base-commit: 2d755dfac9aadab25c3e025b849252b8c0a61465
--
gitgitgadget
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v2] help.c: help.autocorrect=prompt waits for user action
2021-08-14 5:11 ` [PATCH v2] " Azeem Bande-Ali via GitGitGadget
@ 2021-08-14 5:50 ` Bagas Sanjaya
2021-08-14 18:20 ` Junio C Hamano
2021-08-15 1:50 ` [PATCH v3] " Azeem Bande-Ali via GitGitGadget
2 siblings, 0 replies; 12+ messages in thread
From: Bagas Sanjaya @ 2021-08-14 5:50 UTC (permalink / raw)
To: Azeem Bande-Ali via GitGitGadget, git
Cc: David Barr, Azeem Bande-Ali, Azeem Bande-Ali
On 14/08/21 12.11, Azeem Bande-Ali via GitGitGadget wrote:
> help.autoCorrect::
> If git detects typos and can identify exactly one valid command similar
> - to the error, git will automatically run the intended command after
> - waiting a duration of time defined by this configuration value in
> - deciseconds (0.1 sec). If this value is 0, the suggested corrections
> - will be shown, but not executed. If it is a negative integer, or
> - "immediate", the suggested command
> - is run immediately. If "never", suggestions are not shown at all. The
> - default value is zero.
> + to the error, git will try to suggest the correct command or even
> + run the suggestion automatically. Possible config values are:
> + - 0 (default): show the suggested command.
> + - positive number: run the suggested command after specified
> +deciseconds (0.1 sec).
> + - "immediate": run the suggested command immediately.
> + - "prompt": show the suggestion and prompt for confirmation to run
> +the command.
> + - "never": don't run or show any suggested command.
Looks OK.
Reviewed-by: Bagas Sanjaya <bagasdotme@gmail.com>
--
An old man doll... just what I always wanted! - Clara
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2] help.c: help.autocorrect=prompt waits for user action
2021-08-14 5:11 ` [PATCH v2] " Azeem Bande-Ali via GitGitGadget
2021-08-14 5:50 ` Bagas Sanjaya
@ 2021-08-14 18:20 ` Junio C Hamano
2021-08-14 18:40 ` Azeem Bande-Ali
2021-08-16 12:28 ` Johannes Schindelin
2021-08-15 1:50 ` [PATCH v3] " Azeem Bande-Ali via GitGitGadget
2 siblings, 2 replies; 12+ messages in thread
From: Junio C Hamano @ 2021-08-14 18:20 UTC (permalink / raw)
To: Azeem Bande-Ali via GitGitGadget
Cc: git, David Barr, Bagas Sanjaya, Azeem Bande-Ali, Azeem Bande-Ali
"Azeem Bande-Ali via GitGitGadget" <gitgitgadget@gmail.com> writes:
> @@ -618,7 +628,17 @@ const char *help_unknown_cmd(const char *cmd)
> _("Continuing under the assumption that "
> "you meant '%s'."),
> assumed);
> - else {
> + else if (autocorrect == AUTOCORRECT_PROMPT) {
> + char* answer;
Some people seem to make an asterisk stick to types like this, but
in our codebase written in C, an asterisk sticks to the identifier
that it makes into a pointer, i.e.
char *answer;
This is because doing so differently would confuse novices with
constructs like this:
int* a, b;
where only 'a' is a pointer, and 'b' is not.
> + struct strbuf msg = STRBUF_INIT;
> + strbuf_addf(&msg, _("Run '%s' instead? (y/N)"),
> + assumed);
I think these should be kept on a single line for readability, i.e.
strbuf_addf(&msg, _("Run '%s' instead? (y/N)"), assumed);
as I see a fairly long line after this block already.
fprintf_ln(stderr, _("git: '%s' is not a git command. See 'git --help'."), cmd);
Other than these cosmetic bits, this round looks good to me,
including the documentation update.
Thanks.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2] help.c: help.autocorrect=prompt waits for user action
2021-08-14 18:20 ` Junio C Hamano
@ 2021-08-14 18:40 ` Azeem Bande-Ali
2021-08-16 12:28 ` Johannes Schindelin
1 sibling, 0 replies; 12+ messages in thread
From: Azeem Bande-Ali @ 2021-08-14 18:40 UTC (permalink / raw)
To: Junio C Hamano
Cc: Azeem Bande-Ali via GitGitGadget, git, David Barr, Bagas Sanjaya
On Sat, Aug 14, 2021 at 2:20 PM Junio C Hamano <gitster@pobox.com> wrote:
>
> "Azeem Bande-Ali via GitGitGadget" <gitgitgadget@gmail.com> writes:
>
> > + char* answer;
>
> Some people seem to make an asterisk stick to types like this, but
> in our codebase written in C, an asterisk sticks to the identifier
> that it makes into a pointer, i.e.
>
> char *answer;
>
Thanks! Will fix. I appreciate you providing the motivation for the
policy as well!
> > + struct strbuf msg = STRBUF_INIT;
> > + strbuf_addf(&msg, _("Run '%s' instead? (y/N)"),
> > + assumed);
>
> I think these should be kept on a single line for readability, i.e.
>
> strbuf_addf(&msg, _("Run '%s' instead? (y/N)"), assumed);
>
> as I see a fairly long line after this block already.
>
> fprintf_ln(stderr, _("git: '%s' is not a git command. See 'git --help'."), cmd);
The line split was done by clang-format via `make style`. Is it okay
to ignore the clang-format recommendation?
(Incidentally `make style` would have also caught the first issue, I
seem to have not run it after
making a change in that line.)
> Other than these cosmetic bits, this round looks good to me,
> including the documentation update.
Great thanks! This is my first patch so I just wanted to confirm:
should I add a "Reviewed-by:"
line to the commit with your name as well?
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v3] help.c: help.autocorrect=prompt waits for user action
2021-08-14 5:11 ` [PATCH v2] " Azeem Bande-Ali via GitGitGadget
2021-08-14 5:50 ` Bagas Sanjaya
2021-08-14 18:20 ` Junio C Hamano
@ 2021-08-15 1:50 ` Azeem Bande-Ali via GitGitGadget
2021-09-08 0:18 ` Junio C Hamano
2 siblings, 1 reply; 12+ messages in thread
From: Azeem Bande-Ali via GitGitGadget @ 2021-08-15 1:50 UTC (permalink / raw)
To: git
Cc: David Barr, Bagas Sanjaya, Azeem Bande-Ali, Azeem Bande-Ali,
Azeem Bande-Ali
From: Azeem Bande-Ali <me@azeemba.com>
If help.autocorrect is set to 'prompt', the user is prompted
before the suggested action is executed.
Based on original patch by David Barr
https://lore.kernel.org/git/1283758030-13345-1-git-send-email-david.barr@cordelta.com/
Reviewed-by: Bagas Sanjaya <bagasdotme@gmail.com>
Signed-off-by: Azeem Bande-Ali <me@azeemba.com>
---
New config for help.autocorrect to prompt user before action
Only minor style changes have been made since v2:
* Moved * to variable name instead of the type name
* Keep code in the same line for readability
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1012%2Fazeemba%2Fautoprompt-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1012/azeemba/autoprompt-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/1012
Range-diff vs v2:
1: 5819b872356 ! 1: f3f38f0d141 help.c: help.autocorrect=prompt waits for user action
@@ Commit message
Based on original patch by David Barr
https://lore.kernel.org/git/1283758030-13345-1-git-send-email-david.barr@cordelta.com/
+ Reviewed-by: Bagas Sanjaya <bagasdotme@gmail.com>
Signed-off-by: Azeem Bande-Ali <me@azeemba.com>
## Documentation/config/help.txt ##
@@ help.c: const char *help_unknown_cmd(const char *cmd)
assumed);
- else {
+ else if (autocorrect == AUTOCORRECT_PROMPT) {
-+ char* answer;
++ char *answer;
+ struct strbuf msg = STRBUF_INIT;
-+ strbuf_addf(&msg, _("Run '%s' instead? (y/N)"),
-+ assumed);
++ strbuf_addf(&msg, _("Run '%s' instead? (y/N)"), assumed);
+ answer = git_prompt(msg.buf, PROMPT_ECHO);
+ strbuf_release(&msg);
+ if (!(starts_with(answer, "y") ||
Documentation/config/help.txt | 16 +++++++++-------
help.c | 21 ++++++++++++++++++++-
2 files changed, 29 insertions(+), 8 deletions(-)
diff --git a/Documentation/config/help.txt b/Documentation/config/help.txt
index 783a90a0f93..610701f9a37 100644
--- a/Documentation/config/help.txt
+++ b/Documentation/config/help.txt
@@ -9,13 +9,15 @@ help.format::
help.autoCorrect::
If git detects typos and can identify exactly one valid command similar
- to the error, git will automatically run the intended command after
- waiting a duration of time defined by this configuration value in
- deciseconds (0.1 sec). If this value is 0, the suggested corrections
- will be shown, but not executed. If it is a negative integer, or
- "immediate", the suggested command
- is run immediately. If "never", suggestions are not shown at all. The
- default value is zero.
+ to the error, git will try to suggest the correct command or even
+ run the suggestion automatically. Possible config values are:
+ - 0 (default): show the suggested command.
+ - positive number: run the suggested command after specified
+deciseconds (0.1 sec).
+ - "immediate": run the suggested command immediately.
+ - "prompt": show the suggestion and prompt for confirmation to run
+the command.
+ - "never": don't run or show any suggested command.
help.htmlPath::
Specify the path where the HTML documentation resides. File system paths
diff --git a/help.c b/help.c
index 3c3bdec2135..be2fa642415 100644
--- a/help.c
+++ b/help.c
@@ -11,6 +11,7 @@
#include "version.h"
#include "refs.h"
#include "parse-options.h"
+#include "prompt.h"
struct category_description {
uint32_t category;
@@ -472,6 +473,7 @@ int is_in_cmdlist(struct cmdnames *c, const char *s)
static int autocorrect;
static struct cmdnames aliases;
+#define AUTOCORRECT_PROMPT (-3)
#define AUTOCORRECT_NEVER (-2)
#define AUTOCORRECT_IMMEDIATELY (-1)
@@ -486,6 +488,8 @@ static int git_unknown_cmd_config(const char *var, const char *value, void *cb)
autocorrect = AUTOCORRECT_NEVER;
} else if (!strcmp(value, "immediate")) {
autocorrect = AUTOCORRECT_IMMEDIATELY;
+ } else if (!strcmp(value, "prompt")) {
+ autocorrect = AUTOCORRECT_PROMPT;
} else {
int v = git_config_int(var, value);
autocorrect = (v < 0)
@@ -539,6 +543,12 @@ const char *help_unknown_cmd(const char *cmd)
read_early_config(git_unknown_cmd_config, NULL);
+ /*
+ * Disable autocorrection prompt in a non-interactive session
+ */
+ if ((autocorrect == AUTOCORRECT_PROMPT) && (!isatty(0) || !isatty(2)))
+ autocorrect = AUTOCORRECT_NEVER;
+
if (autocorrect == AUTOCORRECT_NEVER) {
fprintf_ln(stderr, _("git: '%s' is not a git command. See 'git --help'."), cmd);
exit(1);
@@ -618,7 +628,16 @@ const char *help_unknown_cmd(const char *cmd)
_("Continuing under the assumption that "
"you meant '%s'."),
assumed);
- else {
+ else if (autocorrect == AUTOCORRECT_PROMPT) {
+ char *answer;
+ struct strbuf msg = STRBUF_INIT;
+ strbuf_addf(&msg, _("Run '%s' instead? (y/N)"), assumed);
+ answer = git_prompt(msg.buf, PROMPT_ECHO);
+ strbuf_release(&msg);
+ if (!(starts_with(answer, "y") ||
+ starts_with(answer, "Y")))
+ exit(1);
+ } else {
fprintf_ln(stderr,
_("Continuing in %0.1f seconds, "
"assuming that you meant '%s'."),
base-commit: 2d755dfac9aadab25c3e025b849252b8c0a61465
--
gitgitgadget
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v2] help.c: help.autocorrect=prompt waits for user action
2021-08-14 18:20 ` Junio C Hamano
2021-08-14 18:40 ` Azeem Bande-Ali
@ 2021-08-16 12:28 ` Johannes Schindelin
1 sibling, 0 replies; 12+ messages in thread
From: Johannes Schindelin @ 2021-08-16 12:28 UTC (permalink / raw)
To: Junio C Hamano
Cc: Azeem Bande-Ali via GitGitGadget, git, David Barr, Bagas Sanjaya,
Azeem Bande-Ali, Azeem Bande-Ali
Hi,
On Sat, 14 Aug 2021, Junio C Hamano wrote:
> "Azeem Bande-Ali via GitGitGadget" <gitgitgadget@gmail.com> writes:
>
> > @@ -618,7 +628,17 @@ const char *help_unknown_cmd(const char *cmd)
> > _("Continuing under the assumption that "
> > "you meant '%s'."),
> > assumed);
> > - else {
> > + else if (autocorrect == AUTOCORRECT_PROMPT) {
> > + char* answer;
>
> Some people seem to make an asterisk stick to types like this, but
> in our codebase written in C, an asterisk sticks to the identifier
> that it makes into a pointer, i.e.
>
> char *answer;
>
> This is because doing so differently would confuse novices with
> constructs like this:
>
> int* a, b;
>
> where only 'a' is a pointer, and 'b' is not.
>
> > + struct strbuf msg = STRBUF_INIT;
> > + strbuf_addf(&msg, _("Run '%s' instead? (y/N)"),
> > + assumed);
>
> I think these should be kept on a single line for readability, i.e.
>
> strbuf_addf(&msg, _("Run '%s' instead? (y/N)"), assumed);
It might even make sense to use the `xstrfmt()` function instead:
char *msg = xstrfmt(_("Run '%s' instead? (y/N)"), assumed);
[...]
free(msg);
Ciao,
Dscho
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3] help.c: help.autocorrect=prompt waits for user action
2021-08-15 1:50 ` [PATCH v3] " Azeem Bande-Ali via GitGitGadget
@ 2021-09-08 0:18 ` Junio C Hamano
0 siblings, 0 replies; 12+ messages in thread
From: Junio C Hamano @ 2021-09-08 0:18 UTC (permalink / raw)
To: Azeem Bande-Ali via GitGitGadget
Cc: Johannes Schindelin, git, David Barr, Bagas Sanjaya,
Azeem Bande-Ali, Azeem Bande-Ali
"Azeem Bande-Ali via GitGitGadget" <gitgitgadget@gmail.com> writes:
> From: Azeem Bande-Ali <me@azeemba.com>
>
> If help.autocorrect is set to 'prompt', the user is prompted
> before the suggested action is executed.
>
> Based on original patch by David Barr
> https://lore.kernel.org/git/1283758030-13345-1-git-send-email-david.barr@cordelta.com/
>
> Reviewed-by: Bagas Sanjaya <bagasdotme@gmail.com>
> Signed-off-by: Azeem Bande-Ali <me@azeemba.com>
> ---
> New config for help.autocorrect to prompt user before action
>
> Only minor style changes have been made since v2:
>
> * Moved * to variable name instead of the type name
> * Keep code in the same line for readability
I didn't see anybody comment on this round (and do not think I saw
anything glaringly wrong).
Is everybody happy with this version? I am about to mark it for
'next' in the next issue of "What's cooking" report, so please
holler if I should wait.
Thanks.
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2021-09-08 0:18 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-11 0:15 [PATCH] help.c: help.autocorrect=prompt waits for user action Azeem Bande-Ali via GitGitGadget
2021-08-12 10:52 ` Bagas Sanjaya
2021-08-14 2:57 ` Azeem Bande-Ali
2021-08-12 19:37 ` Junio C Hamano
2021-08-14 3:07 ` Azeem Bande-Ali
2021-08-14 5:11 ` [PATCH v2] " Azeem Bande-Ali via GitGitGadget
2021-08-14 5:50 ` Bagas Sanjaya
2021-08-14 18:20 ` Junio C Hamano
2021-08-14 18:40 ` Azeem Bande-Ali
2021-08-16 12:28 ` Johannes Schindelin
2021-08-15 1:50 ` [PATCH v3] " Azeem Bande-Ali via GitGitGadget
2021-09-08 0:18 ` Junio C Hamano
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.