[Outreachy PATCH v2 1/2] fast-import: handle --git-completion-helper before reading input
flat view
WARM1d
From: Tanga Joris <hidden>
Date: 2026-10-29 01:28:39
Subsystem:
the rest · Maintainer:
Linus Torvalds
fast-import parses its options only after reading the "feature" lines from its input, and it creates a temporary pack file before that. So "git fast-import --git-completion-helper" waits for input, and each run leaves a tmp_pack_* file behind. bash completion runs the helper with the terminal as input, so "git fast-import --<TAB>" would freeze once fast-import is no longer marked with the NO_PARSEOPT flag. Handle a lone --git-completion-helper or --git-completion-helper-all right after the -h check, before creating the pack or reading input. Reported-by: René Scharfe <redacted> Signed-off-by: Tanga Joris <redacted> --- Changes since v1: - New patch 1/2, addressing René's observation that completion would block on fast-import - 2/2 is unchanged builtin/fast-import.c | 4 ++++ t/t9300-fast-import.sh | 8 ++++++++ 2 files changed, 12 insertions(+)
diff --git a/builtin/fast-import.c b/builtin/fast-import.c
index 9db3f83eea..f53113d5a5 100644
--- a/builtin/fast-import.c
+++ b/builtin/fast-import.c@@ -4204,6 +4204,10 @@ int cmd_fast_import(int argc, }; show_usage_with_options_if_asked(argc, argv, fast_import_usage, fast_import_options); + if (argc == 2 && (!strcmp(argv[1], "--git-completion-helper") || + !strcmp(argv[1], "--git-completion-helper-all"))) + parse_options(argc, argv, prefix, fast_import_options, + fast_import_usage, 0); fast_import_state_init(&state, argc, argv, prefix, fast_import_options);
diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh
index 73c6e3d448..99d7843217 100755
--- a/t/t9300-fast-import.sh
+++ b/t/t9300-fast-import.sh@@ -2914,6 +2914,14 @@ test_expect_success 'R: blob appears only once' ' test 1 = $n ' +test_expect_success 'R: --git-completion-helper does not read from stdin' ' + find .git/objects/pack -name "tmp_pack_*" >before && + echo garbage | git fast-import --git-completion-helper >out && + test_grep -e "--date-format=" out && + find .git/objects/pack -name "tmp_pack_*" >after && + test_cmp before after +' + ### ### series S (mark and path parsing) ###
--
2.56.0.291.g0b48760bf4