Git development
 help / color / mirror / Atom feed
* [PATCH v2 0/4] completion: add support for 'git history'
@ 2026-08-06 20:27 Vincent Mailhol
  2026-08-06 20:27 ` [PATCH v2 1/4] completion: add 'git history' subcommands Vincent Mailhol
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Vincent Mailhol @ 2026-08-06 20:27 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Philippe Blain, Patrick Steinhardt,
	Vincent Mailhol

This series adds Bash completion for the subcommands of "git history"
and their options.

Patch #1 adds the basic subcommand and options completion. Patch #2
and #3 take care of the value of the --empty and --update-refs options.
Finally, Patch #4 adds completion for pathspecs accepted by "split".

For each of the completions, add a set of relevant test cases.

Signed-off-by: Vincent Mailhol <mailhol@kernel.org>
---
Changes in v2:

  - Complete exactly one required revision and leave subsequent
    arguments to subcommand-specific completion.
  - Do not complete options after "--".
  - Complete values for "--empty" and "--update-refs".
  - Complete pathspecs for "git history split".
  - Expand the test coverage for options, revisions, and pathspecs.

Link to v1: https://lore.kernel.org/r/20260804-history_autocompletion-v1-1-6f7459ffb677@kernel.org

---
Vincent Mailhol (4):
      completion: add 'git history' subcommands
      completion: complete 'git history --empty' values
      completion: complete 'git history --update-refs' values
      completion: complete 'git history split' pathspecs

 contrib/completion/git-completion.bash | 68 ++++++++++++++++++++++++++++++++++
 t/t9902-completion.sh                  | 49 ++++++++++++++++++++++++
 2 files changed, 117 insertions(+)

Range-diff versus v1:

1:  d0574dca8c ! 1:  6625c7ac29 completion: add 'git history' subcommands
    @@ Metadata
      ## Commit message ##
         completion: add 'git history' subcommands
     
    -    Use the parse-options completion helpers for the "git history"
    -    subcommands and their options. Complete positional arguments as
    -    revisions, and add coverage for each kind of completion.
    +    Use the parse-options completion helpers for the
    +
    +      git history
    +
    +    subcommands and their options. All current history subcommands take a
    +    revision as their first positional argument, so complete that argument
    +    as a revision.
    +
    +    Once the revision is present, leave any further positional arguments to
    +    subcommand-specific completion. This allows a subcommand to complete
    +    another kind of argument, such as the pathspec accepted by
    +
    +      git history split
    +
    +    or another revision if a future subcommand accepts one.
     
         Signed-off-by: Vincent Mailhol <mailhol@kernel.org>
    +    ---
    +    Changes in v2:
    +
    +      - Test options before and after revisions.
    +      - Do not complete options after "--".
    +      - Stop revision completion after the first required
     
      ## contrib/completion/git-completion.bash ##
     @@ contrib/completion/git-completion.bash: _git_help ()
      	fi
      }
      
    ++__git_history_has_revision ()
    ++{
    ++	local i
    ++
    ++	for ((i = __git_cmd_idx + 2; i < cword; i++)); do
    ++		case "${words[i]}" in
    ++		--empty|--update-refs)
    ++			((i++))
    ++			;;
    ++		-*)
    ++			;;
    ++		*)
    ++			return 0
    ++			;;
    ++		esac
    ++	done
    ++	return 1
    ++}
    ++
     +_git_history ()
     +{
     +	local subcommands subcommand
    @@ contrib/completion/git-completion.bash: _git_help ()
     +		return
     +	fi
     +
    -+	case "$cur" in
    -+	--*)
    -+		__gitcomp_builtin "history_$subcommand"
    -+		;;
    -+	*)
    ++	if ! __git_has_doubledash; then
    ++		case "$cur" in
    ++		--*)
    ++			__gitcomp_builtin "history_$subcommand"
    ++			return
    ++			;;
    ++		esac
    ++	fi
    ++
    ++	if ! __git_history_has_revision; then
     +		__git_complete_refs
    -+		;;
    -+	esac
    ++		return
    ++	fi
     +}
     +
      _git_init ()
    @@ t/t9902-completion.sh: test_expect_success 'git clone --config= - value' '
     +'
     +
     +test_expect_success 'git history subcommand options' '
    -+	test_completion "git history fixup --upd" "--update-refs="
    ++	test_completion "git history split main --" <<-\EOF &&
    ++	--update-refs=Z
    ++	--dry-run Z
    ++	--no-dry-run Z
    ++	EOF
    ++	test_completion "git history fixup --upd" "--update-refs=" &&
    ++	test_completion "git history fixup --ree" "--reedit-message " &&
    ++	test_completion "git history split --upd" "--update-refs=" &&
    ++	test_completion "git history split main --dry" "--dry-run " &&
    ++	test_completion "git history reword main -- --d" ""
     +'
     +
     +test_expect_success 'git history revisions' '
    -+	test_completion "git history split ma" "main "
    ++	test_completion "git history split ma" "main " &&
    ++	test_completion "git history split --update-refs head ma" "main " &&
    ++	test_completion "git history fixup --empty drop ma" "main " &&
    ++	test_completion "git history reword main m" ""
     +'
     +
      test_expect_success 'git reflog show' '
-:  ---------- > 2:  f618f35153 completion: complete 'git history --empty' values
-:  ---------- > 3:  abae09f208 completion: complete 'git history --update-refs' values
-:  ---------- > 4:  7bfb6664dc completion: complete 'git history split' pathspecs

---
base-commit: c56d675cccfbcf71406c4a6806c7745e4a756294
change-id: 20260804-history_autocompletion-84620c2f8500


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2026-08-07  8:09 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-06 20:27 [PATCH v2 0/4] completion: add support for 'git history' Vincent Mailhol
2026-08-06 20:27 ` [PATCH v2 1/4] completion: add 'git history' subcommands Vincent Mailhol
2026-08-07  6:30   ` Patrick Steinhardt
2026-08-07  6:44     ` Vincent Mailhol
2026-08-07  7:08       ` Patrick Steinhardt
2026-08-07  8:09         ` Vincent Mailhol
2026-08-06 20:27 ` [PATCH v2 2/4] completion: complete 'git history --empty' values Vincent Mailhol
2026-08-06 20:27 ` [PATCH v2 3/4] completion: complete 'git history --update-refs' values Vincent Mailhol
2026-08-06 20:27 ` [PATCH v2 4/4] completion: complete 'git history split' pathspecs Vincent Mailhol

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox