All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC/PATCH v2 0/8] completion: compgen/compadd cleanups
@ 2012-11-18 10:56 Felipe Contreras
  2012-11-18 10:56 ` [RFC/PATCH v2 1/8] completion: trivial test improvement Felipe Contreras
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: Felipe Contreras @ 2012-11-18 10:56 UTC (permalink / raw)
  To: git
  Cc: Junio C Hamano, SZEDER Gábor, Felipe Contreras,
	Björn Gustavsson, Shawn O. Pearce, Robert Zeh,
	Peter van der Does, Jonathan Nieder, Jeff King

Hi,

These were hinted by SZEDER, so I went ahead and implemented the changes trying
to keep in mind the new zsh completion werapper. The resulting code should be
more efficient, and a known breakage is fixed.

The first two patches are transplanted from another patch series which most
likely is not going to use them.

I also borrowed the tests from another patch series from SZEDER, but they are
not meant to be applied through this series.

SZEDER implemented some of this, but I prefer my version of the patches.

Felipe Contreras (8):
  completion: trivial test improvement
  completion: get rid of empty COMPREPLY assignments
  completion: add new __gitcompadd helper
  tmp: completion: add SZEDER's tests
  completion: get rid of compgen
  tmp: completion: mark SZEDER's tests as fixed
  completion: get rid of __gitcomp_1
  completion: small optimization

 contrib/completion/git-completion.bash | 77 ++++++++++++----------------------
 t/t9902-completion.sh                  | 66 ++++++++++++++++++++++++++++-
 2 files changed, 91 insertions(+), 52 deletions(-)

-- 
1.8.0

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

* [RFC/PATCH v2 1/8] completion: trivial test improvement
  2012-11-18 10:56 [RFC/PATCH v2 0/8] completion: compgen/compadd cleanups Felipe Contreras
@ 2012-11-18 10:56 ` Felipe Contreras
  2012-11-18 10:56 ` [RFC/PATCH v2 2/8] completion: get rid of empty COMPREPLY assignments Felipe Contreras
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Felipe Contreras @ 2012-11-18 10:56 UTC (permalink / raw)
  To: git
  Cc: Junio C Hamano, SZEDER Gábor, Felipe Contreras,
	Björn Gustavsson, Shawn O. Pearce, Robert Zeh,
	Peter van der Does, Jonathan Nieder, Jeff King

Instead of passing a dummy "", let's check if the last character is a
space, and then move the _cword accordingly.

Apparently we were passing "" all the way to compgen, which fortunately
expanded it to nothing.

Lets do the right thing though.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 t/t9902-completion.sh | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index 8fa025f..79a2453 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -50,6 +50,7 @@ run_completion ()
 	local -a COMPREPLY _words
 	local _cword
 	_words=( $1 )
+	test "${1: -1}" == ' ' && _words+=('')
 	(( _cword = ${#_words[@]} - 1 ))
 	__git_wrap__git_main && print_comp
 }
@@ -156,7 +157,7 @@ test_expect_success '__gitcomp - suffix' '
 '
 
 test_expect_success 'basic' '
-	run_completion "git \"\"" &&
+	run_completion "git " &&
 	# built-in
 	grep -q "^add \$" out &&
 	# script
-- 
1.8.0

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

* [RFC/PATCH v2 2/8] completion: get rid of empty COMPREPLY assignments
  2012-11-18 10:56 [RFC/PATCH v2 0/8] completion: compgen/compadd cleanups Felipe Contreras
  2012-11-18 10:56 ` [RFC/PATCH v2 1/8] completion: trivial test improvement Felipe Contreras
@ 2012-11-18 10:56 ` Felipe Contreras
  2012-11-18 10:56 ` [RFC/PATCH v2 3/8] completion: add new __gitcompadd helper Felipe Contreras
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Felipe Contreras @ 2012-11-18 10:56 UTC (permalink / raw)
  To: git
  Cc: Junio C Hamano, SZEDER Gábor, Felipe Contreras,
	Björn Gustavsson, Shawn O. Pearce, Robert Zeh,
	Peter van der Does, Jonathan Nieder, Jeff King

There's no functional reason for those, the only purpose they are
supposed to serve is to say "we don't provide any words here", but even
for that it's not used consitently.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 contrib/completion/git-completion.bash | 27 ---------------------------
 1 file changed, 27 deletions(-)

diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index bc0657a..c2fb061 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -238,7 +238,6 @@ __gitcomp ()
 
 	case "$cur_" in
 	--*=)
-		COMPREPLY=()
 		;;
 	*)
 		local IFS=$'\n'
@@ -486,7 +485,6 @@ __git_complete_remote_or_refspec ()
 			case "$cmd" in
 			push) no_complete_refspec=1 ;;
 			fetch)
-				COMPREPLY=()
 				return
 				;;
 			*) ;;
@@ -502,7 +500,6 @@ __git_complete_remote_or_refspec ()
 		return
 	fi
 	if [ $no_complete_refspec = 1 ]; then
-		COMPREPLY=()
 		return
 	fi
 	[ "$remote" = "." ] && remote=
@@ -776,7 +773,6 @@ _git_am ()
 			"
 		return
 	esac
-	COMPREPLY=()
 }
 
 _git_apply ()
@@ -796,7 +792,6 @@ _git_apply ()
 			"
 		return
 	esac
-	COMPREPLY=()
 }
 
 _git_add ()
@@ -811,7 +806,6 @@ _git_add ()
 			"
 		return
 	esac
-	COMPREPLY=()
 }
 
 _git_archive ()
@@ -856,7 +850,6 @@ _git_bisect ()
 		__gitcomp_nl "$(__git_refs)"
 		;;
 	*)
-		COMPREPLY=()
 		;;
 	esac
 }
@@ -969,7 +962,6 @@ _git_clean ()
 		return
 		;;
 	esac
-	COMPREPLY=()
 }
 
 _git_clone ()
@@ -993,7 +985,6 @@ _git_clone ()
 		return
 		;;
 	esac
-	COMPREPLY=()
 }
 
 _git_commit ()
@@ -1027,7 +1018,6 @@ _git_commit ()
 			"
 		return
 	esac
-	COMPREPLY=()
 }
 
 _git_describe ()
@@ -1152,7 +1142,6 @@ _git_fsck ()
 		return
 		;;
 	esac
-	COMPREPLY=()
 }
 
 _git_gc ()
@@ -1163,7 +1152,6 @@ _git_gc ()
 		return
 		;;
 	esac
-	COMPREPLY=()
 }
 
 _git_gitk ()
@@ -1240,7 +1228,6 @@ _git_init ()
 		return
 		;;
 	esac
-	COMPREPLY=()
 }
 
 _git_ls_files ()
@@ -1259,7 +1246,6 @@ _git_ls_files ()
 		return
 		;;
 	esac
-	COMPREPLY=()
 }
 
 _git_ls_remote ()
@@ -1375,7 +1361,6 @@ _git_mergetool ()
 		return
 		;;
 	esac
-	COMPREPLY=()
 }
 
 _git_merge_base ()
@@ -1391,7 +1376,6 @@ _git_mv ()
 		return
 		;;
 	esac
-	COMPREPLY=()
 }
 
 _git_name_rev ()
@@ -1681,7 +1665,6 @@ _git_config ()
 		return
 		;;
 	*.*)
-		COMPREPLY=()
 		return
 		;;
 	esac
@@ -2061,7 +2044,6 @@ _git_remote ()
 		__gitcomp "$c"
 		;;
 	*)
-		COMPREPLY=()
 		;;
 	esac
 }
@@ -2105,7 +2087,6 @@ _git_rm ()
 		return
 		;;
 	esac
-	COMPREPLY=()
 }
 
 _git_shortlog ()
@@ -2174,8 +2155,6 @@ _git_stash ()
 		*)
 			if [ -z "$(__git_find_on_cmdline "$save_opts")" ]; then
 				__gitcomp "$subcommands"
-			else
-				COMPREPLY=()
 			fi
 			;;
 		esac
@@ -2188,14 +2167,12 @@ _git_stash ()
 			__gitcomp "--index --quiet"
 			;;
 		show,--*|drop,--*|branch,--*)
-			COMPREPLY=()
 			;;
 		show,*|apply,*|drop,*|pop,*|branch,*)
 			__gitcomp_nl "$(git --git-dir="$(__gitdir)" stash list \
 					| sed -n -e 's/:.*//p')"
 			;;
 		*)
-			COMPREPLY=()
 			;;
 		esac
 	fi
@@ -2312,7 +2289,6 @@ _git_svn ()
 			__gitcomp "--revision= --parent"
 			;;
 		*)
-			COMPREPLY=()
 			;;
 		esac
 	fi
@@ -2337,13 +2313,10 @@ _git_tag ()
 
 	case "$prev" in
 	-m|-F)
-		COMPREPLY=()
 		;;
 	-*|tag)
 		if [ $f = 1 ]; then
 			__gitcomp_nl "$(__git_tags)"
-		else
-			COMPREPLY=()
 		fi
 		;;
 	*)
-- 
1.8.0

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

* [RFC/PATCH v2 3/8] completion: add new __gitcompadd helper
  2012-11-18 10:56 [RFC/PATCH v2 0/8] completion: compgen/compadd cleanups Felipe Contreras
  2012-11-18 10:56 ` [RFC/PATCH v2 1/8] completion: trivial test improvement Felipe Contreras
  2012-11-18 10:56 ` [RFC/PATCH v2 2/8] completion: get rid of empty COMPREPLY assignments Felipe Contreras
@ 2012-11-18 10:56 ` Felipe Contreras
  2012-11-18 10:56 ` [RFC/PATCH v2 4/8] tmp: completion: add SZEDER's tests Felipe Contreras
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Felipe Contreras @ 2012-11-18 10:56 UTC (permalink / raw)
  To: git
  Cc: Junio C Hamano, SZEDER Gábor, Felipe Contreras,
	Björn Gustavsson, Shawn O. Pearce, Robert Zeh,
	Peter van der Does, Jonathan Nieder, Jeff King

The idea is to never touch the COMPREPLY variable directly.

This allows other completion systems override __gitcompadd, and do
something different instead.

Also, this allows the simplification of the completion tests (separate
patch).

There should be no functional changes.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 contrib/completion/git-completion.bash | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index c2fb061..19e18a8 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -225,6 +225,11 @@ _get_comp_words_by_ref ()
 fi
 fi
 
+__gitcompadd ()
+{
+	COMPREPLY=($(compgen -W "$1" -P "$2" -S "$4" -- "$3"))
+}
+
 # Generates completion reply with compgen, appending a space to possible
 # completion words, if necessary.
 # It accepts 1 to 4 arguments:
@@ -241,9 +246,7 @@ __gitcomp ()
 		;;
 	*)
 		local IFS=$'\n'
-		COMPREPLY=($(compgen -P "${2-}" \
-			-W "$(__gitcomp_1 "${1-}" "${4-}")" \
-			-- "$cur_"))
+		__gitcompadd "$(__gitcomp_1 "${1-}" "${4-}")" "${2-}" "$cur_" ""
 		;;
 	esac
 }
@@ -260,7 +263,7 @@ __gitcomp ()
 __gitcomp_nl ()
 {
 	local IFS=$'\n'
-	COMPREPLY=($(compgen -P "${2-}" -S "${4- }" -W "$1" -- "${3-$cur}"))
+	__gitcompadd "$1" "${2-}" "${3-$cur}" "${4- }"
 }
 
 __git_heads ()
@@ -1605,7 +1608,7 @@ _git_config ()
 		local remote="${prev#remote.}"
 		remote="${remote%.fetch}"
 		if [ -z "$cur" ]; then
-			COMPREPLY=("refs/heads/")
+			__gitcompadd "refs/heads/"
 			return
 		fi
 		__gitcomp_nl "$(__git_refs_remotes "$remote")"
-- 
1.8.0

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

* [RFC/PATCH v2 4/8] tmp: completion: add SZEDER's tests
  2012-11-18 10:56 [RFC/PATCH v2 0/8] completion: compgen/compadd cleanups Felipe Contreras
                   ` (2 preceding siblings ...)
  2012-11-18 10:56 ` [RFC/PATCH v2 3/8] completion: add new __gitcompadd helper Felipe Contreras
@ 2012-11-18 10:56 ` Felipe Contreras
  2012-11-18 10:56 ` [RFC/PATCH v2 5/8] completion: get rid of compgen Felipe Contreras
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Felipe Contreras @ 2012-11-18 10:56 UTC (permalink / raw)
  To: git
  Cc: Junio C Hamano, SZEDER Gábor, Felipe Contreras,
	Björn Gustavsson, Shawn O. Pearce, Robert Zeh,
	Peter van der Does, Jonathan Nieder, Jeff King

Separate patch series, but the results are relevant.

+ modifications from me.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 t/t9902-completion.sh | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 61 insertions(+)

diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index 79a2453..35fc31b 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -73,6 +73,24 @@ test_completion_long ()
 
 newline=$'\n'
 
+# Test __gitcomp_nl
+# Arguments are:
+# 1: current word (cur)
+# -: the rest are passed to __gitcomp_nl
+test_gitcomp_nl ()
+{
+	local -a COMPREPLY &&
+	sed -e 's/Z$//' > expected &&
+	cur="$1" &&
+	shift &&
+	__gitcomp_nl "$@" &&
+	print_comp &&
+	cp expected out /tmp
+	test_cmp expected out
+}
+
+invalid_variable_name="${foo.bar}"
+
 test_expect_success '__gitcomp - trailing space - options' '
 	sed -e "s/Z$//" >expected <<-\EOF &&
 	--reuse-message=Z
@@ -156,6 +174,49 @@ test_expect_success '__gitcomp - suffix' '
 	test_cmp expected out
 '
 
+test_expect_failure '__gitcomp - doesnt fail because of invalid variable name' '
+	__gitcomp "$invalid_variable_name"
+'
+
+read -r -d "" refs <<-\EOF
+maint
+master
+next
+pu
+EOF
+
+test_expect_success '__gitcomp_nl - trailing space' '
+	test_gitcomp_nl "m" "$refs" <<-EOF
+	maint Z
+	master Z
+	EOF
+'
+
+test_expect_success '__gitcomp_nl - prefix' '
+	test_gitcomp_nl "--fixup=m" "$refs" "--fixup=" "m" <<-EOF
+	--fixup=maint Z
+	--fixup=master Z
+	EOF
+'
+
+test_expect_success '__gitcomp_nl - suffix' '
+	test_gitcomp_nl "branch.ma" "$refs" "branch." "ma" "." <<-\EOF
+	branch.maint.Z
+	branch.master.Z
+	EOF
+'
+
+test_expect_success '__gitcomp_nl - no suffix' '
+	test_gitcomp_nl "ma" "$refs" "" "ma" "" <<-\EOF
+	maintZ
+	masterZ
+	EOF
+'
+
+test_expect_failure '__gitcomp_nl - doesnt fail because of invalid variable name' '
+	__gitcomp_nl "$invalid_variable_name"
+'
+
 test_expect_success 'basic' '
 	run_completion "git " &&
 	# built-in
-- 
1.8.0

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

* [RFC/PATCH v2 5/8] completion: get rid of compgen
  2012-11-18 10:56 [RFC/PATCH v2 0/8] completion: compgen/compadd cleanups Felipe Contreras
                   ` (3 preceding siblings ...)
  2012-11-18 10:56 ` [RFC/PATCH v2 4/8] tmp: completion: add SZEDER's tests Felipe Contreras
@ 2012-11-18 10:56 ` Felipe Contreras
  2012-11-18 10:56 ` [RFC/PATCH v2 6/8] tmp: completion: mark SZEDER's tests as fixed Felipe Contreras
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Felipe Contreras @ 2012-11-18 10:56 UTC (permalink / raw)
  To: git
  Cc: Junio C Hamano, SZEDER Gábor, Felipe Contreras,
	Björn Gustavsson, Shawn O. Pearce, Robert Zeh,
	Peter van der Does, Jonathan Nieder, Jeff King

The functionality we use from compgen is not much, we can do the same
manually, with drastical improvements in speed, specially when dealing
with only a few rods.

This patch also has the sideffect that brekage reported by Jeroen Meijer
and SZEDER Gábor gets fixed because we no longer expand the resulting
words.

Other solutions with awk and sed are possible and more efficient when
dealing with tens of thousands of words. But is rarely the case. For the
common cases, this solution is faster.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 contrib/completion/git-completion.bash | 15 ++++++++++-----
 t/t9902-completion.sh                  |  2 +-
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 19e18a8..0b72f24 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -227,11 +227,16 @@ fi
 
 __gitcompadd ()
 {
-	COMPREPLY=($(compgen -W "$1" -P "$2" -S "$4" -- "$3"))
+	local i=0
+	for x in $1; do
+		if [[ "$x" == "$3"* ]]; then
+			COMPREPLY[i++]="$2$x$4"
+		fi
+	done
 }
 
-# Generates completion reply with compgen, appending a space to possible
-# completion words, if necessary.
+# Generates completion reply, appending a space to possible completion words,
+# if necessary.
 # It accepts 1 to 4 arguments:
 # 1: List of possible completion words.
 # 2: A prefix to be added to each possible completion word (optional).
@@ -251,8 +256,8 @@ __gitcomp ()
 	esac
 }
 
-# Generates completion reply with compgen from newline-separated possible
-# completion words by appending a space to all of them.
+# Generates completion reply from newline-separated possible completion words
+# by appending a space to all of them.
 # It accepts 1 to 4 arguments:
 # 1: List of possible completion words, separated by a single newline.
 # 2: A prefix to be added to each possible completion word (optional).
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index 35fc31b..7fb5b50 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -340,7 +340,7 @@ test_expect_success 'complete tree filename with spaces' '
 	EOF
 '
 
-test_expect_failure 'complete tree filename with metacharacters' '
+test_expect_success 'complete tree filename with metacharacters' '
 	echo content >"name with \${meta}" &&
 	git add . &&
 	git commit -m meta &&
-- 
1.8.0

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

* [RFC/PATCH v2 6/8] tmp: completion: mark SZEDER's tests as fixed
  2012-11-18 10:56 [RFC/PATCH v2 0/8] completion: compgen/compadd cleanups Felipe Contreras
                   ` (4 preceding siblings ...)
  2012-11-18 10:56 ` [RFC/PATCH v2 5/8] completion: get rid of compgen Felipe Contreras
@ 2012-11-18 10:56 ` Felipe Contreras
  2012-11-18 10:56 ` [RFC/PATCH v2 7/8] completion: get rid of __gitcomp_1 Felipe Contreras
  2012-11-18 10:56 ` [RFC/PATCH v2 8/8] completion: small optimization Felipe Contreras
  7 siblings, 0 replies; 9+ messages in thread
From: Felipe Contreras @ 2012-11-18 10:56 UTC (permalink / raw)
  To: git
  Cc: Junio C Hamano, SZEDER Gábor, Felipe Contreras,
	Björn Gustavsson, Shawn O. Pearce, Robert Zeh,
	Peter van der Does, Jonathan Nieder, Jeff King

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 t/t9902-completion.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index 7fb5b50..4e2f4fb 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -174,7 +174,7 @@ test_expect_success '__gitcomp - suffix' '
 	test_cmp expected out
 '
 
-test_expect_failure '__gitcomp - doesnt fail because of invalid variable name' '
+test_expect_success '__gitcomp - doesnt fail because of invalid variable name' '
 	__gitcomp "$invalid_variable_name"
 '
 
@@ -213,7 +213,7 @@ test_expect_success '__gitcomp_nl - no suffix' '
 	EOF
 '
 
-test_expect_failure '__gitcomp_nl - doesnt fail because of invalid variable name' '
+test_expect_success '__gitcomp_nl - doesnt fail because of invalid variable name' '
 	__gitcomp_nl "$invalid_variable_name"
 '
 
-- 
1.8.0

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

* [RFC/PATCH v2 7/8] completion: get rid of __gitcomp_1
  2012-11-18 10:56 [RFC/PATCH v2 0/8] completion: compgen/compadd cleanups Felipe Contreras
                   ` (5 preceding siblings ...)
  2012-11-18 10:56 ` [RFC/PATCH v2 6/8] tmp: completion: mark SZEDER's tests as fixed Felipe Contreras
@ 2012-11-18 10:56 ` Felipe Contreras
  2012-11-18 10:56 ` [RFC/PATCH v2 8/8] completion: small optimization Felipe Contreras
  7 siblings, 0 replies; 9+ messages in thread
From: Felipe Contreras @ 2012-11-18 10:56 UTC (permalink / raw)
  To: git
  Cc: Junio C Hamano, SZEDER Gábor, Felipe Contreras,
	Björn Gustavsson, Shawn O. Pearce, Robert Zeh,
	Peter van der Does, Jonathan Nieder, Jeff King

There's no point in calling a separate function that is only used in one
place. Specially considering that there's no need to call compgen, and
we traverse the words ourselves both in __gitcompadd, and __gitcomp_1.

So lets squash the functions together, and traverse only once.

This improves performance.

No functional changes.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 contrib/completion/git-completion.bash | 26 +++++++++++---------------
 1 file changed, 11 insertions(+), 15 deletions(-)

diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 0b72f24..82ea7b1 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -56,19 +56,6 @@ __gitdir ()
 	fi
 }
 
-__gitcomp_1 ()
-{
-	local c IFS=$' \t\n'
-	for c in $1; do
-		c="$c$2"
-		case $c in
-		--*=*|*.) ;;
-		*) c="$c " ;;
-		esac
-		printf '%s\n' "$c"
-	done
-}
-
 # The following function is based on code from:
 #
 #   bash_completion - programmable completion functions for bash 3.2+
@@ -250,8 +237,17 @@ __gitcomp ()
 	--*=)
 		;;
 	*)
-		local IFS=$'\n'
-		__gitcompadd "$(__gitcomp_1 "${1-}" "${4-}")" "${2-}" "$cur_" ""
+		local c i=0 IFS=$' \t\n'
+		for c in $1; do
+			c="$c${4-}"
+			case $c in
+			--*=*|*.) ;;
+			*) c="$c " ;;
+			esac
+			if [[ $c == "$cur_"* ]]; then
+				COMPREPLY[i++]="${2-}$c"
+			fi
+		done
 		;;
 	esac
 }
-- 
1.8.0

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

* [RFC/PATCH v2 8/8] completion: small optimization
  2012-11-18 10:56 [RFC/PATCH v2 0/8] completion: compgen/compadd cleanups Felipe Contreras
                   ` (6 preceding siblings ...)
  2012-11-18 10:56 ` [RFC/PATCH v2 7/8] completion: get rid of __gitcomp_1 Felipe Contreras
@ 2012-11-18 10:56 ` Felipe Contreras
  7 siblings, 0 replies; 9+ messages in thread
From: Felipe Contreras @ 2012-11-18 10:56 UTC (permalink / raw)
  To: git
  Cc: Junio C Hamano, SZEDER Gábor, Felipe Contreras,
	Björn Gustavsson, Shawn O. Pearce, Robert Zeh,
	Peter van der Does, Jonathan Nieder, Jeff King

No need to calculate a new $c with a space if we are not going to do
anything it with it.

There should be no functional changes, except that a word "foo " with no
suffixes can't be matched. But $cur cannot have a space at the end
anyway. So it's safe.

Based on the code from SZEDER Gábor.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 contrib/completion/git-completion.bash | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 82ea7b1..e5f862c 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -240,11 +240,11 @@ __gitcomp ()
 		local c i=0 IFS=$' \t\n'
 		for c in $1; do
 			c="$c${4-}"
-			case $c in
-			--*=*|*.) ;;
-			*) c="$c " ;;
-			esac
 			if [[ $c == "$cur_"* ]]; then
+				case $c in
+				--*=*|*.) ;;
+				*) c="$c " ;;
+				esac
 				COMPREPLY[i++]="${2-}$c"
 			fi
 		done
-- 
1.8.0

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

end of thread, other threads:[~2012-11-18 10:57 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-11-18 10:56 [RFC/PATCH v2 0/8] completion: compgen/compadd cleanups Felipe Contreras
2012-11-18 10:56 ` [RFC/PATCH v2 1/8] completion: trivial test improvement Felipe Contreras
2012-11-18 10:56 ` [RFC/PATCH v2 2/8] completion: get rid of empty COMPREPLY assignments Felipe Contreras
2012-11-18 10:56 ` [RFC/PATCH v2 3/8] completion: add new __gitcompadd helper Felipe Contreras
2012-11-18 10:56 ` [RFC/PATCH v2 4/8] tmp: completion: add SZEDER's tests Felipe Contreras
2012-11-18 10:56 ` [RFC/PATCH v2 5/8] completion: get rid of compgen Felipe Contreras
2012-11-18 10:56 ` [RFC/PATCH v2 6/8] tmp: completion: mark SZEDER's tests as fixed Felipe Contreras
2012-11-18 10:56 ` [RFC/PATCH v2 7/8] completion: get rid of __gitcomp_1 Felipe Contreras
2012-11-18 10:56 ` [RFC/PATCH v2 8/8] completion: small optimization Felipe Contreras

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.