threads / patch / 53855

patchcompletion: add show --color-moved[-ws]

Subject: [PATCH] completion: add show --color-moved[-ws]

## tl;dr

2 messages between Jul 14, 2020 and Jul 15, 2020. Diffs are folded; open one to read it.

replies: 1people: 2as markdown or json

Michal Privoznik· Jul 14, 2020, 07:44 UTC · lore

The completion for diff command was added in fd0bc175576 but missed the show command which also supports --color-moved[-ws].

This suffers from the very same problem [1] as the referenced commit: no comma-separated list completion for --color-moved-ws.

[1]: https://github.com/scop/bash-completion/issues/240
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
---
 contrib/completion/git-completion.bash | 8 ++++++++
 1 file changed, 8 insertions(+)
Show changes to contrib/completion/git-completion.bash +8 −0
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index c21786f2fd..d23cf181ef 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -2732,6 +2732,14 @@ _git_show ()
 		__gitcomp "$__git_diff_submodule_formats" "" "${cur##--submodule=}"
 		return
 		;;
+	--color-moved=*)
+		__gitcomp "$__git_color_moved_opts" "" "${cur##--color-moved=}"
+		return
+		;;
+	--color-moved-ws=*)
+		__gitcomp "$__git_color_moved_ws_opts" "" "${cur##--color-moved-ws=}"
+		return
+		;;
 	--*)
 		__gitcomp "--pretty= --format= --abbrev-commit --no-abbrev-commit
 			--oneline --show-signature --patch
-- 
2.26.2
Junio C Hamano· Jul 15, 2020, 21:08 UTC · re: Michal Privoznik · lore

Re: [PATCH] completion: add show --color-moved[-ws]

Michal Privoznik <mprivozn@redhat.com> writes:
> The completion for diff command was added in fd0bc175576 but
> missed the show command which also supports --color-moved[-ws].
A block line this
Show 8 quoted lines
> +	--color-moved=*)
> +		__gitcomp "$__git_color_moved_opts" "" "${cur##--color-moved=}"
> +		return
> +		;;
> +	--color-moved-ws=*)
> +		__gitcomp "$__git_color_moved_ws_opts" "" "${cur##--color-moved-ws=}"
> +		return
> +		;;
appear twice in the file, once in _git_diff and again in _git_show.

It is disturbing that we need to keep duplicating these same options over and over again. Granted, the duplication exists before this patch (the case arms for --diff-algorithm=* and --submodule=* are already duplicated), but this patch makes it worse X-<.

And the next person who notices that this patch only added these to "show" would want to further duplicate them to _git_log. Yuck X-<.

Will apply as-is for now, but at some point we may want to clean these up. With a new helper, along the lines of this, perhaps?

Thanks.
 contrib/completion/git-completion.bash | 79 +++++++++++++++++-----------------
 1 file changed, 39 insertions(+), 40 deletions(-)
Show changes to contrib/completion/git-completion.bash +39 −40
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 0fdb5da83b..e2d6d17bfe 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -1683,23 +1683,12 @@ _git_diff ()
 {
 	__git_has_doubledash && return
 
-	case "$cur" in
-	--diff-algorithm=*)
-		__gitcomp "$__git_diff_algorithms" "" "${cur##--diff-algorithm=}"
-		return
-		;;
-	--submodule=*)
-		__gitcomp "$__git_diff_submodule_formats" "" "${cur##--submodule=}"
-		return
-		;;
-	--color-moved=*)
-		__gitcomp "$__git_color_moved_opts" "" "${cur##--color-moved=}"
-		return
-		;;
-	--color-moved-ws=*)
-		__gitcomp "$__git_color_moved_ws_opts" "" "${cur##--color-moved-ws=}"
+	if __git_complete_common_diff_option_args
+	then
 		return
-		;;
+	fi
+
+	case "$cur" in
 	--*)
 		__gitcomp "--cached --staged --pickaxe-all --pickaxe-regex
 			--base --ours --theirs --no-index
@@ -1949,6 +1938,29 @@ __git_log_shortlog_options="
 __git_log_pretty_formats="oneline short medium full fuller reference email raw format: tformat: mboxrd"
 __git_log_date_formats="relative iso8601 iso8601-strict rfc2822 short local default raw unix format:"
 
+__git_complete_common_diff_option_args ()
+{
+	case "$cur" in
+	--diff-algorithm=*)
+		__gitcomp "$__git_diff_algorithms" "" "${cur##--diff-algorithm=}"
+		return 0
+		;;
+	--submodule=*)
+		__gitcomp "$__git_diff_submodule_formats" "" "${cur##--submodule=}"
+		return 0
+		;;
+	--color-moved=*)
+		__gitcomp "$__git_color_moved_opts" "" "${cur##--color-moved=}"
+		return 0
+		;;
+	--color-moved-ws=*)
+		__gitcomp "$__git_color_moved_ws_opts" "" "${cur##--color-moved-ws=}"
+		return 0
+		;;
+	esac
+	return 1
+}
+
 _git_log ()
 {
 	__git_has_doubledash && return
@@ -1971,6 +1983,12 @@ _git_log ()
 		return
 		;;
 	esac
+
+	if __git_complete_common_diff_option_args
+	then
+		return
+	fi
+
 	case "$cur" in
 	--pretty=*|--format=*)
 		__gitcomp "$__git_log_pretty_formats $(__git_pretty_aliases)
@@ -1985,14 +2003,6 @@ _git_log ()
 		__gitcomp "full short no" "" "${cur##--decorate=}"
 		return
 		;;
-	--diff-algorithm=*)
-		__gitcomp "$__git_diff_algorithms" "" "${cur##--diff-algorithm=}"
-		return
-		;;
-	--submodule=*)
-		__gitcomp "$__git_diff_submodule_formats" "" "${cur##--submodule=}"
-		return
-		;;
 	--no-walk=*)
 		__gitcomp "sorted unsorted" "" "${cur##--no-walk=}"
 		return
@@ -2893,28 +2903,17 @@ _git_show ()
 {
 	__git_has_doubledash && return
 
+	if __git_complete_common_diff_option_args
+	then
+		return
+	fi
+
 	case "$cur" in
 	--pretty=*|--format=*)
 		__gitcomp "$__git_log_pretty_formats $(__git_pretty_aliases)
 			" "" "${cur#*=}"
 		return
 		;;
-	--diff-algorithm=*)
-		__gitcomp "$__git_diff_algorithms" "" "${cur##--diff-algorithm=}"
-		return
-		;;
-	--submodule=*)
-		__gitcomp "$__git_diff_submodule_formats" "" "${cur##--submodule=}"
-		return
-		;;
-	--color-moved=*)
-		__gitcomp "$__git_color_moved_opts" "" "${cur##--color-moved=}"
-		return
-		;;
-	--color-moved-ws=*)
-		__gitcomp "$__git_color_moved_ws_opts" "" "${cur##--color-moved-ws=}"
-		return
-		;;
 	--*)
 		__gitcomp "--pretty= --format= --abbrev-commit --no-abbrev-commit
 			--oneline --show-signature --patch

← back to recent threads