Skip to content

Commit

Permalink
Merge branch 'js/flush-prompt-before-interative-input'
Browse files Browse the repository at this point in the history
The interactive input from various codepaths are consolidated and
any prompt possibly issued earlier are fflush()ed before we read.

* js/flush-prompt-before-interative-input:
  interactive: explicitly `fflush` stdout before expecting input
  interactive: refactor code asking the user for interactive input
  • Loading branch information
gitster committed Apr 22, 2020
2 parents 9af3a7c + 1f09aed commit 33feaca
Show file tree
Hide file tree
Showing 6 changed files with 24 additions and 16 deletions.
4 changes: 2 additions & 2 deletions add-interactive.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include "lockfile.h"
#include "dir.h"
#include "run-command.h"
#include "prompt.h"

static void init_color(struct repository *r, struct add_i_state *s,
const char *slot_name, char *dst,
Expand Down Expand Up @@ -289,13 +290,12 @@ static ssize_t list_and_choose(struct add_i_state *s,
fputs(singleton ? "> " : ">> ", stdout);
fflush(stdout);

if (strbuf_getline(&input, stdin) == EOF) {
if (git_read_line_interactively(&input) == EOF) {
putchar('\n');
if (immediate)
res = LIST_AND_CHOOSE_QUIT;
break;
}
strbuf_trim(&input);

if (!input.len)
break;
Expand Down
4 changes: 2 additions & 2 deletions add-patch.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include "color.h"
#include "diff.h"
#include "compat/terminal.h"
#include "prompt.h"

enum prompt_mode_type {
PROMPT_MODE_CHANGE = 0, PROMPT_DELETION, PROMPT_HUNK,
Expand Down Expand Up @@ -1158,9 +1159,8 @@ static int read_single_character(struct add_p_state *s)
return res;
}

if (strbuf_getline(&s->answer, stdin) == EOF)
if (git_read_line_interactively(&s->answer) == EOF)
return EOF;
strbuf_trim_trailing_newline(&s->answer);
return 0;
}

Expand Down
14 changes: 4 additions & 10 deletions builtin/clean.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include "color.h"
#include "pathspec.h"
#include "help.h"
#include "prompt.h"

static int force = -1; /* unset */
static int interactive;
Expand Down Expand Up @@ -420,7 +421,6 @@ static int find_unique(const char *choice, struct menu_stuff *menu_stuff)
return found;
}


/*
* Parse user input, and return choice(s) for menu (menu_stuff).
*
Expand Down Expand Up @@ -580,9 +580,7 @@ static int *list_and_choose(struct menu_opts *opts, struct menu_stuff *stuff)
clean_get_color(CLEAN_COLOR_RESET));
}

if (strbuf_getline_lf(&choice, stdin) != EOF) {
strbuf_trim(&choice);
} else {
if (git_read_line_interactively(&choice) == EOF) {
eof = 1;
break;
}
Expand Down Expand Up @@ -662,9 +660,7 @@ static int filter_by_patterns_cmd(void)
clean_print_color(CLEAN_COLOR_PROMPT);
printf(_("Input ignore patterns>> "));
clean_print_color(CLEAN_COLOR_RESET);
if (strbuf_getline_lf(&confirm, stdin) != EOF)
strbuf_trim(&confirm);
else
if (git_read_line_interactively(&confirm) == EOF)
putchar('\n');

/* quit filter_by_pattern mode if press ENTER or Ctrl-D */
Expand Down Expand Up @@ -760,9 +756,7 @@ static int ask_each_cmd(void)
qname = quote_path_relative(item->string, NULL, &buf);
/* TRANSLATORS: Make sure to keep [y/N] as is */
printf(_("Remove %s [y/N]? "), qname);
if (strbuf_getline_lf(&confirm, stdin) != EOF) {
strbuf_trim(&confirm);
} else {
if (git_read_line_interactively(&confirm) == EOF) {
putchar('\n');
eof = 1;
}
Expand Down
12 changes: 12 additions & 0 deletions prompt.c
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,15 @@ char *git_prompt(const char *prompt, int flags)
}
return r;
}

int git_read_line_interactively(struct strbuf *line)
{
int ret;

fflush(stdout);
ret = strbuf_getline_lf(line, stdin);
if (ret != EOF)
strbuf_trim_trailing_newline(line);

return ret;
}
2 changes: 2 additions & 0 deletions prompt.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,6 @@

char *git_prompt(const char *prompt, int flags);

int git_read_line_interactively(struct strbuf *line);

#endif /* PROMPT_H */
4 changes: 2 additions & 2 deletions shell.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "strbuf.h"
#include "run-command.h"
#include "alias.h"
#include "prompt.h"

#define COMMAND_DIR "git-shell-commands"
#define HELP_COMMAND COMMAND_DIR "/help"
Expand Down Expand Up @@ -76,12 +77,11 @@ static void run_shell(void)
int count;

fprintf(stderr, "git> ");
if (strbuf_getline_lf(&line, stdin) == EOF) {
if (git_read_line_interactively(&line) == EOF) {
fprintf(stderr, "\n");
strbuf_release(&line);
break;
}
strbuf_trim(&line);
rawargs = strbuf_detach(&line, NULL);
split_args = xstrdup(rawargs);
count = split_cmdline(split_args, &argv);
Expand Down

0 comments on commit 33feaca

Please sign in to comment.