From 870c2a078017cd05a1a94a268c0ca629e44b8412 Mon Sep 17 00:00:00 2001 From: Felipe Contreras Date: Fri, 2 May 2014 19:28:16 -0500 Subject: [PATCH] completion: graduate out of contrib 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 install them by default. 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. However, bash-completion recommends to use pkg-config to find the right location, so we could use that, but it's much easier to let distributions do it: bashcomdir=$pkg-config --variable=completionsdir bash-completion) By default zsh looks for completions in $(prefix)/share/zsh/site-functions. The distributions use these locations to install Git completions: ArchLinux: /usr/share/bash-completion/completions/ Debian: /usr/share/bash-completion/completions/ Fedora: /etc/bash_completion.d/ Ubuntu: /usr/share/bash-completion/completions/ Mint: /usr/share/bash-completion/completions/ OpenSuse: /etc/bash_completion.d/ However, in both Fedora and OpenSUSE their bash-completion intallations use /usr/share/bash-completion/completions/ (they don't change the default). So it seems to a be a bug from the packager, since they recommend the bash-completion location[1] If some weird distribution has a problem with the location, they can override 'bashcompdir' anyway. [1] http://article.gmane.org/gmane.linux.redhat.fedora.devel/177405 Signed-off-by: Felipe Contreras --- Makefile | 11 +++++++++++ {contrib/completion => shared}/git-completion.bash | 0 {contrib/completion => shared}/git-completion.zsh | 0 {contrib/completion => shared}/git-prompt.sh | 0 t/t9902-completion.sh | 2 +- t/t9903-bash-prompt.sh | 2 +- 6 files changed, 13 insertions(+), 2 deletions(-) rename {contrib/completion => shared}/git-completion.bash (100%) rename {contrib/completion => shared}/git-completion.zsh (100%) rename {contrib/completion => shared}/git-prompt.sh (100%) diff --git a/Makefile b/Makefile index 2742a6977c..be65b1f95a 100644 --- a/Makefile +++ b/Makefile @@ -424,6 +424,7 @@ gitwebdir = $(sharedir)/gitweb localedir = $(sharedir)/locale template_dir = share/git-core/templates htmldir = $(prefix)/share/doc/git-doc +bashcompdir = $(sharedir)/bash-completion/completions ETC_GITCONFIG = $(sysconfdir)/gitconfig ETC_GITATTRIBUTES = $(sysconfdir)/gitattributes lib = lib @@ -1570,6 +1571,8 @@ template_dir_SQ = $(subst ','\'',$(template_dir)) htmldir_relative_SQ = $(subst ','\'',$(htmldir_relative)) prefix_SQ = $(subst ','\'',$(prefix)) gitwebdir_SQ = $(subst ','\'',$(gitwebdir)) +sharedir_SQ = $(subst ','\'',$(sharedir)) +bashcompdir_SQ = $(subst ','\'',$(bashcompdir)) SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH)) PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH)) @@ -2312,6 +2315,14 @@ install: all $(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(mergetools_instdir_SQ)' $(INSTALL) -m 644 mergetools/* '$(DESTDIR_SQ)$(mergetools_instdir_SQ)' + $(INSTALL) -D -m 644 shared/git-completion.bash '$(DESTDIR_SQ)$(bashcompdir_SQ)'/git + $(RM) '$(DESTDIR_SQ)$(bashcompdir_SQ)'/gitk && \ + test -z "$(NO_INSTALL_HARDLINKS)" && \ + ln '$(DESTDIR_SQ)$(bashcompdir_SQ)'/git '$(DESTDIR_SQ)$(bashcompdir_SQ)'/gitk || \ + ln -s git '$(DESTDIR_SQ)$(bashcompdir_SQ)'/gitk || \ + cp '$(DESTDIR_SQ)$(bashcompdir_SQ)'/git '$(DESTDIR_SQ)$(bashcompdir_SQ)'/gitk + $(INSTALL) -D -m 644 shared/git-prompt.sh '$(DESTDIR_SQ)$(sharedir_SQ)'/git-core/git-prompt.sh + $(INSTALL) -D -m 644 shared/git-completion.zsh '$(DESTDIR_SQ)$(sharedir_SQ)'/zsh/site-functions/_git ifndef NO_GETTEXT $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(localedir_SQ)' (cd po/build/locale && $(TAR) cf - .) | \ diff --git a/contrib/completion/git-completion.bash b/shared/git-completion.bash similarity index 100% rename from contrib/completion/git-completion.bash rename to shared/git-completion.bash diff --git a/contrib/completion/git-completion.zsh b/shared/git-completion.zsh similarity index 100% rename from contrib/completion/git-completion.zsh rename to shared/git-completion.zsh diff --git a/contrib/completion/git-prompt.sh b/shared/git-prompt.sh similarity index 100% rename from contrib/completion/git-prompt.sh rename to shared/git-prompt.sh diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh index 2ba62fbc17..283126de25 100755 --- a/t/t9902-completion.sh +++ b/t/t9902-completion.sh @@ -32,7 +32,7 @@ complete () GIT_TESTING_COMMAND_COMPLETION='add checkout check-attr filter-branch ls-files' -. "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" +. "$GIT_BUILD_DIR/shared/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. diff --git a/t/t9903-bash-prompt.sh b/t/t9903-bash-prompt.sh index ffbfa0efb8..4edd10e202 100755 --- a/t/t9903-bash-prompt.sh +++ b/t/t9903-bash-prompt.sh @@ -7,7 +7,7 @@ test_description='test git-specific bash prompt functions' . ./lib-bash.sh -. "$GIT_BUILD_DIR/contrib/completion/git-prompt.sh" +. "$GIT_BUILD_DIR/shared/git-prompt.sh" actual="$TRASH_DIRECTORY/actual" c_red='\\[\\e[31m\\]' -- 2.32.0.93.g670b81a890