[Libosinfo] [libosinfo PATCH 1/3] tree: Add osinfo_tree_has_treeinfo()

Fabiano Fidêncio fidencio at redhat.com
Mon Dec 10 12:50:04 UTC 2018


On Mon, Dec 10, 2018 at 1:46 PM Daniel P. Berrangé <berrange at redhat.com> wrote:
>
> On Mon, Dec 10, 2018 at 01:37:35PM +0100, Fabiano Fidêncio wrote:
> > As not all the "trees" we stored in osinfo-db have "treeinfo" data,
> > let's add a new method, osinfo_tree_has_treeinfo(), that can be used to
> > check whether the tree has treeinfo or not.
> >
> > Signed-off-by: Fabiano Fidêncio <fidencio at redhat.com>
> > ---
> >  osinfo/libosinfo.syms  |  2 ++
> >  osinfo/osinfo_loader.c | 25 +++++++++++++++++--------
> >  osinfo/osinfo_tree.c   | 39 +++++++++++++++++++++++++++++++++++++++
> >  osinfo/osinfo_tree.h   |  3 +++
> >  4 files changed, 61 insertions(+), 8 deletions(-)
> >
> > diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
> > index 39906c4..d87b7c0 100644
> > --- a/osinfo/libosinfo.syms
> > +++ b/osinfo/libosinfo.syms
> > @@ -548,6 +548,8 @@ LIBOSINFO_1.3.0 {
> >       osinfo_os_get_all_device_links;
> >       osinfo_os_get_image_list;
> >       osinfo_os_get_maximum_resources;
> > +
> > +     osinfo_tree_has_treeinfo;
> >  } LIBOSINFO_0.2.13;
> >
> >  /* Symbols in next release...
> > diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c
> > index 17cb563..cea5070 100644
> > --- a/osinfo/osinfo_loader.c
> > +++ b/osinfo/osinfo_loader.c
> > @@ -1195,7 +1195,7 @@ static OsinfoTree *osinfo_loader_tree(OsinfoLoader *loader,
> >  {
> >      xmlNodePtr *nodes = NULL;
> >      guint i;
> > -
> > +    gboolean has_treeinfo = FALSE;
> >      gchar *arch = (gchar *)xmlGetProp(root, BAD_CAST "arch");
> >      const OsinfoEntityKey keys[] = {
> >          { OSINFO_TREE_PROP_URL, G_TYPE_STRING },
> > @@ -1222,27 +1222,36 @@ static OsinfoTree *osinfo_loader_tree(OsinfoLoader *loader,
> >              continue;
> >
> >          if (g_str_equal((const gchar *)nodes[i]->name,
> > -                        OSINFO_TREE_PROP_TREEINFO_FAMILY + strlen("treeinfo-")))
> > +                        OSINFO_TREE_PROP_TREEINFO_FAMILY + strlen("treeinfo-"))) {
> >              osinfo_entity_set_param(OSINFO_ENTITY(tree),
> >                                      OSINFO_TREE_PROP_TREEINFO_FAMILY,
> >                                      (const gchar *)nodes[i]->children->content);
> > -        else if (g_str_equal((const gchar *)nodes[i]->name,
> > -                             OSINFO_TREE_PROP_TREEINFO_VARIANT + strlen("treeinfo-")))
> > +            has_treeinfo = TRUE;
> > +        } else if (g_str_equal((const gchar *)nodes[i]->name,
> > +                             OSINFO_TREE_PROP_TREEINFO_VARIANT + strlen("treeinfo-"))) {
> >              osinfo_entity_set_param(OSINFO_ENTITY(tree),
> >                                      OSINFO_TREE_PROP_TREEINFO_VARIANT,
> >                                      (const gchar *)nodes[i]->children->content);
> > -        else if (g_str_equal((const gchar *)nodes[i]->name,
> > -                             OSINFO_TREE_PROP_TREEINFO_VERSION + strlen("treeinfo-")))
> > +            has_treeinfo = TRUE;
> > +        } else if (g_str_equal((const gchar *)nodes[i]->name,
> > +                             OSINFO_TREE_PROP_TREEINFO_VERSION + strlen("treeinfo-"))) {
> >              osinfo_entity_set_param(OSINFO_ENTITY(tree),
> >                                      OSINFO_TREE_PROP_TREEINFO_VERSION,
> >                                      (const gchar *)nodes[i]->children->content);
> > -        else if (g_str_equal((const gchar *)nodes[i]->name,
> > -                             OSINFO_TREE_PROP_TREEINFO_ARCH + strlen("treeinfo-")))
> > +            has_treeinfo = TRUE;
> > +        } else if (g_str_equal((const gchar *)nodes[i]->name,
> > +                             OSINFO_TREE_PROP_TREEINFO_ARCH + strlen("treeinfo-"))) {
> >              osinfo_entity_set_param(OSINFO_ENTITY(tree),
> >                                      OSINFO_TREE_PROP_TREEINFO_ARCH,
> >                                      (const gchar *)nodes[i]->children->content);
> > +            has_treeinfo = TRUE;
> > +        }
> >      }
>
> None of this is needed, when you can just do:
>
>
>    if (nnodes) {
>       ... set has_treeinfo...
>
> because nnodes > 0, if-and-only-if,  there were child nodes
> under <treeinfo>...

I thought about that but the check done inside the loop made me a
little bit worried of just relying on the number of nodes.
1220         if (!nodes[i]->children ||
1221             nodes[i]->children->type != XML_TEXT_NODE)
1222             continue;

Changes are done locally!




More information about the Libosinfo mailing list