summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2016-04-25 13:32:01 +0200
committerAlexander Larsson <alexl@redhat.com>2016-04-25 18:59:17 +0200
commit2d74810cbc7d0e243fca97f2301d7f150775f01b (patch)
treece3f2933fcad553154c62ad4a5ed4907e04acdcc /common
parentf340105b4cf225a195766b1365c657e5c6f60081 (diff)
downloadxdg-app-2d74810cbc7d0e243fca97f2301d7f150775f01b.tar.gz
common: Add (and use) xdg_app_summary_lookup_ref helper
Diffstat (limited to 'common')
-rw-r--r--common/xdg-app-dir.c5
-rw-r--r--common/xdg-app-utils.c28
-rw-r--r--common/xdg-app-utils.h3
3 files changed, 33 insertions, 3 deletions
diff --git a/common/xdg-app-dir.c b/common/xdg-app-dir.c
index d6704ae..fa45f2d 100644
--- a/common/xdg-app-dir.c
+++ b/common/xdg-app-dir.c
@@ -2791,7 +2791,6 @@ xdg_app_dir_find_remote_ref (XdgAppDir *self,
g_autoptr(GVariant) summary = NULL;
g_autoptr(GVariant) refs = NULL;
g_autoptr(GBytes) summary_bytes = NULL;
- int pos;
if (!xdg_app_dir_ensure_repo (self, NULL, error))
return NULL;
@@ -2847,14 +2846,14 @@ xdg_app_dir_find_remote_ref (XdgAppDir *self,
summary = g_variant_new_from_bytes (OSTREE_SUMMARY_GVARIANT_FORMAT, summary_bytes, FALSE);
refs = g_variant_get_child_value (summary, 0);
- if (app_ref && xdg_app_variant_bsearch_str (refs, app_ref, &pos))
+ if (app_ref && xdg_app_summary_lookup_ref (summary, app_ref, NULL))
{
if (is_app)
*is_app = TRUE;
return g_steal_pointer (&app_ref);
}
- if (runtime_ref && xdg_app_variant_bsearch_str (refs, runtime_ref, &pos))
+ if (runtime_ref && xdg_app_summary_lookup_ref (summary, runtime_ref, NULL))
{
if (is_app)
*is_app = FALSE;
diff --git a/common/xdg-app-utils.c b/common/xdg-app-utils.c
index 584995e..5ea82a0 100644
--- a/common/xdg-app-utils.c
+++ b/common/xdg-app-utils.c
@@ -1457,6 +1457,34 @@ xdg_app_variant_bsearch_str (GVariant *array,
}
gboolean
+xdg_app_summary_lookup_ref (GVariant *summary, const char *ref, char **out_checksum)
+{
+ g_autoptr(GVariant) refs = g_variant_get_child_value (summary, 0);
+ int pos;
+ g_autoptr(GVariant) refdata = NULL;
+ g_autoptr(GVariant) reftargetdata = NULL;
+ g_autoptr(GVariant) commit_data = NULL;
+ guint64 commit_size;
+ g_autoptr(GVariant) commit_csum_v = NULL;
+ g_autoptr(GBytes) commit_bytes = NULL;
+
+ if (!xdg_app_variant_bsearch_str (refs, ref, &pos))
+ return FALSE;
+
+ refdata = g_variant_get_child_value (refs, pos);
+ reftargetdata = g_variant_get_child_value (refdata, 1);
+ g_variant_get (reftargetdata, "(t@ay@a{sv})", &commit_size, &commit_csum_v, NULL);
+
+ if (!ostree_validate_structureof_csum_v (commit_csum_v, NULL))
+ return FALSE;
+
+ if (out_checksum)
+ *out_checksum = ostree_checksum_from_bytes_v (commit_csum_v);
+
+ return TRUE;
+}
+
+gboolean
xdg_app_repo_set_title (OstreeRepo *repo,
const char *title,
GError **error)
diff --git a/common/xdg-app-utils.h b/common/xdg-app-utils.h
index 8f3f3bc..6715d27 100644
--- a/common/xdg-app-utils.h
+++ b/common/xdg-app-utils.h
@@ -48,6 +48,9 @@ GBytes * xdg_app_read_stream (GInputStream *in,
gboolean xdg_app_variant_bsearch_str (GVariant *array,
const char *str,
int *out_pos);
+gboolean xdg_app_summary_lookup_ref (GVariant *summary,
+ const char *ref,
+ char **out_checksum);
gboolean xdg_app_has_name_prefix (const char *string,
const char *name);