git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "SZEDER Gábor" <szeder.dev@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: "Eric Sunshine" <sunshine@sunshineco.com>,
	git@vger.kernel.org, "SZEDER Gábor" <szeder.dev@gmail.com>
Subject: [PATCH v2 3/6] completion: return the index of found word from __git_find_on_cmdline()
Date: Thu, 19 Dec 2019 16:09:18 +0100	[thread overview]
Message-ID: <20191219150921.5889-4-szeder.dev@gmail.com> (raw)
In-Reply-To: <20191219150921.5889-1-szeder.dev@gmail.com>

When using the __git_find_on_cmdline() helper function so far we've
only been interested in which one of a set of words appear on the
command line.  To complete options for some of 'git worktree's
subcommands in the following patches we'll need not only that, but the
index of that word on the command line as well.

Extend __git_find_on_cmdline() to optionally show the index of the
found word on the command line (IOW in the $words array) when the
'--show-idx' option is given.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
---
 contrib/completion/git-completion.bash | 20 +++++++++++++++---
 t/t9902-completion.sh                  | 29 ++++++++++++++++++++++++++
 2 files changed, 46 insertions(+), 3 deletions(-)

diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 2384f91e78..55a2d3e174 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -1069,18 +1069,32 @@ __git_aliased_command ()
 	done
 }
 
-# __git_find_on_cmdline requires 1 argument
 # Check whether one of the given words is present on the command line,
 # and print the first word found.
+#
+# Usage: __git_find_on_cmdline [<option>]... "<wordlist>"
+# --show-idx: Optionally show the index of the found word in the $words array.
 __git_find_on_cmdline ()
 {
-	local word c=1
+	local word c=1 show_idx
+
+	while test $# -gt 1; do
+		case "$1" in
+		--show-idx)	show_idx=y ;;
+		*)		return 1 ;;
+		esac
+		shift
+	done
 	local wordlist="$1"
 
 	while [ $c -lt $cword ]; do
 		for word in $wordlist; do
 			if [ "$word" = "${words[c]}" ]; then
-				echo "$word"
+				if [ -n "$show_idx" ]; then
+					echo "$c $word"
+				else
+					echo "$word"
+				fi
 				return
 			fi
 		done
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index 847ce601d2..3e3299819a 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -1392,6 +1392,35 @@ test_expect_success '__git_find_on_cmdline - no match' '
 	test_must_be_empty actual
 '
 
+test_expect_success '__git_find_on_cmdline - single match with index' '
+	echo "3 list" >expect &&
+	(
+		words=(git command --opt list) &&
+		cword=${#words[@]} &&
+		__git_find_on_cmdline --show-idx "add list remove" >actual
+	) &&
+	test_cmp expect actual
+'
+
+test_expect_success '__git_find_on_cmdline - multiple matches with index' '
+	echo "4 remove" >expect &&
+	(
+		words=(git command -o --opt remove list add) &&
+		cword=${#words[@]} &&
+		__git_find_on_cmdline --show-idx "add list remove" >actual
+	) &&
+	test_cmp expect actual
+'
+
+test_expect_success '__git_find_on_cmdline - no match with index' '
+	(
+		words=(git command --opt branch) &&
+		cword=${#words[@]} &&
+		__git_find_on_cmdline --show-idx "add list remove" >actual
+	) &&
+	test_must_be_empty actual
+'
+
 test_expect_success '__git_get_config_variables' '
 	cat >expect <<-EOF &&
 	name-1
-- 
2.24.1.982.ga4d4aba446


  parent reply	other threads:[~2019-12-19 15:09 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-17 17:34 [PATCH 0/6] completion: improve completion for 'git worktree' SZEDER Gábor
2019-10-17 17:34 ` [PATCH 1/6] t9902-completion: add tests for the __git_find_on_cmdline() helper SZEDER Gábor
2019-10-17 17:34 ` [PATCH 2/6] completion: clean up the __git_find_on_cmdline() helper function SZEDER Gábor
2019-10-17 17:34 ` [PATCH 3/6] completion: return the index of found word from __git_find_on_cmdline() SZEDER Gábor
2019-10-17 17:52   ` Eric Sunshine
2019-10-18 14:37     ` SZEDER Gábor
2019-10-18 21:01       ` Eric Sunshine
2019-12-19 14:39         ` SZEDER Gábor
2019-12-19 14:44       ` SZEDER Gábor
2019-10-17 17:34 ` [PATCH 4/6] completion: simplify completing 'git worktree' subcommands and options SZEDER Gábor
2019-10-17 17:35 ` [PATCH 5/6] completion: list existing working trees for 'git worktree' subcommands SZEDER Gábor
2019-10-17 18:08   ` Eric Sunshine
2019-10-18 15:00     ` SZEDER Gábor
2019-10-18 20:45       ` Eric Sunshine
2019-10-17 17:35 ` [PATCH 6/6] completion: list paths and refs for 'git worktree add' SZEDER Gábor
2019-12-19 15:09 ` [PATCH v2 0/6] completion: improve completion for 'git worktree' SZEDER Gábor
2019-12-19 15:09   ` [PATCH v2 1/6] t9902-completion: add tests for the __git_find_on_cmdline() helper SZEDER Gábor
2019-12-19 15:09   ` [PATCH v2 2/6] completion: clean up the __git_find_on_cmdline() helper function SZEDER Gábor
2019-12-19 15:09   ` SZEDER Gábor [this message]
2019-12-19 15:09   ` [PATCH v2 4/6] completion: simplify completing 'git worktree' subcommands and options SZEDER Gábor
2019-12-19 15:09   ` [PATCH v2 5/6] completion: list existing working trees for 'git worktree' subcommands SZEDER Gábor
2019-12-19 15:09   ` [PATCH v2 6/6] completion: list paths and refs for 'git worktree add' SZEDER Gábor

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=20191219150921.5889-4-szeder.dev@gmail.com \
    --to=szeder.dev@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=sunshine@sunshineco.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).