From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: Felipe Contreras <felipe.contreras@gmail.com>
Cc: git@vger.kernel.org, Luke Shumaker <lukeshu@lukeshu.com>,
Junio C Hamano <gitster@pobox.com>,
Philippe Blain <levraiphilippeblain@gmail.com>
Subject: Re: [PATCH v3 1/1] completion: graduate out of contrib
Date: Thu, 15 Jul 2021 01:03:51 +0200 [thread overview]
Message-ID: <87bl74zdtb.fsf@evledraar.gmail.com> (raw)
In-Reply-To: <20210714202344.614468-2-felipe.contreras@gmail.com>
On Wed, Jul 14 2021, Felipe Contreras wrote:
> These have been stable and widely used for quite a long time, they even
> have tests outside of the contrib area, and most distributions ship
> them, so they can be considered part of the core already.
>
> We should be consistent and either we move the tests to contrib, or we
> move the completions out of contrib.
>
> Let's move them out of contrib and provide an installation target
> install-extra.
>
> By default bash-completion installs the completions to
> $(pkgdatadir)/completions, which is
> $(prefix)/share/bash-completion/completions. And since most distributions do
> not change this, it is obviously the right default that distributions
> can override with bashcompdir.
>
> By default zsh looks for completions in
> $(prefix)/share/zsh/site-functions.
I'm very much in favor of this, i.e. both to promote git-completion.*,
and also to generally re-organize contrib/* a bit (not being done here).
> Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
> ---
> Makefile | 10 ++++++++++
> {contrib => extra}/completion/git-completion.bash | 0
> {contrib => extra}/completion/git-completion.zsh | 0
> {contrib => extra}/completion/git-prompt.sh | 0
> t/t9902-completion.sh | 8 ++++----
> t/t9903-bash-prompt.sh | 2 +-
> 6 files changed, 15 insertions(+), 5 deletions(-)
> rename {contrib => extra}/completion/git-completion.bash (100%)
> rename {contrib => extra}/completion/git-completion.zsh (100%)
> rename {contrib => extra}/completion/git-prompt.sh (100%)
>
> diff --git a/Makefile b/Makefile
> index 502e0c9a81..0a13e5f077 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -532,6 +532,7 @@ sharedir = $(prefix)/share
> gitwebdir = $(sharedir)/gitweb
> perllibdir = $(sharedir)/perl5
> localedir = $(sharedir)/locale
> +bashcompdir = $(sharedir)/bash-completion/completions
> template_dir = share/git-core/templates
> htmldir = $(prefix)/share/doc/git-doc
> ETC_GITCONFIG = $(sysconfdir)/gitconfig
> @@ -2015,6 +2016,7 @@ bindir_relative_SQ = $(subst ','\'',$(bindir_relative))
> mandir_SQ = $(subst ','\'',$(mandir))
> mandir_relative_SQ = $(subst ','\'',$(mandir_relative))
> infodir_relative_SQ = $(subst ','\'',$(infodir_relative))
> +sharedir_SQ = $(subst ','\'',$(sharedir))
> perllibdir_SQ = $(subst ','\'',$(perllibdir))
> localedir_SQ = $(subst ','\'',$(localedir))
> localedir_relative_SQ = $(subst ','\'',$(localedir_relative))
> @@ -2025,6 +2027,7 @@ htmldir_relative_SQ = $(subst ','\'',$(htmldir_relative))
> prefix_SQ = $(subst ','\'',$(prefix))
> perllibdir_relative_SQ = $(subst ','\'',$(perllibdir_relative))
> gitwebdir_SQ = $(subst ','\'',$(gitwebdir))
> +bashcompdir_SQ = $(subst ','\'',$(bashcompdir))
>
> SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
> TEST_SHELL_PATH_SQ = $(subst ','\'',$(TEST_SHELL_PATH))
> @@ -3112,6 +3115,13 @@ quick-install-man:
> quick-install-html:
> $(MAKE) -C Documentation quick-install-html
>
> +install-extra: install-completion
> +
> +install-completion:
> + $(INSTALL) -D -m 644 extra/completion/git-completion.bash '$(DESTDIR_SQ)$(bashcompdir_SQ)'/git
> + $(INSTALL) -D -m 644 extra/completion/git-prompt.sh '$(DESTDIR_SQ)$(sharedir_SQ)'/git-core/git-prompt.sh
> + $(INSTALL) -D -m 644 extra/completion/git-completion.zsh '$(DESTDIR_SQ)$(sharedir_SQ)'/zsh/site-functions/_git
> +
These are missing a .PHONY target (like the other install-* targets).
The bash-completion target corresponds to what I've got in Debian's git
package, but not the prompt:
$ dpkg -L git|grep -e completion -e prompt
/etc/bash_completion.d
/etc/bash_completion.d/git-prompt
/usr/lib/git-core/git-sh-prompt
/usr/share/bash-completion
/usr/share/bash-completion/completions
/usr/share/bash-completion/completions/git
/usr/share/bash-completion/completions/gitk
I've got no idea what we should pick by default though, maybe what you
have is more standard.
Also why /git and /_git for bash and zsh (looks good) but /git-prompt
instead of /git-prompt.sh?
>
> ### Maintainer's dist rules
> diff --git a/contrib/completion/git-completion.bash b/extra/completion/git-completion.bash
> similarity index 100%
> rename from contrib/completion/git-completion.bash
> rename to extra/completion/git-completion.bash
> diff --git a/contrib/completion/git-completion.zsh b/extra/completion/git-completion.zsh
> similarity index 100%
> rename from contrib/completion/git-completion.zsh
> rename to extra/completion/git-completion.zsh
> diff --git a/contrib/completion/git-prompt.sh b/extra/completion/git-prompt.sh
> similarity index 100%
> rename from contrib/completion/git-prompt.sh
> rename to extra/completion/git-prompt.sh
> diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
> index cb057ef161..32601b755d 100755
> --- a/t/t9902-completion.sh
> +++ b/t/t9902-completion.sh
> @@ -36,7 +36,7 @@ complete ()
> GIT_TESTING_ALL_COMMAND_LIST='add checkout check-attr rebase ls-files'
> GIT_TESTING_PORCELAIN_COMMAND_LIST='add checkout rebase'
>
> -. "$GIT_BUILD_DIR/contrib/completion/git-completion.bash"
> +. "$GIT_BUILD_DIR/extra/completion/git-completion.bash"
>
> # We don't need this function to actually join words or do anything special.
> # Also, it's cleaner to avoid touching bash's internal completion variables.
> @@ -2383,14 +2383,14 @@ test_expect_success 'git clone --config= - value' '
> test_expect_success 'sourcing the completion script clears cached commands' '
> __git_compute_all_commands &&
> verbose test -n "$__git_all_commands" &&
> - . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
> + . "$GIT_BUILD_DIR/extra/completion/git-completion.bash" &&
> verbose test -z "$__git_all_commands"
> '
>
> test_expect_success 'sourcing the completion script clears cached merge strategies' '
> __git_compute_merge_strategies &&
> verbose test -n "$__git_merge_strategies" &&
> - . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
> + . "$GIT_BUILD_DIR/extra/completion/git-completion.bash" &&
> verbose test -z "$__git_merge_strategies"
> '
>
> @@ -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" :(
next prev parent reply other threads:[~2021-07-14 23:16 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-10 23:46 [PATCH v2 0/2] extra: new concept of extra components Felipe Contreras
2021-07-10 23:46 ` [PATCH v2 1/2] completion: graduate out of contrib Felipe Contreras
2021-07-10 23:46 ` [PATCH v2 2/2] git-new-workdir: " Felipe Contreras
2021-07-12 17:43 ` [PATCH v2 0/2] extra: new concept of extra components Philippe Blain
2021-07-12 17:55 ` Felipe Contreras
2021-07-13 0:17 ` Junio C Hamano
2021-07-13 1:19 ` Felipe Contreras
2021-07-14 20:23 ` [PATCH v3 0/1] " Felipe Contreras
2021-07-14 20:23 ` [PATCH v3 1/1] completion: graduate out of contrib Felipe Contreras
2021-07-14 23:03 ` Ævar Arnfjörð Bjarmason [this message]
2021-07-14 23:17 ` Ævar Arnfjörð Bjarmason
2021-07-15 19:12 ` Felipe Contreras
2021-07-16 6:36 ` Ævar Arnfjörð Bjarmason
2021-07-16 20:14 ` Felipe Contreras
2021-07-15 18:59 ` Felipe Contreras
2021-07-16 20:14 ` [PATCH v4 0/1] extra: new concept of extra components Felipe Contreras
2021-07-16 20:14 ` [PATCH v4 1/1] completion: graduate out of contrib Felipe Contreras
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=87bl74zdtb.fsf@evledraar.gmail.com \
--to=avarab@gmail.com \
--cc=felipe.contreras@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=levraiphilippeblain@gmail.com \
--cc=lukeshu@lukeshu.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).