All of lore.kernel.org
 help / color / mirror / Atom feed
From: Felipe Contreras <felipe.contreras@gmail.com>
To: git@vger.kernel.org
Cc: Felipe Contreras <felipe.contreras@gmail.com>
Subject: [PATCH v1 42/43] completion: bash: rename _get_comp_words_by_ref()
Date: Mon, 26 Apr 2021 11:14:57 -0500	[thread overview]
Message-ID: <20210426161458.49860-43-felipe.contreras@gmail.com> (raw)
In-Reply-To: <20210426161458.49860-1-felipe.contreras@gmail.com>

It's only used in one place, rename it, and use it even if
bash-completion's more inefficient version of _get_comp_words_by_ref()
is available.

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

diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 1cd249383b..d66db0ea99 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -307,98 +307,6 @@ __git_dequote ()
 	done
 }
 
-# The following function is based on code from:
-#
-#   bash_completion - programmable completion functions for bash 3.2+
-#
-#   Copyright © 2006-2008, Ian Macdonald <ian@caliban.org>
-#             © 2009-2010, Bash Completion Maintainers
-#                     <bash-completion-devel@lists.alioth.debian.org>
-#
-#   This program is free software; you can redistribute it and/or modify
-#   it under the terms of the GNU General Public License as published by
-#   the Free Software Foundation; either version 2, or (at your option)
-#   any later version.
-#
-#   This program is distributed in the hope that it will be useful,
-#   but WITHOUT ANY WARRANTY; without even the implied warranty of
-#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#   GNU General Public License for more details.
-#
-#   You should have received a copy of the GNU General Public License
-#   along with this program; if not, see <http://www.gnu.org/licenses/>.
-#
-#   The latest version of this software can be obtained here:
-#
-#   http://bash-completion.alioth.debian.org/
-#
-#   RELEASE: 2.x
-
-# This function reorganizes the words on the command line to be processed by
-# the rest of the script.
-#
-# This is roughly equivalent to going back in time and setting
-# COMP_WORDBREAKS to exclude '=' and ':'.  The intent is to
-# make option types like --date=<type> and <rev>:<path> easy to
-# recognize by treating each shell word as a single token.
-#
-# It is best not to set COMP_WORDBREAKS directly because the value is
-# shared with other completion scripts.  By the time the completion
-# function gets called, COMP_WORDS has already been populated so local
-# changes to COMP_WORDBREAKS have no effect.
-
-if ! type _get_comp_words_by_ref >/dev/null 2>&1; then
-_get_comp_words_by_ref ()
-{
-	local exclude i j first
-
-	# Which word separators to exclude?
-	exclude="${COMP_WORDBREAKS//[^=:]}"
-	cword=$COMP_CWORD
-	if [ -n "$exclude" ]; then
-		# List of word completion separators has shrunk;
-		# re-assemble words to complete.
-		for ((i=0, j=0; i < ${#COMP_WORDS[@]}; i++, j++)); do
-			# Append each nonempty word consisting of just
-			# word separator characters to the current word.
-			first=t
-			while
-				[ $i -gt 0 ] &&
-				[ -n "${COMP_WORDS[$i]}" ] &&
-				# word consists of excluded word separators
-				[ "${COMP_WORDS[$i]//[^$exclude]}" = "${COMP_WORDS[$i]}" ]
-			do
-				# Attach to the previous token,
-				# unless the previous token is the command name.
-				if [ $j -ge 2 ] && [ -n "$first" ]; then
-					((j--))
-				fi
-				first=
-				words[$j]=${words[j]}${COMP_WORDS[i]}
-				if [ $i = $COMP_CWORD ]; then
-					cword=$j
-				fi
-				if (($i < ${#COMP_WORDS[@]} - 1)); then
-					((i++))
-				else
-					# Done.
-					break 2
-				fi
-			done
-			words[$j]=${words[j]}${COMP_WORDS[i]}
-			if [ $i = $COMP_CWORD ]; then
-				cword=$j
-			fi
-		done
-	else
-		words=("${COMP_WORDS[@]}")
-	fi
-
-	cur=${words[cword]}
-	prev=${words[cword-1]}
-}
-fi
-
 # Clear the variables caching builtins' options when (re-)sourcing
 # the completion script.
 if [[ -n ${ZSH_VERSION-} ]]; then
@@ -3435,10 +3343,100 @@ if [[ -n ${ZSH_VERSION-} && -z ${GIT_SOURCING_ZSH_COMPLETION-} ]]; then
 	return
 fi
 
+# The following function is based on code from:
+#
+#   bash_completion - programmable completion functions for bash 3.2+
+#
+#   Copyright © 2006-2008, Ian Macdonald <ian@caliban.org>
+#             © 2009-2010, Bash Completion Maintainers
+#                     <bash-completion-devel@lists.alioth.debian.org>
+#
+#   This program is free software; you can redistribute it and/or modify
+#   it under the terms of the GNU General Public License as published by
+#   the Free Software Foundation; either version 2, or (at your option)
+#   any later version.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License
+#   along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
+#   The latest version of this software can be obtained here:
+#
+#   http://bash-completion.alioth.debian.org/
+#
+#   RELEASE: 2.x
+
+# This function reorganizes the words on the command line to be processed by
+# the rest of the script.
+#
+# This is roughly equivalent to going back in time and setting
+# COMP_WORDBREAKS to exclude '=' and ':'.  The intent is to
+# make option types like --date=<type> and <rev>:<path> easy to
+# recognize by treating each shell word as a single token.
+#
+# It is best not to set COMP_WORDBREAKS directly because the value is
+# shared with other completion scripts.  By the time the completion
+# function gets called, COMP_WORDS has already been populated so local
+# changes to COMP_WORDBREAKS have no effect.
+
+__git_get_comp_words_by_ref ()
+{
+	local exclude i j first
+
+	# Which word separators to exclude?
+	exclude="${COMP_WORDBREAKS//[^=:]}"
+	cword=$COMP_CWORD
+	if [ -n "$exclude" ]; then
+		# List of word completion separators has shrunk;
+		# re-assemble words to complete.
+		for ((i=0, j=0; i < ${#COMP_WORDS[@]}; i++, j++)); do
+			# Append each nonempty word consisting of just
+			# word separator characters to the current word.
+			first=t
+			while
+				[ $i -gt 0 ] &&
+				[ -n "${COMP_WORDS[$i]}" ] &&
+				# word consists of excluded word separators
+				[ "${COMP_WORDS[$i]//[^$exclude]}" = "${COMP_WORDS[$i]}" ]
+			do
+				# Attach to the previous token,
+				# unless the previous token is the command name.
+				if [ $j -ge 2 ] && [ -n "$first" ]; then
+					((j--))
+				fi
+				first=
+				words[$j]=${words[j]}${COMP_WORDS[i]}
+				if [ $i = $COMP_CWORD ]; then
+					cword=$j
+				fi
+				if (($i < ${#COMP_WORDS[@]} - 1)); then
+					((i++))
+				else
+					# Done.
+					break 2
+				fi
+			done
+			words[$j]=${words[j]}${COMP_WORDS[i]}
+			if [ $i = $COMP_CWORD ]; then
+				cword=$j
+			fi
+		done
+	else
+		words=("${COMP_WORDS[@]}")
+	fi
+
+	cur=${words[cword]}
+	prev=${words[cword-1]}
+}
+
 __git_func_wrap ()
 {
 	local cur words cword prev
-	_get_comp_words_by_ref -n =: cur words cword prev
+	__git_get_comp_words_by_ref
 	$1
 }
 
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index dfa2cb3b21..a184254891 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -41,7 +41,7 @@ GIT_TESTING_PORCELAIN_COMMAND_LIST='add checkout rebase'
 # We don't need this function to actually join words or do anything special.
 # Also, it's cleaner to avoid touching bash's internal completion variables.
 # So let's override it with a minimal version for testing purposes.
-_get_comp_words_by_ref ()
+__git_get_comp_words_by_ref ()
 {
 	cword=$_cword
 	cur=${_words[cword]}
-- 
2.31.0


  parent reply	other threads:[~2021-04-26 16:21 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-26 16:14 [PATCH v1 00/43] completion: git-completion 1.3.1 patches Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 01/43] completion: bash: fix prefix detection in branch.* Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 02/43] completion: fix for suboptions with value Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 03/43] completion: bash: fix for multiple dash commands Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 04/43] completion: bash: add correct suffix in variables Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 05/43] completion: bash: do not modify COMP_WORDBREAKS Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 06/43] test: completion: fix currently typed words Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 07/43] test: completion: switch __gitcomp_nl prefix test Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 08/43] test: completion: add run_func() helper Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 09/43] completion: bash: remove non-append functionality Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 10/43] completion: bash: get rid of _append() functions Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 11/43] completion: bash: get rid of any non-append code Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 12/43] completion: zsh: fix options with arguments Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 13/43] completion: zsh: expand --git-dir file argument Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 14/43] completion: zsh: add support for general -C opts Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 15/43] completion: zsh: fix for undefined completions Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 16/43] completion: zsh: add support for general -c opts Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 17/43] completion: zsh: fix extra space on foo= Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 18/43] completion: zsh: add excluded options Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 19/43] completion: zsh: always set compset Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 20/43] completion: factor out check in __gitcomp Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 21/43] completion: simplify equal suffix check Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 22/43] completion: refactor __gitcomp Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 23/43] completion: simplify __gitcomp Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 24/43] completion: bash: change suffix check in __gitcomp Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 25/43] completion: improve __gitcomp suffix code Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 26/43] completion: bash: simplify config_variable_name Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 27/43] test: completion: add missing test Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 28/43] completion: bash: improve __gitcomp description Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 29/43] completion: add __gitcomp_opts Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 30/43] completion: bash: cleanup __gitcomp* invocations Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 31/43] completion: bash: shuffle __gitcomp functions Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 32/43] completion: zsh: simplify __gitcomp_direct Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 33/43] completion: zsh: shuffle __gitcomp* functions Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 34/43] completion: zsh: fix direct quoting Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 35/43] completion: zsh: add elements individually in __gitcomp_opts Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 36/43] completion: zsh: add __gitcompadd helper Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 37/43] completion: zsh: add correct removable suffix Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 38/43] completion: bash: simplify _get_comp_words_by_ref() Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 39/43] completion: bash: refactor _get_comp_words_by_ref() Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 40/43] completion: bash: cleanup _get_comp_words_by_ref() Felipe Contreras
2021-04-26 16:14 ` [PATCH v1 41/43] completion: bash: trivial cleanup Felipe Contreras
2021-04-26 16:14 ` Felipe Contreras [this message]
2021-04-26 16:14 ` [PATCH v1 43/43] completion: zsh: add higher-priority location Felipe Contreras
2021-05-06 23:55 ` [PATCH v1 00/43] completion: git-completion 1.3.1 patches Junio C Hamano
2021-05-07  2:17   ` Felipe Contreras

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210426161458.49860-43-felipe.contreras@gmail.com \
    --to=felipe.contreras@gmail.com \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.