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

[PATCH 5/10] Teach bash how to complete git-format-patch.

From
Shawn O. Pearce <spearce@spearce.org>
Date
Nov 27, 2006, 08:41 UTC
Message-ID
<20061127084143.GE19745@spearce.org>
In-Reply-To
<de7beb117fb963e68e1085b773593be326ffd495.1164616814.git.spearce@spearce.org>

Provide completion for currently known long options supported by git-format-patch as well as the revision list specification argument, which is generally either a refname or in the form a..b.

Since _git_log was the only code that knew how to complete a..b, but we want to start adding option support to _git_log also refactor the a..b completion logic out into its own function.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
 contrib/completion/git-completion.bash |   60 +++++++++++++++++++++++--------
 1 files changed, 44 insertions(+), 16 deletions(-)
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index a740d05..729e5a9 100755
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -144,6 +144,26 @@ __git_complete_file ()
 	esac
 }
 
+__git_complete_revlist ()
+{
+	local pfx cur="${COMP_WORDS[COMP_CWORD]}"
+	case "$cur" in
+	*...*)
+		pfx="${cur%...*}..."
+		cur="${cur#*...}"
+		COMPREPLY=($(compgen -P "$pfx" -W "$(__git_refs)" -- "$cur"))
+		;;
+	*..*)
+		pfx="${cur%..*}.."
+		cur="${cur#*..}"
+		COMPREPLY=($(compgen -P "$pfx" -W "$(__git_refs)" -- "$cur"))
+		;;
+	*)
+		COMPREPLY=($(compgen -W "$(__git_refs)" -- "$cur"))
+		;;
+	esac
+}
+
 __git_commands ()
 {
 	local i IFS=" "$'\n'
@@ -290,6 +310,26 @@ _git_fetch ()
 	esac
 }
 
+_git_format_patch ()
+{
+	local cur="${COMP_WORDS[COMP_CWORD]}"
+	case "$cur" in
+	--*)
+		COMPREPLY=($(compgen -W "
+			--stdout --attach --thread
+			--output-directory
+			--numbered --start-number
+			--keep-subject
+			--signoff
+			--in-repy-to=
+			--full-index --binary
+			" -- "$cur"))
+		return
+		;;
+	esac
+	__git_complete_revlist
+}
+
 _git_ls_remote ()
 {
 	local cur="${COMP_WORDS[COMP_CWORD]}"
@@ -303,22 +343,7 @@ _git_ls_tree ()
 
 _git_log ()
 {
-	local pfx cur="${COMP_WORDS[COMP_CWORD]}"
-	case "$cur" in
-	*...*)
-		pfx="${cur%...*}..."
-		cur="${cur#*...}"
-		COMPREPLY=($(compgen -P "$pfx" -W "$(__git_refs)" -- "$cur"))
-		;;
-	*..*)
-		pfx="${cur%..*}.."
-		cur="${cur#*..}"
-		COMPREPLY=($(compgen -P "$pfx" -W "$(__git_refs)" -- "$cur"))
-		;;
-	*)
-		COMPREPLY=($(compgen -W "$(__git_refs)" -- "$cur"))
-		;;
-	esac
+	__git_complete_revlist
 }
 
 _git_merge ()
@@ -450,6 +475,7 @@ _git ()
 	diff)        _git_diff ;;
 	diff-tree)   _git_diff_tree ;;
 	fetch)       _git_fetch ;;
+	format-patch) _git_format_patch ;;
 	log)         _git_log ;;
 	ls-remote)   _git_ls_remote ;;
 	ls-tree)     _git_ls_tree ;;
@@ -480,6 +506,7 @@ complete -o default            -F _git_checkout git-checkout
 complete -o default -o nospace -F _git_diff git-diff
 complete -o default            -F _git_diff_tree git-diff-tree
 complete -o default -o nospace -F _git_fetch git-fetch
+complete -o default -o nospace -F _git_format_patch git-format-patch
 complete -o default -o nospace -F _git_log git-log
 complete -o default            -F _git_ls_remote git-ls-remote
 complete -o default -o nospace -F _git_ls_tree git-ls-tree
@@ -503,6 +530,7 @@ complete -o default            -F _git_branch git-branch.exe
 complete -o default -o nospace -F _git_cat_file git-cat-file.exe
 complete -o default -o nospace -F _git_diff git-diff.exe
 complete -o default -o nospace -F _git_diff_tree git-diff-tree.exe
+complete -o default -o nospace -F _git_format_patch git-format-patch.exe
 complete -o default -o nospace -F _git_log git-log.exe
 complete -o default -o nospace -F _git_ls_tree git-ls-tree.exe
 complete -o default            -F _git_merge_base git-merge-base.exe
-- 
1.4.4.1.ge3fb
Previous: SeanNext: Jakub Narebski
Message 5 of 19 in “Hide plumbing/transport commands from bash completion.”
  1. 2/10 Hide plumbing/transport commands from bash completion.Shawn O. Pearce, Nov 27, 2006
  2. 3/10 Teach bash how to complete options for git-name-rev.Shawn O. Pearce, Nov 27, 2006
  3. 4/10 Add current branch in PS1 support to git-completion.bash.Shawn O. Pearce, Nov 27, 2006
  4. SeanNov 27, 2006
  5. 5/10 Teach bash how to complete git-format-patch.Shawn O. Pearce, Nov 27, 2006
  6. Jakub NarebskiNov 27, 2006
  7. 6/10 Teach bash how to complete git-cherry-pick.Shawn O. Pearce, Nov 27, 2006
  8. 7/10 Teach bash how to complete git-rebase.Shawn O. Pearce, Nov 27, 2006
  9. 8/10 Teach bash about git log/show/whatchanged options.Shawn O. Pearce, Nov 27, 2006
  10. 9/10 Allow completion of --committer and --author arguments to git log.Shawn O. Pearce, Nov 27, 2006
  11. Nicolas VilzNov 27, 2006
  12. Shawn PearceNov 27, 2006
  13. Junio C HamanoNov 27, 2006
  14. Shawn PearceNov 27, 2006
  15. 10/10 Support bash completion of refs/remote.Shawn O. Pearce, Nov 27, 2006
  16. Shawn PearceNov 27, 2006
  17. SeanNov 27, 2006
  18. Shawn PearceNov 27, 2006
  19. SeanNov 27, 2006

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.