git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v3 1/1] completion: graduate out of contrib

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Jul 16, 2021, 20:14 UTC
Message-ID
<60f1e88949659_3302085e@natae.notmuch>
In-Reply-To
<87zgumyd7w.fsf@evledraar.gmail.com>
Ævar Arnfjörð Bjarmason wrote:
Show 50 quoted lines
> On Thu, Jul 15 2021, Felipe Contreras wrote:
> > Ævar Arnfjörð Bjarmason wrote:
> >> On Thu, Jul 15 2021, Ævar Arnfjörð Bjarmason wrote:
> >> > On Wed, Jul 14 2021, Felipe Contreras wrote:
> >> >> [...]
> >> >> @@ -2399,7 +2399,7 @@ test_expect_success 'sourcing the completion script clears cached --options' '
> >> >>  	verbose test -n "$__gitcomp_builtin_checkout" &&
> >> >>  	__gitcomp_builtin notes_edit &&
> >> >>  	verbose test -n "$__gitcomp_builtin_notes_edit" &&
> >> >> -	. "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
> >> >> +	. "$GIT_BUILD_DIR/extra/completion/git-completion.bash" &&
> >> >>  	verbose test -z "$__gitcomp_builtin_checkout" &&
> >> >>  	verbose test -z "$__gitcomp_builtin_notes_edit"
> >> >>  '
> >> >>
> >> >> diff --git a/t/t9903-bash-prompt.sh b/t/t9903-bash-prompt.sh
> >> >> index bbd513bab0..784e523fd4 100755
> >> >> --- a/t/t9903-bash-prompt.sh
> >> >> +++ b/t/t9903-bash-prompt.sh
> >> >> @@ -10,7 +10,7 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
> >> >>  
> >> >>  . ./lib-bash.sh
> >> >>  
> >> >> -. "$GIT_BUILD_DIR/contrib/completion/git-prompt.sh"
> >> >> +. "$GIT_BUILD_DIR/extra/completion/git-prompt.sh"
> >> >>  
> >> >>  actual="$TRASH_DIRECTORY/actual"
> >> >>  c_red='\\[\\e[31m\\]'
> >> >
> >> > It's more of a "for bonus points", but a nic way to round-trip this
> >> > would be to make this work with GIT_TEST_INSTALLED.
> >> >
> >> > I.e. source these relative to GIT_EXEC_PATH, not $GIT_BUILD_DIR, I think
> >> > that just sourcing them as e.g.:
> >> >
> >> >     . git-completion.bash
> >> >
> >> > But the GIT_TEST_INSTALLED case is tricker, maybe we'd need to add a
> >> > "git --share-path" :(
> >> 
> >> I forgot to include this not-working patch, i.e. I've got no idea what
> >> the "something" should be other than the harder thing of compiling
> >> "sharedir" into git and making "git --share-path" work.
> >
> > I don't think there's a "something" that would make sense.
> >
> > It would be something like '/opt/git/bin/completion'?
> 
> I think more importantly if they're going to be "first-class" components
> that we have some native way of getting them to the user.

Yes, I already said --share-path would make sense [1] in your other reply.

Show 18 quoted lines
> I.e. once you install git being able to load them in your shell as:
> 
>     . git-path
>     . git-completion
> 
> Or whatever, which means either putting them in $PATH (i.e. we'd drop
> them in bin/ along with the non-dashed-built-ins like git-upload-pack
> etc.), or something like:
> 
>     . "$(git --completion-path)"/bash
>     . "$(git --completion-path)"/zsh
> 
> Or maybe:
> 
>     . "$(git --extras-path)"/completion/bash.sh
>     . "$(git --extras-path)"/prompt.sh
> 
> ?
But that's not how completions should work.

There's a standard location for bash completions in order to be picked by bash-completion:

  /usr/share/bash-completion/completions
This will be the case regardless of what --extras-path is.

The user *should not* be sourcing anything from there directly, bash-completion does that automatically.

This location depends by distribution, and the standard way to figure it out is:

  pkg-config --variable=completionsdir bash-completion

If you don't have bash-completion insalled, *then* you would need to source the completion file directly, but you cannot use pkg-config to figure out that location, so you would need to use the default (/usr/share/bash-completion/completions).

We could install the completion twice (or provide a symlink):
  /usr/share/bash-completion/completions/git
  /usr/share/git-core/completion/bash.sh
So if the user doesn't have bash-completion installed, can do:
  source "$(git --extras-path)"/completion/bash.sh
Instead of the standard:
  source /usr/share/bash-completion/completions/git

But *right now* the standard location is standard, distributions are using it, and users are using it.

Moreover, it seems a bit wasteful to have --exec-path, --html-path, --man-path, --info-path, --extra-path. Why not have --path=extra instead?

Once again, I think this is a good idea, but it should be done separately, and you yourself said "for bonus points".

Not to mention my strong feeling that *even* if I implement this nice feature, Junio will still ignore this series (as he ignores everything I send), so I will be simply wasting my time implementing something that will never be merged (just like he stood on the sidelines watching us implement 6 versions of the man pager colorize patch just to say "no thanks" [2]).

I'd be more than happy to add any other suggestions you might have, but let's be honest: this is a patch we all will have be carrying ourselves (I have dozens of those), so I'd rather not add more complexity for a perfect solution that won't be applied.

I'd rather aim for something that is good enough.
Cheers.

[1] https://lore.kernel.org/git/60f0859399369_519c2083c@natae.notmuch/ [2] https://lore.kernel.org/git/xmqq4ke8pig9.fsf@gitster.g/

-- 
Felipe Contreras
Previous: Ævar Arnfjörð BjarmasonNext: Felipe Contreras
Message 14 of 17 in “extra: new concept of extra components”
  1. 0/2 extra: new concept of extra componentsFelipe Contreras, Jul 10, 2021
  2. 1/2 completion: graduate out of contribFelipe Contreras, Jul 10, 2021
  3. 2/2 git-new-workdir: graduate out of contribFelipe Contreras, Jul 10, 2021
  4. Philippe BlainJul 12, 2021
  5. Felipe ContrerasJul 12, 2021
  6. Junio C HamanoJul 13, 2021
  7. Felipe ContrerasJul 13, 2021
  8. 0/1 extra: new concept of extra componentsFelipe Contreras, Jul 14, 2021
  9. 1/1 completion: graduate out of contribFelipe Contreras, Jul 14, 2021
  10. Ævar Arnfjörð BjarmasonJul 14, 2021
  11. Ævar Arnfjörð BjarmasonJul 14, 2021
  12. Felipe ContrerasJul 15, 2021
  13. Ævar Arnfjörð BjarmasonJul 16, 2021
  14. Felipe ContrerasJul 16, 2021
  15. Felipe ContrerasJul 15, 2021
  16. 0/1 extra: new concept of extra componentsFelipe Contreras, Jul 16, 2021
  17. 1/1 completion: graduate out of contribFelipe Contreras, Jul 16, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.