On Wed, Aug 10, 2011 at 05:02:36PM -0600, Eric Blake wrote: > Sometimes, full XML is too much; since most snapshot commands > operate on a snapshot name, there should be an easy way to get > at the current snapshot's name. > > * tools/virsh.c (cmdSnapshotCurrent): Add an option. > * tools/virsh.pod (snapshot-current): Document it. > --- > > v2: use xpath instead of strstr; replaces: > https://www.redhat.com/archives/libvir-list/2011-August/msg00329.html > > tools/virsh.c | 29 ++++++++++++++++++++++++++--- > tools/virsh.pod | 4 +++- > 2 files changed, 29 insertions(+), 4 deletions(-) > > diff --git a/tools/virsh.c b/tools/virsh.c > index bffec1d..fd64020 100644 > --- a/tools/virsh.c > +++ b/tools/virsh.c > @@ -12034,6 +12034,7 @@ static const vshCmdInfo info_snapshot_current[] = { > > static const vshCmdOptDef opts_snapshot_current[] = { > {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, > + {"name", VSH_OT_BOOL, 0, N_("list the name, rather than the full xml")}, > {NULL, 0, 0, NULL} > }; > > @@ -12044,6 +12045,7 @@ cmdSnapshotCurrent(vshControl *ctl, const vshCmd *cmd) > bool ret = false; > int current; > virDomainSnapshotPtr snapshot = NULL; > + char *xml = NULL; > > if (!vshConnectionUsability(ctl, ctl->conn)) > goto cleanup; > @@ -12056,7 +12058,7 @@ cmdSnapshotCurrent(vshControl *ctl, const vshCmd *cmd) > if (current < 0) > goto cleanup; > else if (current) { > - char *xml; > + char *name = NULL; > > if (!(snapshot = virDomainSnapshotCurrent(dom, 0))) > goto cleanup; > @@ -12065,13 +12067,34 @@ cmdSnapshotCurrent(vshControl *ctl, const vshCmd *cmd) > if (!xml) > goto cleanup; > > - vshPrint(ctl, "%s", xml); > - VIR_FREE(xml); > + if (vshCommandOptBool(cmd, "name")) { > + xmlDocPtr xmldoc = NULL; > + xmlXPathContextPtr ctxt = NULL; > + > + xmldoc = xmlReadDoc((const xmlChar *) xml, "domainsnapshot.xml", > + NULL, XML_PARSE_NOENT | XML_PARSE_NONET | > + XML_PARSE_NOWARNING); > + if (!xmldoc) > + goto cleanup; > + ctxt = xmlXPathNewContext(xmldoc); > + if (!ctxt) { > + xmlFreeDoc(xmldoc); > + } > + > + name = virXPathString("string(/domainsnapshot/name)", ctxt); > + xmlXPathFreeContext(ctxt); > + xmlFreeDoc(xmldoc); > + if (!name) > + goto cleanup; > + } > + > + vshPrint(ctl, "%s", name ? name : xml); > } > > ret = true; > > cleanup: > + VIR_FREE(xml); > if (snapshot) > virDomainSnapshotFree(snapshot); > if (dom) > diff --git a/tools/virsh.pod b/tools/virsh.pod > index ec778bf..53376d6 100644 > --- a/tools/virsh.pod > +++ b/tools/virsh.pod > @@ -1569,9 +1569,11 @@ Create a snapshot for domain I<domain> with the given <name> and > value. If I<--print-xml> is specified, then XML appropriate for > I<snapshot-create> is output, rather than actually creating a snapshot. > > -=item B<snapshot-current> I<domain> > +=item B<snapshot-current> I<domain> [I<--name>] > > Output the snapshot XML for the domain's current snapshot (if any). > +If I<--name> is specified, just list the snapshot name instead of the > +full xml. > > =item B<snapshot-list> I<domain> ACK, this is really more convenient in most cases, Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list