From: Eric Blake Date: Fri, 8 Jun 2012 22:00:43 +0000 (-0600) Subject: list: use the new snapshot API in virsh when possible X-Git-Tag: v0.9.13-rc1~30 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a7f7bf02fd86ed7e4fff2e898ea69316bb30e59c;p=thirdparty%2Flibvirt.git list: use the new snapshot API in virsh when possible Using the new API is so much shorter than the rest of the remainder of the function. * tools/virsh.c (vshSnapshotList): Use the new API. --- diff --git a/tools/virsh.c b/tools/virsh.c index 045decd7e8..a117424b1a 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -16786,13 +16786,42 @@ vshSnapshotListCollect(vshControl *ctl, virDomainPtr dom, int count = -1; bool descendants = false; bool roots = false; + virDomainSnapshotPtr *snaps; vshSnapshotListPtr snaplist = vshMalloc(ctl, sizeof(*snaplist)); vshSnapshotListPtr ret = NULL; const char *fromname = NULL; int start_index = -1; int deleted = 0; - /* 0.9.13 will be adding a new listing API. */ + /* Try the interface available in 0.9.13 and newer. */ + if (!ctl->useSnapshotOld) { + if (from) + count = virDomainSnapshotListAllChildren(from, &snaps, flags); + else + count = virDomainListAllSnapshots(dom, &snaps, flags); + } + if (count >= 0) { + /* When mixing --from and --tree, we also want a copy of from + * in the list, but with no parent for that one entry. */ + snaplist->snaps = vshCalloc(ctl, sizeof(*snaplist->snaps), + count + (tree && from)); + snaplist->nsnaps = count; + for (i = 0; i < count; i++) + snaplist->snaps[i].snap = snaps[i]; + VIR_FREE(snaps); + if (tree) { + for (i = 0; i < count; i++) { + if (vshGetSnapshotParent(ctl, snaplist->snaps[i].snap, + &snaplist->snaps[i].parent) < 0) + goto cleanup; + } + if (from) { + snaps[snaplist->nsnaps++] = from; + virDomainSnapshotRef(from); + } + } + goto success; + } /* Assume that if we got this far, then the --no-leaves and * --no-metadata flags were not supported. Disable groups that