[PATCH 07/11] completion: avoid compopt -o filenames

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



If this option causes so much trouble, lets just not use it.

The supposed advantages of specifying the 'filenames' is that 1) a slash
is added at the end, 2) trailing spaces are removed (which doesn't seem
to be true), and 3) special characters are quoted. We can do all those
things by ourselves.

Also, this will allow us to add a space after the completion, just like
it happened before fea16b4 (git-completion.bash: add support for path
completion), and just like the rest of the script does.

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

diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 9cea170..5dd6646 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -253,12 +253,12 @@ __gitcomp_file ()
 	# This means that COMPREPLY will be empty and Bash default
 	# completion will be used.
 	__gitcompadd "$1" "${2-}" "${3-$cur}" ""
-
-	# Tell Bash that compspec generates filenames.
-	compopt -o filenames 2>/dev/null
 }
 
-__git_index_file_list_filter_compat ()
+# Process path list returned by "ls-files" and "diff-index --name-only"
+# commands, in order to list only file names relative to a specified
+# directory, and append a slash to directory names.
+__git_index_file_list_filter ()
 {
 	local path
 
@@ -270,33 +270,6 @@ __git_index_file_list_filter_compat ()
 	done
 }
 
-__git_index_file_list_filter_bash ()
-{
-	local path
-
-	while read -r path; do
-		case "$path" in
-		?*/*)
-			# XXX if we append a slash to directory names when using
-			# `compopt -o filenames`, Bash will append another slash.
-			# This is pretty stupid, and this the reason why we have to
-			# define a compatible version for this function.
-			echo "${path%%/*}" ;;
-		*)
-			echo "$path" ;;
-		esac
-	done
-}
-
-# Process path list returned by "ls-files" and "diff-index --name-only"
-# commands, in order to list only file names relative to a specified
-# directory, and append a slash to directory names.
-__git_index_file_list_filter ()
-{
-	# Default to Bash >= 4.x
-	__git_index_file_list_filter_bash
-}
-
 # Execute 'git ls-files', unless the --committable option is specified, in
 # which case it runs 'git diff-index' to find out the files that can be
 # committed.  It return paths relative to the directory specified in the first
@@ -2651,14 +2624,6 @@ if [[ -n ${ZSH_VERSION-} ]]; then
 
 	compdef _git git gitk
 	return
-elif [[ -n ${BASH_VERSION-} ]]; then
-	if ((${BASH_VERSINFO[0]} < 4)); then
-		# compopt is not supported
-		__git_index_file_list_filter ()
-		{
-			__git_index_file_list_filter_compat
-		}
-	fi
 fi
 
 __git_func_wrap ()
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index 81a1657..e6cdb05 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -396,10 +396,10 @@ test_expect_success 'complete files' '
 	: TODO .gitignore should not be here &&
 	test_completion "git mv modified " <<-\EOF &&
 	.gitignore
-	dir
+	dir/
 	modified
 	untracked
-	untracked-dir
+	untracked-dir/
 	EOF
 
 	test_completion "git commit " "modified" &&
@@ -407,7 +407,7 @@ test_expect_success 'complete files' '
 	: TODO .gitignore should not be here &&
 	test_completion "git ls-files " <<-\EOF
 	.gitignore
-	dir
+	dir/
 	modified
 	EOF
 
-- 
1.8.2.1.1031.g2ee5873

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]