threads / patch / 43315

patch, 10 partsRe: [PATCH 1/10] Teach git-completion.bash how to complete git-merge.

Subject: Re: [PATCH 1/10] Teach git-completion.bash how to complete git-merge.

## tl;dr

3 messages between Nov 27, 2006 and Nov 27, 2006. Diffs are folded; open one to read it.

replies: 2people: 2as markdown or json

Shawn O. Pearce· Nov 27, 2006, 08:40 UTC · lore

[PATCH 1/10] Teach git-completion.bash how to complete git-merge.

Now that git-merge is high-level Porcelain users are going to expect to be able to use it from the command line, in which case we really should also be able to complete ref names as parameters.

I'm also including completion support for the merge strategies that are supported by git-merge.sh, should the user wish to use a different strategy than their default.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
 contrib/completion/git-completion.bash |   30 ++++++++++++++++++++++++++++++
 1 files changed, 30 insertions(+), 0 deletions(-)
Show changes to contrib/completion/git-completion.bash +30 −0
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index a43a177..28bd0e3 100755
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -81,6 +81,16 @@ __git_remotes ()
 	done
 }
 
+__git_merge_strategies ()
+{
+	sed -n "/^all_strategies='/{
+		s/^all_strategies='//
+		s/'//
+		p
+		q
+		}" "$(git --exec-path)/git-merge"
+}
+
 __git_complete_file ()
 {
 	local pfx ls ref cur="${COMP_WORDS[COMP_CWORD]}"
@@ -240,6 +250,24 @@ _git_log ()
 	esac
 }
 
+_git_merge ()
+{
+	local cur="${COMP_WORDS[COMP_CWORD]}"
+	case "$cur" in
+	--*)
+		COMPREPLY=($(compgen -W "
+			--no-commit --no-summary --squash
+			" -- "$cur"))
+		return
+	esac
+	if [ $COMP_CWORD -gt 1 -a X-s = "X${COMP_WORDS[COMP_CWORD-1]}" ]
+	then
+		COMPREPLY=($(compgen -W "$(__git_merge_strategies)" -- "$cur"))
+	else
+		COMPREPLY=($(compgen -W "$(__git_refs)" -- "$cur"))
+	fi
+}
+
 _git_merge_base ()
 {
 	local cur="${COMP_WORDS[COMP_CWORD]}"
@@ -348,6 +376,7 @@ _git ()
 	log)         _git_log ;;
 	ls-remote)   _git_ls_remote ;;
 	ls-tree)     _git_ls_tree ;;
+	merge)       _git_merge;;
 	merge-base)  _git_merge_base ;;
 	pull)        _git_pull ;;
 	push)        _git_push ;;
@@ -376,6 +405,7 @@ complete -o default -o nospace -F _git_fetch git-fetch
 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
+complete -o default            -F _git_merge git-merge
 complete -o default            -F _git_merge_base git-merge-base
 complete -o default -o nospace -F _git_pull git-pull
 complete -o default -o nospace -F _git_push git-push
-- 
1.4.4.1.ge3fb
Junio C Hamano· Nov 27, 2006, 19:12 UTC · re: Shawn O. Pearce · lore
"Shawn O. Pearce" <spearce@spearce.org> writes:
Show 10 quoted lines
> +__git_merge_strategies ()
> +{
> +	sed -n "/^all_strategies='/{
> +		s/^all_strategies='//
> +		s/'//
> +		p
> +		q
> +		}" "$(git --exec-path)/git-merge"
> +}
> +

Shouldn't we load and compute this once and keep the result in a variable (say $__git_merge_strategies)?

Shawn Pearce· Nov 27, 2006, 20:12 UTC · re: Junio C Hamano · lore
Junio C Hamano <junkio@cox.net> wrote:
Show 15 quoted lines
> "Shawn O. Pearce" <spearce@spearce.org> writes:
> 
> > +__git_merge_strategies ()
> > +{
> > +	sed -n "/^all_strategies='/{
> > +		s/^all_strategies='//
> > +		s/'//
> > +		p
> > +		q
> > +		}" "$(git --exec-path)/git-merge"
> > +}
> > +
> 
> Shouldn't we load and compute this once and keep the result in a
> variable (say $__git_merge_strategies)?
Sure.  See my latest 4 patch series.  :-)
 

← back to recent threads