[libvirt] PATCH: Bash auto-completion for virsh
Daniel Veillard
veillard at redhat.com
Wed Jul 16 14:59:28 UTC 2008
On Mon, Jul 14, 2008 at 11:57:07AM +0100, Daniel P. Berrange wrote:
> Everyone[1] seems to be doing funky bash auto-completion for commands these
> days, so I thought I'd make a stab at doing something for virsh.
heh, I'm a bash user, but never use completion except for filename in the
path ... But fine by me :-)
> First of all I needed the command line help in an easier format to deal
> with, so I've added
>
> virsh _complete-command commands|arguments|options
[...]
> diff -r f3413463b3ff src/libvirt.c
> --- a/src/libvirt.c Sun Jul 13 13:14:50 2008 +0100
> +++ b/src/libvirt.c Mon Jul 14 11:54:10 2008 +0100
> @@ -37,6 +37,7 @@
> #include "uuid.h"
> #include "util.h"
> #include "test.h"
> +#include "memory.h"
> #include "xen_unified.h"
> #include "remote_internal.h"
> #include "qemu_driver.h"
> @@ -701,7 +702,8 @@
> int probes = 0;
> for (i = 0; i < virDriverTabCount; i++) {
> if ((virDriverTab[i]->probe != NULL) &&
> - ((latest = virDriverTab[i]->probe()) != NULL)) {
> + ((latest = virDriverTab[i]->probe()) != NULL) &&
> + STRNEQ(latest, "test:///default")) {
> probes++;
>
> DEBUG("Probed %s", latest);
hum, interesting, i see how that could go in the way, okay :-)
[...]
> @@ -355,8 +758,9 @@
>
> vshPrint(ctl, "%s", _("Commands:\n\n"));
> for (def = commands; def->name; def++)
> - vshPrint(ctl, " %-15s %s\n", def->name,
> - N_(vshCmddefGetInfo(def, "help")));
> + if (def->name[0] != '_')
> + vshPrint(ctl, " %-15s %s\n", def->name,
> + N_(vshCmddefGetInfo(def, "help")));
> return TRUE;
> }
> return vshCmddefHelp(ctl, cmdname, FALSE);
Should we really hide it ?
> @@ -426,7 +830,7 @@
> };
>
> static vshCmdOptDef opts_connect[] = {
> - {"name", VSH_OT_DATA, 0, gettext_noop("hypervisor connection URI")},
> + {"uri", VSH_OT_DATA, 0, gettext_noop("hypervisor connection URI")},
> {"readonly", VSH_OT_BOOL, 0, gettext_noop("read-only connection")},
> {NULL, 0, 0, NULL}
> };
> @@ -446,7 +850,7 @@
> }
>
> free(ctl->name);
> - ctl->name = vshStrdup(ctl, vshCommandOptString(cmd, "name", NULL));
> + ctl->name = vshStrdup(ctl, vshCommandOptString(cmd, "uri", NULL));
>
> if (!ro) {
> ctl->conn = virConnectOpen(ctl->name);
> @@ -1004,7 +1408,7 @@
> };
>
> static vshCmdOptDef opts_start[] = {
> - {"name", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("name of the inactive domain")},
> + {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("name of the inactive domain")},
> {NULL, 0, 0, NULL}
> };
>
> @@ -1017,7 +1421,7 @@
> if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
> return FALSE;
>
> - if (!(dom = vshCommandOptDomainBy(ctl, cmd, "name", NULL, VSH_BYNAME)))
> + if (!(dom = vshCommandOptDomainBy(ctl, cmd, "domain", NULL, VSH_BYNAME)))
> return FALSE;
>
> if (virDomainGetID(dom) != (unsigned int)-1) {
> @@ -2650,7 +3054,7 @@
> };
>
> static vshCmdOptDef opts_network_start[] = {
> - {"name", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("name of the inactive network")},
> + {"network", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("name of the inactive network")},
> {NULL, 0, 0, NULL}
> };
>
> @@ -2663,7 +3067,7 @@
> if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
> return FALSE;
>
> - if (!(network = vshCommandOptNetworkBy(ctl, cmd, "name", NULL, VSH_BYNAME)))
> + if (!(network = vshCommandOptNetworkBy(ctl, cmd, "network", NULL, VSH_BYNAME)))
> return FALSE;
>
> if (virNetworkCreate(network) == 0) {
> @@ -3554,7 +3958,7 @@
> };
>
> static vshCmdOptDef opts_pool_start[] = {
> - {"name", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("name of the inactive pool")},
> + {"pool", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("name of the inactive pool")},
> {NULL, 0, 0, NULL}
> };
>
> @@ -3567,7 +3971,7 @@
> if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
> return FALSE;
>
> - if (!(pool = vshCommandOptPoolBy(ctl, cmd, "name", NULL, VSH_BYNAME)))
> + if (!(pool = vshCommandOptPoolBy(ctl, cmd, "pool", NULL, VSH_BYNAME)))
> return FALSE;
>
> if (virStoragePoolCreate(pool, 0) == 0) {
Hum, this all looks like a bunch of generic bugs no ?
Just wondering shouldn't the completion be made to work from within
the virsh shell too ?
looks fine to me
Daniel
--
Red Hat Virtualization group http://redhat.com/virtualization/
Daniel Veillard | virtualization library http://libvirt.org/
veillard at redhat.com | libxml GNOME XML XSLT toolkit http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/
More information about the libvir-list
mailing list