git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 2/2] bash: Use dynamic binding for subcommand completion functions

From
Teemu Matilainen <teemu.matilainen@iki.fi>
Date
Feb 23, 2010, 14:43 UTC
Message-ID
<1266936193-10644-2-git-send-email-teemu.matilainen@iki.fi>
In-Reply-To
<1266936193-10644-1-git-send-email-teemu.matilainen@iki.fi>

Call git subcommand completion functions dynamically using the same logic as with external commands. I.e. call '_git_<subcommand>' if it exists.

The only exceptions now are:
  - stage -> _git_add
  - whatchanged -> _git_log

This only changes how the functions are called. The functionality remains exactly the same.

Signed-off-by: Teemu Matilainen <teemu.matilainen@iki.fi>
---
 contrib/completion/git-completion.bash |   61 +++-----------------------------
 1 files changed, 5 insertions(+), 56 deletions(-)
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index c7ac727..1d71e87 100755
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -2208,63 +2208,12 @@ _git ()
 	[ "$expansion" ] && command="$expansion"
 
 	case "$command" in
-	am)          _git_am ;;
-	add)         _git_add ;;
-	apply)       _git_apply ;;
-	archive)     _git_archive ;;
-	bisect)      _git_bisect ;;
-	bundle)      _git_bundle ;;
-	branch)      _git_branch ;;
-	checkout)    _git_checkout ;;
-	cherry)      _git_cherry ;;
-	cherry-pick) _git_cherry_pick ;;
-	clean)       _git_clean ;;
-	clone)       _git_clone ;;
-	commit)      _git_commit ;;
-	config)      _git_config ;;
-	describe)    _git_describe ;;
-	diff)        _git_diff ;;
-	difftool)    _git_difftool ;;
-	fetch)       _git_fetch ;;
-	format-patch) _git_format_patch ;;
-	fsck)        _git_fsck ;;
-	gc)          _git_gc ;;
-	grep)        _git_grep ;;
-	help)        _git_help ;;
-	init)        _git_init ;;
-	log)         _git_log ;;
-	ls-files)    _git_ls_files ;;
-	ls-remote)   _git_ls_remote ;;
-	ls-tree)     _git_ls_tree ;;
-	merge)       _git_merge;;
-	mergetool)   _git_mergetool;;
-	merge-base)  _git_merge_base ;;
-	mv)          _git_mv ;;
-	name-rev)    _git_name_rev ;;
-	notes)       _git_notes ;;
-	pull)        _git_pull ;;
-	push)        _git_push ;;
-	rebase)      _git_rebase ;;
-	remote)      _git_remote ;;
-	replace)     _git_replace ;;
-	reset)       _git_reset ;;
-	revert)      _git_revert ;;
-	rm)          _git_rm ;;
-	send-email)  _git_send_email ;;
-	shortlog)    _git_shortlog ;;
-	show)        _git_show ;;
-	show-branch) _git_show_branch ;;
-	stash)       _git_stash ;;
-	stage)       _git_add ;;
-	submodule)   _git_submodule ;;
-	svn)         _git_svn ;;
-	tag)         _git_tag ;;
-	whatchanged) _git_log ;;
-	*)
-		local f="_git_${command//-/_}"
-		type -t "$f" >/dev/null && "$f" || COMPREPLY=()
-		;;
+	stage)       command="add" ;;
+	whatchanged) command="log" ;;
 	esac
+
+	local f="_git_${command//-/_}"
+	type -t "$f" >/dev/null && "$f" || COMPREPLY=()
 }
 
 _gitk ()
-- 
1.7.0.83.g241b9
Previous: Teemu MatilainenNext: SZEDER Gábor
Message 2 of 4 in “bash: Enable completion for external subcommands”
  1. 1/2 bash: Enable completion for external subcommandsTeemu Matilainen, Feb 23, 2010
  2. 2/2 bash: Use dynamic binding for subcommand completion functionsTeemu Matilainen, Feb 23, 2010
  3. SZEDER GáborFeb 23, 2010
  4. Teemu MatilainenFeb 23, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.