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