[PATCH 1/5] virsh: checkpoint & domain-monitor: small refactoring

Ján Tomko jtomko at redhat.com
Thu Sep 23 16:05:57 UTC 2021


On a Thursday in 2021, Kristina Hanicova wrote:
>This patch includes small refactoring such as:
>* early return in case of an error - helps with indentation
>* removal of 'else' branch after return - unnecessary
>* altering code to be more consistent with the rest of the file -
>  function calls inside of parentheses, etc.
>* removal of unnecessary variables - mainly the ones used for
>  return value instead of returning it directly
>* missing parentheses around multi-line block of code
>

There's too much going on in one patch at the same time.

Please either do one kind of change in a patch, or split it
per-function. And changes that result in moving lots of lines
to a different indentation level are easier to read if they are
separate from other changes.

>Signed-off-by: Kristina Hanicova <khanicov at redhat.com>
>---
> tools/virsh-checkpoint.c     |  19 +--
> tools/virsh-domain-monitor.c | 314 ++++++++++++++++-------------------
> 2 files changed, 155 insertions(+), 178 deletions(-)
>
>diff --git a/tools/virsh-checkpoint.c b/tools/virsh-checkpoint.c
>index 8ad37ece69..c1a9e66a24 100644
>--- a/tools/virsh-checkpoint.c
>+++ b/tools/virsh-checkpoint.c
>@@ -931,13 +931,13 @@ cmdCheckpointParent(vshControl *ctl,
>
>     if (virshGetCheckpointParent(ctl, checkpoint, &parent) < 0)
>         return false;
>+
>     if (!parent) {
>         vshError(ctl, _("checkpoint '%s' has no parent"), name);
>         return false;
>     }
>
>     vshPrint(ctl, "%s", parent);
>-

I was asked to leave an empty line before the final return by a reviewer
recently, so it seems some people like it.

>     return true;
> }
>
>diff --git a/tools/virsh-domain-monitor.c b/tools/virsh-domain-monitor.c
>index eb3e0ef11a..d9bc869080 100644
>--- a/tools/virsh-domain-monitor.c
>+++ b/tools/virsh-domain-monitor.c
>@@ -58,6 +58,7 @@ virshGetDomainDescription(vshControl *ctl, virDomainPtr dom, bool title,
>     g_autoptr(xmlDoc) doc = NULL;
>     g_autoptr(xmlXPathContext) ctxt = NULL;
>     int type;
>+    int errCode;
>
>     if (title)
>         type = VIR_DOMAIN_METADATA_TITLE;
>@@ -66,19 +67,18 @@ virshGetDomainDescription(vshControl *ctl, virDomainPtr dom, bool title,
>
>     if ((desc = virDomainGetMetadata(dom, type, NULL, flags))) {
>         return desc;
>-    } else {
>-        int errCode = virGetLastErrorCode();
>-
>-        if (errCode == VIR_ERR_NO_DOMAIN_METADATA) {
>-            desc = g_strdup("");
>-            vshResetLibvirtError();
>-            return desc;
>-        }
>+    }
>+    errCode = virGetLastErrorCode();
>
>-        if (errCode != VIR_ERR_NO_SUPPORT)
>-            return desc;
>+    if (errCode == VIR_ERR_NO_DOMAIN_METADATA) {
>+        desc = g_strdup("");
>+        vshResetLibvirtError();
>+        return desc;

You can return g_strdup("") directly.

>     }
>
>+    if (errCode != VIR_ERR_NO_SUPPORT)
>+        return desc;

Another alternative could be to split the fallback code below into a
separate function and call it if errCode == NO_SUPPORT

>+
>     /* fall back to xml */
>     if (virshDomainGetXMLFromDom(ctl, dom, flags, &doc, &ctxt) < 0)
>         return NULL;
>@@ -467,79 +467,72 @@ cmdDomblkinfo(vshControl *ctl, const vshCmd *cmd)

The changes in cmdDomblkinfo deserve their own patch.

>
>     human = vshCommandOptBool(cmd, "human");
>
>-    if (all) {
>-        bool active = virDomainIsActive(dom) == 1;
>-        int rc;
>+    if (!all) {
>

[...]

>@@ -584,8 +577,6 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd)
>     if (vshCommandOptBool(cmd, "inactive"))
>         flags |= VIR_DOMAIN_XML_INACTIVE;
>
>-    details = vshCommandOptBool(cmd, "details");
>-
>     if (virshDomainGetXML(ctl, cmd, flags, &xmldoc, &ctxt) < 0)
>         return false;
>
>@@ -593,7 +584,7 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd)
>     if (ndisks < 0)
>         return false;
>
>-    if (details)
>+    if ((details = vshCommandOptBool(cmd, "details")))

I prefer the version where we process the command options first and
initialize the bool separately.

>         table = vshTableNew(_("Type"), _("Device"), _("Target"), _("Source"), NULL);
>     else
>         table = vshTableNew(_("Target"), _("Source"), NULL);
>@@ -618,8 +609,7 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd)
>             }
>         }
>
>-        target = virXPathString("string(./target/@dev)", ctxt);
>-        if (!target) {
>+        if (!(target = virXPathString("string(./target/@dev)", ctxt))) {
>             vshError(ctl, "unable to query block list");
>             return false;
>         }
>@@ -648,19 +638,16 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd)
>                                     "|./source/@path)", ctxt);
>         }
>
>-        if (details) {
>-            if (vshTableRowAppend(table, type, device, target,
>-                                  NULLSTR_MINUS(source), NULL) < 0)
>-                return false;
>-        } else {
>-            if (vshTableRowAppend(table, target,
>-                                  NULLSTR_MINUS(source), NULL) < 0)
>-                return false;
>-        }
>+        if (details && (vshTableRowAppend(table, type, device, target,
>+                                          NULLSTR_MINUS(source), NULL) < 0))
>+            return false;
>+
>+        if (!details && (vshTableRowAppend(table, target,
>+                                           NULLSTR_MINUS(source), NULL) < 0))
>+            return false;

The original is easier to read to me - the else branch is more visible
than the exclamation mark.

>     }
>
>     vshTablePrintToStdout(table, ctl);
>-
>     return true;
> }
>
>@@ -808,16 +795,15 @@ cmdDomIfGetLink(vshControl *ctl, const vshCmd *cmd)
>         return false;
>     }
>
>-    if (ninterfaces < 1) {
>-        if (macstr[0])
>+    if (ninterfaces != 1) {
>+        if (ninterfaces > 1)

It's more readable to me to duplicate the 'return else' rather than the
condition.

In the spirit of shorter if's than elses
[ https://libvirt.org/coding-style.html#curly-braces ]
you can simply move the n > 1 condition above n < 1

>+            vshError(ctl, _("multiple matching interfaces found"));
>+        else if (macstr[0])
>             vshError(ctl, _("Interface (mac: %s) not found."), macstr);
>         else
>             vshError(ctl, _("Interface (dev: %s) not found."), iface);
>
>         return false;
>-    } else if (ninterfaces > 1) {
>-        vshError(ctl, _("multiple matching interfaces found"));
>-        return false;
>     }
>
>     ctxt->node = interfaces[0];

Jano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20210923/d186f5da/attachment-0001.sig>


More information about the libvir-list mailing list