git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 1/3] completion: add 'symbolic-ref'
@ 2024-04-25 10:18 Roland Hieber
  2024-04-25 10:18 ` [PATCH v3 2/3] completion: improve docs for using __git_complete Roland Hieber
                   ` (4 more replies)
  0 siblings, 5 replies; 10+ messages in thread
From: Roland Hieber @ 2024-04-25 10:18 UTC (permalink / raw)
  To: git; +Cc: Roland Hieber, Junio C Hamano, Denton Liu

Even 'symbolic-ref' is only completed when
GIT_COMPLETION_SHOW_ALL_COMMANDS=1 is set, it currently defaults to
completing file names, which is not very helpful. Add a simple
completion function which completes options and refs.

Signed-off-by: Roland Hieber <rhi@pengutronix.de>
---
PATCH v3:
 - make use of __gitcomp_builtin instead of hard-coded options, and add
   a test for it (thanks to Patrick Steinhardt)
 - add empty line between test cases (thanks to Patrick Steinhardt)

PATCH v2: https://lore.kernel.org/git/20240424215019.268208-1-rhi@pengutronix.de
 - no changes

PATCH v1: https://lore.kernel.org/git/20240424210549.256256-1-rhi@pengutronix.de/
---
 contrib/completion/git-completion.bash | 11 +++++++++++
 t/t9902-completion.sh                  | 23 +++++++++++++++++++++++
 2 files changed, 34 insertions(+)

diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 75193ded4bde..4d63fb6eeaf7 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -3581,6 +3581,17 @@ _git_svn ()
 	fi
 }
 
+_git_symbolic_ref () {
+	case "$cur" in
+	--*)
+		__gitcomp_builtin symbolic-ref
+		return
+		;;
+	esac
+
+	__git_complete_refs
+}
+
 _git_tag ()
 {
 	local i c="$__git_cmd_idx" f=0
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index 569cf2310434..963f865f27ed 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -2518,6 +2518,29 @@ test_expect_success 'complete tree filename with metacharacters' '
 	EOF
 '
 
+test_expect_success 'symbolic-ref completes builtin options' '
+	test_completion "git symbolic-ref --d" <<-\EOF
+	--delete Z
+	EOF
+'
+
+test_expect_success 'symbolic-ref completes short ref names' '
+	test_completion "git symbolic-ref foo m" <<-\EOF
+	main Z
+	mybranch Z
+	mytag Z
+	EOF
+'
+
+test_expect_success 'symbolic-ref completes full ref names' '
+	test_completion "git symbolic-ref foo refs/" <<-\EOF
+	refs/heads/main Z
+	refs/heads/mybranch Z
+	refs/tags/mytag Z
+	refs/tags/A Z
+	EOF
+'
+
 test_expect_success PERL 'send-email' '
 	test_completion "git send-email --cov" <<-\EOF &&
 	--cover-from-description=Z
-- 
2.39.2


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

* [PATCH v3 2/3] completion: improve docs for using __git_complete
  2024-04-25 10:18 [PATCH v3 1/3] completion: add 'symbolic-ref' Roland Hieber
@ 2024-04-25 10:18 ` Roland Hieber
  2024-04-25 10:18 ` [PATCH v3 3/3] completion: add docs on how to add subcommand completions Roland Hieber
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 10+ messages in thread
From: Roland Hieber @ 2024-04-25 10:18 UTC (permalink / raw)
  To: git; +Cc: Roland Hieber, Felipe Contreras, Junio C Hamano

It took me more than a few tries and a good lecture of __git_main to
understand that the two paragraphs really only refer to adding
completion functions for executables that are not called through git's
subcommand magic. Improve the docs and be more specific.

Signed-off-by: Roland Hieber <rhi@pengutronix.de>
---
PATCH v3: new in v3, based on feedback from Junio C Hamano
---
 contrib/completion/git-completion.bash | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 4d63fb6eeaf7..566f32d412ce 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -31,15 +31,22 @@
 # Note that "git" is optional --- '!f() { : commit; ...}; f' would complete
 # just like the 'git commit' command.
 #
-# If you have a command that is not part of git, but you would still
-# like completion, you can use __git_complete:
+# If you have a shell command that is not part of git (and is not called as a
+# git subcommand), but you would still like git-style completion for it, use
+# __git_complete. For example, to use the same completion as for 'git log' also
+# for the 'gl' command:
 #
 #   __git_complete gl git_log
 #
-# Or if it's a main command (i.e. git or gitk):
+# Or if the 'gk' command should be completed the same as 'gitk':
 #
 #   __git_complete gk gitk
 #
+# The second parameter of __git_complete gives the completion function; it is
+# resolved as a function named "$2", or "__$2_main", or "_$2" in that order.
+# In the examples above, the actual functions used for completion will be
+# _git_log and __gitk_main.
+#
 # Compatible with bash 3.2.57.
 #
 # You can set the following environment variables to influence the behavior of
-- 
2.39.2


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

* [PATCH v3 3/3] completion: add docs on how to add subcommand completions
  2024-04-25 10:18 [PATCH v3 1/3] completion: add 'symbolic-ref' Roland Hieber
  2024-04-25 10:18 ` [PATCH v3 2/3] completion: improve docs for using __git_complete Roland Hieber
@ 2024-04-25 10:18 ` Roland Hieber
  2024-04-25 10:45 ` [PATCH v3 1/3] completion: add 'symbolic-ref' Kristoffer Haugsbakk
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 10+ messages in thread
From: Roland Hieber @ 2024-04-25 10:18 UTC (permalink / raw)
  To: git; +Cc: Roland Hieber, Junio C Hamano

Signed-off-by: Roland Hieber <rhi@pengutronix.de>
---
PATCH v3:
 - change the wording a bit to make the text more fluent

PATCH v2: https://lore.kernel.org/git/20240424215019.268208-2-rhi@pengutronix.de
 - fix typo and superfluous "-my" (thanks to Junio C Hamano)

PATCH v1: https://lore.kernel.org/git/20240424210549.256256-2-rhi@pengutronix.de/
---
 contrib/completion/git-completion.bash | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 566f32d412ce..5c0ddeb3d4fb 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -31,6 +31,13 @@
 # Note that "git" is optional --- '!f() { : commit; ...}; f' would complete
 # just like the 'git commit' command.
 #
+# To add completion for git subcommands that are implemented in external
+# scripts, define a function of the form '_git_${subcommand}' while replacing
+# all dashes with underscores, and the main git completion will make use of it.
+# For example, to add completion for 'git do-stuff' (which could e.g. live
+# in /usr/bin/git-do-stuff), name the completion function '_git_do_stuff'.
+# See _git_show, _git_bisect etc. below for more examples.
+#
 # If you have a shell command that is not part of git (and is not called as a
 # git subcommand), but you would still like git-style completion for it, use
 # __git_complete. For example, to use the same completion as for 'git log' also
-- 
2.39.2


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

* Re: [PATCH v3 1/3] completion: add 'symbolic-ref'
  2024-04-25 10:18 [PATCH v3 1/3] completion: add 'symbolic-ref' Roland Hieber
  2024-04-25 10:18 ` [PATCH v3 2/3] completion: improve docs for using __git_complete Roland Hieber
  2024-04-25 10:18 ` [PATCH v3 3/3] completion: add docs on how to add subcommand completions Roland Hieber
@ 2024-04-25 10:45 ` Kristoffer Haugsbakk
  2024-04-25 14:36   ` Justin Tobler
  2024-04-25 16:50 ` Junio C Hamano
  2024-04-26 11:43 ` Patrick Steinhardt
  4 siblings, 1 reply; 10+ messages in thread
From: Kristoffer Haugsbakk @ 2024-04-25 10:45 UTC (permalink / raw)
  To: Roland Hieber; +Cc: Junio C Hamano, Denton Liu, git

On Thu, Apr 25, 2024, at 12:18, Roland Hieber wrote:
> Signed-off-by: Roland Hieber <rhi@pengutronix.de>
> ---
> PATCH v3:
>  - make use of __gitcomp_builtin instead of hard-coded options, and add
>    a test for it (thanks to Patrick Steinhardt)
>  - add empty line between test cases (thanks to Patrick Steinhardt)
>
> PATCH v2: https://lore.kernel.org/git/20240424215019.268208-1-rhi@pengutronix.de
>  - no changes
>
> PATCH v1:
> https://lore.kernel.org/git/20240424210549.256256-1-rhi@pengutronix.de/

You can use `git format-patch
--in-reply-to='20240424215019.268208-1-rhi@pengutronix.de'` in order to
link v3 to v2 (or rather: you can use that for a possible v4 (points to
v3)).

(I was going to link to SubmittingPatches here but I didn’t find a
mention of it there. Apparently I misremembered.)

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

* Re: [PATCH v3 1/3] completion: add 'symbolic-ref'
  2024-04-25 10:45 ` [PATCH v3 1/3] completion: add 'symbolic-ref' Kristoffer Haugsbakk
@ 2024-04-25 14:36   ` Justin Tobler
  2024-04-25 16:42     ` Junio C Hamano
  0 siblings, 1 reply; 10+ messages in thread
From: Justin Tobler @ 2024-04-25 14:36 UTC (permalink / raw)
  To: Kristoffer Haugsbakk; +Cc: Roland Hieber, Junio C Hamano, Denton Liu, git

On 24/04/25 12:45PM, Kristoffer Haugsbakk wrote:
> On Thu, Apr 25, 2024, at 12:18, Roland Hieber wrote:
> > Signed-off-by: Roland Hieber <rhi@pengutronix.de>
> > ---
> > PATCH v3:
> >  - make use of __gitcomp_builtin instead of hard-coded options, and add
> >    a test for it (thanks to Patrick Steinhardt)
> >  - add empty line between test cases (thanks to Patrick Steinhardt)
> >
> > PATCH v2: https://lore.kernel.org/git/20240424215019.268208-1-rhi@pengutronix.de
> >  - no changes
> >
> > PATCH v1:
> > https://lore.kernel.org/git/20240424210549.256256-1-rhi@pengutronix.de/
> 
> You can use `git format-patch
> --in-reply-to='20240424215019.268208-1-rhi@pengutronix.de'` in order to
> link v3 to v2 (or rather: you can use that for a possible v4 (points to
> v3)).
> 
> (I was going to link to SubmittingPatches here but I didn’t find a
> mention of it there. Apparently I misremembered.)

There is a section in the MyFirstContribution docs that mentions it
briefly:

https://git-scm.com/docs/MyFirstContribution#v2-git-send-email

-Justin

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

* Re: [PATCH v3 1/3] completion: add 'symbolic-ref'
  2024-04-25 14:36   ` Justin Tobler
@ 2024-04-25 16:42     ` Junio C Hamano
  2024-04-25 21:40       ` Justin Tobler
  0 siblings, 1 reply; 10+ messages in thread
From: Junio C Hamano @ 2024-04-25 16:42 UTC (permalink / raw)
  To: Justin Tobler; +Cc: Kristoffer Haugsbakk, Roland Hieber, Denton Liu, git

Justin Tobler <jltobler@gmail.com> writes:

>> (I was going to link to SubmittingPatches here but I didn’t find a
>> mention of it there. Apparently I misremembered.)
>
> There is a section in the MyFirstContribution docs that mentions it
> briefly:
>
> https://git-scm.com/docs/MyFirstContribution#v2-git-send-email

Thanks for noticing.  

We should improve the situation by probably moving[*] more from the
latter to SubmittingPatches so that people do not need to refer to
both just to find out the essentials.


[*] If it is small, just copy; if it is large, move and then replace
    the original with a reference into SubmittingPatches.


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

* Re: [PATCH v3 1/3] completion: add 'symbolic-ref'
  2024-04-25 10:18 [PATCH v3 1/3] completion: add 'symbolic-ref' Roland Hieber
                   ` (2 preceding siblings ...)
  2024-04-25 10:45 ` [PATCH v3 1/3] completion: add 'symbolic-ref' Kristoffer Haugsbakk
@ 2024-04-25 16:50 ` Junio C Hamano
  2024-04-26 11:43 ` Patrick Steinhardt
  4 siblings, 0 replies; 10+ messages in thread
From: Junio C Hamano @ 2024-04-25 16:50 UTC (permalink / raw)
  To: Roland Hieber; +Cc: git, Denton Liu

Roland Hieber <rhi@pengutronix.de> writes:

> Even 'symbolic-ref' is only completed when
> GIT_COMPLETION_SHOW_ALL_COMMANDS=1 is set, it currently defaults to
> completing file names, which is not very helpful. Add a simple
> completion function which completes options and refs.
>
> Signed-off-by: Roland Hieber <rhi@pengutronix.de>
> ---
> PATCH v3:
>  - make use of __gitcomp_builtin instead of hard-coded options, and add
>    a test for it (thanks to Patrick Steinhardt)

Nice.

>  - add empty line between test cases (thanks to Patrick Steinhardt)
>
> PATCH v2: https://lore.kernel.org/git/20240424215019.268208-1-rhi@pengutronix.de
>  - no changes
>
> PATCH v1: https://lore.kernel.org/git/20240424210549.256256-1-rhi@pengutronix.de/
> ---
>  contrib/completion/git-completion.bash | 11 +++++++++++
>  t/t9902-completion.sh                  | 23 +++++++++++++++++++++++
>  2 files changed, 34 insertions(+)
>
> diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
> index 75193ded4bde..4d63fb6eeaf7 100644
> --- a/contrib/completion/git-completion.bash
> +++ b/contrib/completion/git-completion.bash
> @@ -3581,6 +3581,17 @@ _git_svn ()
>  	fi
>  }
>  
> +_git_symbolic_ref () {
> +	case "$cur" in
> +	--*)
> +		__gitcomp_builtin symbolic-ref
> +		return
> +		;;
> +	esac
> +
> +	__git_complete_refs
> +}
> +
>  _git_tag ()
>  {
>  	local i c="$__git_cmd_idx" f=0
> diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
> index 569cf2310434..963f865f27ed 100755
> --- a/t/t9902-completion.sh
> +++ b/t/t9902-completion.sh
> @@ -2518,6 +2518,29 @@ test_expect_success 'complete tree filename with metacharacters' '
>  	EOF
>  '
>  
> +test_expect_success 'symbolic-ref completes builtin options' '
> +	test_completion "git symbolic-ref --d" <<-\EOF
> +	--delete Z
> +	EOF
> +'
> +
> +test_expect_success 'symbolic-ref completes short ref names' '
> +	test_completion "git symbolic-ref foo m" <<-\EOF
> +	main Z
> +	mybranch Z
> +	mytag Z
> +	EOF
> +'
> +
> +test_expect_success 'symbolic-ref completes full ref names' '
> +	test_completion "git symbolic-ref foo refs/" <<-\EOF
> +	refs/heads/main Z
> +	refs/heads/mybranch Z
> +	refs/tags/mytag Z
> +	refs/tags/A Z
> +	EOF
> +'
> +
>  test_expect_success PERL 'send-email' '
>  	test_completion "git send-email --cov" <<-\EOF &&
>  	--cover-from-description=Z

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

* Re: [PATCH v3 1/3] completion: add 'symbolic-ref'
  2024-04-25 16:42     ` Junio C Hamano
@ 2024-04-25 21:40       ` Justin Tobler
  2024-04-25 21:48         ` Junio C Hamano
  0 siblings, 1 reply; 10+ messages in thread
From: Justin Tobler @ 2024-04-25 21:40 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Kristoffer Haugsbakk, Roland Hieber, Denton Liu, git

On 24/04/25 09:42AM, Junio C Hamano wrote:
> Justin Tobler <jltobler@gmail.com> writes:
> 
> >> (I was going to link to SubmittingPatches here but I didn’t find a
> >> mention of it there. Apparently I misremembered.)
> >
> > There is a section in the MyFirstContribution docs that mentions it
> > briefly:
> >
> > https://git-scm.com/docs/MyFirstContribution#v2-git-send-email
> 
> Thanks for noticing.  
> 
> We should improve the situation by probably moving[*] more from the
> latter to SubmittingPatches so that people do not need to refer to
> both just to find out the essentials.
> 
> 
> [*] If it is small, just copy; if it is large, move and then replace
>     the original with a reference into SubmittingPatches.
> 

I think this is a good idea. Submitted a patch that attempts to improve
this.

https://lore.kernel.org/git/20240425213404.133660-1-jltobler@gmail.com/

-Justin

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

* Re: [PATCH v3 1/3] completion: add 'symbolic-ref'
  2024-04-25 21:40       ` Justin Tobler
@ 2024-04-25 21:48         ` Junio C Hamano
  0 siblings, 0 replies; 10+ messages in thread
From: Junio C Hamano @ 2024-04-25 21:48 UTC (permalink / raw)
  To: Justin Tobler; +Cc: Kristoffer Haugsbakk, Roland Hieber, Denton Liu, git

Justin Tobler <jltobler@gmail.com> writes:

>> We should improve the situation by probably moving[*] more from the
>> latter to SubmittingPatches so that people do not need to refer to
>> both just to find out the essentials.
>> 
>> 
>> [*] If it is small, just copy; if it is large, move and then replace
>>     the original with a reference into SubmittingPatches.
>> 
>
> I think this is a good idea. Submitted a patch that attempts to improve
> this.

Thanks.  Its details are a bit different from what I expected, but
this will work just fine in practice, I would think.

Will queue.

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

* Re: [PATCH v3 1/3] completion: add 'symbolic-ref'
  2024-04-25 10:18 [PATCH v3 1/3] completion: add 'symbolic-ref' Roland Hieber
                   ` (3 preceding siblings ...)
  2024-04-25 16:50 ` Junio C Hamano
@ 2024-04-26 11:43 ` Patrick Steinhardt
  4 siblings, 0 replies; 10+ messages in thread
From: Patrick Steinhardt @ 2024-04-26 11:43 UTC (permalink / raw)
  To: Roland Hieber; +Cc: git, Junio C Hamano, Denton Liu

[-- Attachment #1: Type: text/plain, Size: 414 bytes --]

On Thu, Apr 25, 2024 at 12:18:42PM +0200, Roland Hieber wrote:
> Even 'symbolic-ref' is only completed when
> GIT_COMPLETION_SHOW_ALL_COMMANDS=1 is set, it currently defaults to
> completing file names, which is not very helpful. Add a simple
> completion function which completes options and refs.
> 
> Signed-off-by: Roland Hieber <rhi@pengutronix.de>

Thanks, this version looks good to me.

Patrick

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

end of thread, other threads:[~2024-04-26 11:43 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-25 10:18 [PATCH v3 1/3] completion: add 'symbolic-ref' Roland Hieber
2024-04-25 10:18 ` [PATCH v3 2/3] completion: improve docs for using __git_complete Roland Hieber
2024-04-25 10:18 ` [PATCH v3 3/3] completion: add docs on how to add subcommand completions Roland Hieber
2024-04-25 10:45 ` [PATCH v3 1/3] completion: add 'symbolic-ref' Kristoffer Haugsbakk
2024-04-25 14:36   ` Justin Tobler
2024-04-25 16:42     ` Junio C Hamano
2024-04-25 21:40       ` Justin Tobler
2024-04-25 21:48         ` Junio C Hamano
2024-04-25 16:50 ` Junio C Hamano
2024-04-26 11:43 ` Patrick Steinhardt

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).