[ostree/wip/metalinks] wip
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ostree/wip/metalinks] wip
- Date: Fri, 15 Aug 2014 21:09:01 +0000 (UTC)
commit 3750312cbcb63821cee3087841f9854f2ee2f719
Author: Colin Walters <walters verbum org>
Date: Thu Aug 7 16:44:00 2014 -0400
wip
src/libostree/ostree-repo.c | 60 +++++++++++++++++++++++++++++---------
src/libotutil/ot-variant-utils.c | 6 ++++
src/libotutil/ot-variant-utils.h | 2 +
3 files changed, 54 insertions(+), 14 deletions(-)
---
diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c
index cde91f2..a16b049 100644
--- a/src/libostree/ostree-repo.c
+++ b/src/libostree/ostree-repo.c
@@ -2280,8 +2280,10 @@ ostree_repo_regenerate_summary (OstreeRepo *self,
gboolean ret = FALSE;
gs_unref_hashtable GHashTable *refs = NULL;
gs_unref_hashtable GHashTable *commits = NULL;
- gs_unref_variant_builder GVariantBuilder *builder = NULL;
- GList *ordered_refs = NULL;
+ gs_unref_variant_builder GVariantBuilder *refs_builder = NULL;
+ gs_unref_variant_builder GVariantBuilder *commits_builder = NULL;
+ gs_unref_variant GVariant *summary = NULL;
+ GList *ordered_keys = NULL;
GList *iter = NULL;
GHashTableIter hashiter;
gpointer hkey, hvalue;
@@ -2289,18 +2291,18 @@ ostree_repo_regenerate_summary (OstreeRepo *self,
if (!ostree_repo_list_refs (self, NULL, &refs, cancellable, error))
goto out;
- commits = g_hash_table_new (g_str_hash, g_str_equal, g_free, g_variant_unref);
+ commits = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify)g_variant_unref);
- builder = g_variant_builder_new ("a(ayay)");
+ refs_builder = g_variant_builder_new (G_VARIANT_TYPE ("a{s(aya{sv})}"));
- ordered_refs = g_hash_table_get_keys (refs);
- ordered_refs = g_list_sort (ordered_refs, (GCompareFunc)strcmp);
+ ordered_keys = g_hash_table_get_keys (refs);
+ ordered_keys = g_list_sort (ordered_keys, (GCompareFunc)strcmp);
- for (iter = ordered_refs; iter; iter = iter->next)
+ for (iter = ordered_keys; iter; iter = iter->next)
{
const char *ref = iter->data;
const char *commit = g_hash_table_lookup (refs, ref);
- guint8 csum[32];
+ gs_unref_variant GVariant *csum_v = NULL;
g_assert (commit);
@@ -2308,22 +2310,52 @@ ostree_repo_regenerate_summary (OstreeRepo *self,
{
gs_unref_variant GVariant *commit_content = NULL;
- if (!ostree_repo_load_variant (repo, OSTREE_OBJECT_TYPE_COMMIT, commit,
+ if (!ostree_repo_load_variant (self, OSTREE_OBJECT_TYPE_COMMIT, commit,
&commit_content, error))
goto out;
- g_hash_table_insert (commits, commit, g_variant_ref (commit_content));
+ g_hash_table_insert (commits, g_strdup (commit), g_variant_ref (commit_content));
}
- ostree_checksum_inplace_to_bytes (commit, csum);
+ csum_v = ostree_checksum_to_bytes_v (commit);
+
+ g_variant_builder_add_value (refs_builder,
+ g_variant_new ("(s(@ay a{sv}))", ref, csum_v,
+ ot_gvariant_new_empty_string_dict ()));
+ }
+
+ g_list_free (ordered_keys);
+ ordered_keys = g_hash_table_get_keys (commits);
+ ordered_keys = g_list_sort (ordered_keys, (GCompareFunc)strcmp);
+
+ commits_builder = g_variant_builder_new (G_VARIANT_TYPE ("a(ayay)"));
+
+ for (iter = ordered_keys; iter; iter = iter->next)
+ {
+ const char *commit = iter->data;
+ GVariant *commit_content = g_hash_table_lookup (commits, commit);
+ gs_unref_variant GVariant *csum_v = NULL;
+
+ g_assert (commit_content);
+
+ csum_v = ostree_checksum_to_bytes_v (commit);
- g_variant_builder_add (
+ g_variant_builder_add_value (commits_builder,
+ g_variant_new ("(@ay ay))", csum_v, commit_content));
}
+ {
+ gs_unref_variant_builder GVariantBuilder *summary_builder =
+ g_variant_builder_new (OSTREE_SUMMARY_GVARIANT_FORMAT);
+ g_variant_builder_add_value (summary_builder, g_variant_builder_end (commits_builder));
+ g_variant_builder_add_value (summary_builder, g_variant_builder_end (refs_builder));
+ summary = g_variant_builder_end (summary_builder);
+ }
+
ret = TRUE;
out:
- if (ordered_refs)
- g_list_free (ordered_refs);
+ if (ordered_keys)
+ g_list_free (ordered_keys);
return ret;
}
diff --git a/src/libotutil/ot-variant-utils.c b/src/libotutil/ot-variant-utils.c
index ffc2def..4355829 100644
--- a/src/libotutil/ot-variant-utils.c
+++ b/src/libotutil/ot-variant-utils.c
@@ -31,6 +31,12 @@
#include "otutil.h"
GVariant *
+ot_gvariant_new_empty_string_dict (void)
+{
+ return g_variant_builder_end (g_variant_builder_new ("a{sv}"));
+}
+
+GVariant *
ot_gvariant_new_bytearray (const guchar *data,
gsize len)
{
diff --git a/src/libotutil/ot-variant-utils.h b/src/libotutil/ot-variant-utils.h
index 218e543..429bceb 100644
--- a/src/libotutil/ot-variant-utils.h
+++ b/src/libotutil/ot-variant-utils.h
@@ -31,6 +31,8 @@ GVariant *ot_gvariant_new_bytearray (const guchar *data,
GVariant *ot_gvariant_new_ay_bytes (GBytes *bytes);
+GVariant *ot_gvariant_new_empty_string_dict (void);
+
GHashTable *ot_util_variant_asv_to_hash_table (GVariant *variant);
GVariant * ot_util_variant_take_ref (GVariant *variant);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]