static gboolean
_builtin_db_version (OstreeRepo *repo, GPtrArray *revs,
                     GCancellable   *cancellable,
                     GError        **error)
{
  for (guint num = 0; num < revs->len; num++)
    {
      char *rev = revs->pdata[num];
      g_autoptr(RpmRevisionData) rpmrev = NULL;
      g_autofree char *rpmdbv = NULL;
      char *mrev = strstr (rev, "..");

      if (mrev)
        {
          g_autoptr(GPtrArray) range_revs = NULL;
          g_autofree char *revdup = g_strdup (rev);

          mrev = revdup + (mrev - rev);
          *mrev = 0;
          mrev += 2;

          if (!*mrev)
            mrev = NULL;

          range_revs = _rpmostree_util_get_commit_hashes (repo, revdup, mrev, cancellable, error);
          if (!range_revs)
            return FALSE;

          if (!_builtin_db_version (repo, range_revs,
                                    cancellable, error))
            return FALSE;

          continue;
        }

        rpmrev = rpmrev_new (repo, rev, NULL, cancellable, error);
        if (!rpmrev)
          return FALSE;

        rpmdbv = rpmhdrs_rpmdbv (rpmrev_get_headers (rpmrev),
                                 cancellable, error);
        if (rpmdbv == NULL)
          return FALSE;

        /* FIXME: g_console? */
        if (!g_str_equal (rev, rpmrev_get_commit (rpmrev)))
          printf ("ostree commit: %s (%s)\n", rev, rpmrev_get_commit (rpmrev));
        else
          printf ("ostree commit: %s\n", rev);

        printf ("  rpmdbv is: %66s\n", rpmdbv);
      }

  return TRUE;
}
static gboolean
_builtin_db_version (OstreeRepo *repo, GPtrArray *revs,
                     GCancellable   *cancellable,
                     GError        **error)
{
  int num = 0;
  gboolean ret = FALSE;

  for (num = 0; num < revs->len; num++)
    {
      char *rev = revs->pdata[num];
      _cleanup_rpmrev_ struct RpmRevisionData *rpmrev = NULL;
      gs_free char *rpmdbv = NULL;
      char *mrev = strstr (rev, "..");

      if (mrev)
        {
          gs_unref_ptrarray GPtrArray *range_revs = NULL;
          gs_free char *revdup = g_strdup (rev);

          mrev = revdup + (mrev - rev);
          *mrev = 0;
          mrev += 2;

          if (!*mrev)
            mrev = NULL;

          range_revs = _rpmostree_util_get_commit_hashes (repo, revdup, mrev, cancellable, error);
          if (!range_revs)
            goto out;

          if (!_builtin_db_version (repo, range_revs,
                                    cancellable, error))
            goto out;

          continue;
        }

        rpmrev = rpmrev_new (repo, rev, NULL, cancellable, error);
        if (!rpmrev)
          goto out;

        rpmdbv = rpmhdrs_rpmdbv (rpmrev_get_headers (rpmrev),
                                 cancellable, error);
        if (rpmdbv == NULL)
          goto out;

        /* FIXME: g_console? */
        if (!g_str_equal (rev, rpmrev_get_commit (rpmrev)))
          printf ("ostree commit: %s (%s)\n", rev, rpmrev_get_commit (rpmrev));
        else
          printf ("ostree commit: %s\n", rev);

        printf ("  rpmdbv is: %66s\n", rpmdbv);
      }

  ret = TRUE;

 out:
  return ret;
}