[libvirt] [PATCH 3/3] tools: Make symlinks to vsh bash-completion script

Michal Privoznik posted 3 patches 7 years, 3 months ago
[libvirt] [PATCH 3/3] tools: Make symlinks to vsh bash-completion script
Posted by Michal Privoznik 7 years, 3 months ago
The bash-completion project documents that only those scripts
from $BASH_COMPLETIONS_DIR that share name with the current
command for which <TAB> was hit are loaded [1]. This means, that
vsh script we have there is not loaded. We have to create
symlinks for virsh and virt-admin.

At the same time, we have to create new RPM package because
virt-admin and client packages are independent. That means we
cannot place the vsh script in either of them. What we can do is
to have a different package that contains the completion script
and then virt-admin and client packages contain only the symlink
and require the bash-completion package.

1: https://github.com/scop/bash-completion#faq

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
---
 libvirt.spec.in   | 24 +++++++++++++++++++++++-
 tools/Makefile.am |  7 ++++++-
 2 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/libvirt.spec.in b/libvirt.spec.in
index f62d7d324..1879e1f8b 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -1017,6 +1017,9 @@ Requires: gnutls-utils
 # Needed for probing the power management features of the host.
 Requires: pm-utils
 %endif
+%if %{with_bash_completion}
+Requires: %{name}-bash-completion = %{version}-%{release}
+%endif
 
 %description client
 The client binaries needed to access the virtualization
@@ -1041,10 +1044,22 @@ Summary: Set of tools to control libvirt daemon
 Group: Development/Libraries
 Requires: %{name}-libs = %{version}-%{release}
 Requires: readline
+%if %{with_bash_completion}
+Requires: %{name}-bash-completion = %{version}-%{release}
+%endif
 
 %description admin
 The client side utilities to control the libvirt daemon.
 
+%if %{with_bash_completion}
+%package bash-completion
+Summary: Bash completion script
+Group: Development/Libraries
+
+%description bash-completion
+Bash completion script stub.
+%endif
+
 %if %{with_wireshark}
 %package wireshark
 Summary: Wireshark dissector plugin for libvirt RPC transactions
@@ -2059,7 +2074,7 @@ exit 0
 %{_datadir}/systemtap/tapset/libvirt_functions.stp
 
 %if %{with_bash_completion}
-%{_datadir}/bash-completion/completions/vsh
+%{_datadir}/bash-completion/completions/virsh
 %endif
 
 
@@ -2111,7 +2126,14 @@ exit 0
 %files admin
 %{_mandir}/man1/virt-admin.1*
 %{_bindir}/virt-admin
+%if %{with_bash_completion}
+%{_datadir}/bash-completion/completions/virt-admin
+%endif
 
+%if %{with_bash_completion}
+%files bash-completion
+%{_datadir}/bash-completion/completions/vsh
+%endif
 
 %if %{with_wireshark}
 %files wireshark
diff --git a/tools/Makefile.am b/tools/Makefile.am
index e9597cdb4..e173f5634 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -424,9 +424,14 @@ install-bash-completion:
 	$(MKDIR_P) "$(DESTDIR)$(BASH_COMPLETIONS_DIR)"
 	$(INSTALL_SCRIPT) $(srcdir)/bash-completion/vsh \
 		"$(DESTDIR)$(BASH_COMPLETIONS_DIR)/vsh"
+	( cd $(DESTDIR)$(BASH_COMPLETIONS_DIR) && \
+		$(LN_S) vsh virsh && \
+		$(LN_S) vsh virt-admin )
 
 uninstall-bash-completion:
-	rm -f $(DESTDIR)$(BASH_COMPLETIONS_DIR)/vsh
+	rm -f $(DESTDIR)$(BASH_COMPLETIONS_DIR)/vsh \
+		$(DESTDIR)$(BASH_COMPLETIONS_DIR)/virsh \
+		$(DESTDIR)$(BASH_COMPLETIONS_DIR)/virt-admin
 	rmdir $(DESTDIR)$(BASH_COMPLETIONS_DIR) ||:
 else ! WITH_BASH_COMPLETION
 install-bash-completion:
-- 
2.13.6

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 3/3] tools: Make symlinks to vsh bash-completion script
Posted by Martin Kletzander 7 years, 3 months ago
On Thu, Jan 25, 2018 at 03:22:20PM +0100, Michal Privoznik wrote:
>The bash-completion project documents that only those scripts
>from $BASH_COMPLETIONS_DIR that share name with the current
>command for which <TAB> was hit are loaded [1]. This means, that
>vsh script we have there is not loaded. We have to create
>symlinks for virsh and virt-admin.
>

Good to know, I recall that the completions had their own way how to say for
which commands they can complete, but probably my memory doesn't serve me well.
Also it's not ECC, so...

>At the same time, we have to create new RPM package because
>virt-admin and client packages are independent. That means we
>cannot place the vsh script in either of them. What we can do is
>to have a different package that contains the completion script
>and then virt-admin and client packages contain only the symlink
>and require the bash-completion package.
>
>1: https://github.com/scop/bash-completion#faq
>
>Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
>---
> libvirt.spec.in   | 24 +++++++++++++++++++++++-
> tools/Makefile.am |  7 ++++++-
> 2 files changed, 29 insertions(+), 2 deletions(-)
>
>diff --git a/libvirt.spec.in b/libvirt.spec.in
>index f62d7d324..1879e1f8b 100644
>--- a/libvirt.spec.in
>+++ b/libvirt.spec.in
>@@ -1017,6 +1017,9 @@ Requires: gnutls-utils
> # Needed for probing the power management features of the host.
> Requires: pm-utils
> %endif
>+%if %{with_bash_completion}
>+Requires: %{name}-bash-completion = %{version}-%{release}
>+%endif
>
> %description client
> The client binaries needed to access the virtualization
>@@ -1041,10 +1044,22 @@ Summary: Set of tools to control libvirt daemon
> Group: Development/Libraries
> Requires: %{name}-libs = %{version}-%{release}
> Requires: readline
>+%if %{with_bash_completion}
>+Requires: %{name}-bash-completion = %{version}-%{release}
>+%endif
>
> %description admin
> The client side utilities to control the libvirt daemon.
>
>+%if %{with_bash_completion}
>+%package bash-completion
>+Summary: Bash completion script

I'd say "Bash completion script for libvirt clients"

>+Group: Development/Libraries
>+
>+%description bash-completion
>+Bash completion script stub.

Similarly here, add info that it's for libvirt cli or something.

Otherwise looks good, ACK with those two things fixed.--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list