static gboolean do_print_variant_generic (const GVariantType *type, const char *filename, GError **error) { g_autoptr(GVariant) variant = NULL; if (!ot_util_variant_map_at (AT_FDCWD, filename, type, TRUE, &variant, error)) return FALSE; ot_dump_variant (variant); return TRUE; }
static gboolean do_print_metadata_key (OstreeRepo *repo, const char *resolved_rev, gboolean detached, const char *key, GError **error) { gboolean ret = FALSE; gs_unref_variant GVariant *value = NULL; gs_unref_variant GVariant *commit = NULL; gs_unref_variant GVariant *metadata = NULL; if (!detached) { if (!ostree_repo_load_variant (repo, OSTREE_OBJECT_TYPE_COMMIT, resolved_rev, &commit, error)) goto out; /* PARSE OSTREE_SERIALIZED_COMMIT_VARIANT */ metadata = g_variant_get_child_value (commit, 0); } else { if (!ostree_repo_read_commit_detached_metadata (repo, resolved_rev, &metadata, NULL, error)) goto out; if (metadata == NULL) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, "No detached metadata for commit %s", resolved_rev); goto out; } } value = g_variant_lookup_value (metadata, key, NULL); if (!value) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, "No such metadata key '%s'", key); goto out; } ot_dump_variant (value); ret = TRUE; out: return ret; }
static gboolean do_print_variant_generic (const GVariantType *type, const char *filename, GError **error) { gboolean ret = FALSE; gs_unref_object GFile *f = NULL; gs_unref_variant GVariant *variant = NULL; f = g_file_new_for_path (filename); if (!ot_util_variant_map (f, type, TRUE, &variant, error)) goto out; ot_dump_variant (variant); ret = TRUE; out: return ret; }
void ot_dump_object (OstreeObjectType objtype, const char *checksum, GVariant *variant, OstreeDumpFlags flags) { g_print ("%s %s\n", ostree_object_type_to_string (objtype), checksum); if (flags & OSTREE_DUMP_RAW) { ot_dump_variant (variant); return; } switch (objtype) { case OSTREE_OBJECT_TYPE_COMMIT: dump_commit (variant, flags); break; /* TODO: Others could be implemented here */ default: break; } }
void ot_dump_summary_bytes (GBytes *summary_bytes, OstreeDumpFlags flags) { g_autoptr(GVariant) summary = NULL; g_autoptr(GVariant) refs = NULL; g_autoptr(GVariant) exts = NULL; GVariantIter iter; GVariant *value; char *key; g_return_if_fail (summary_bytes != NULL); summary = g_variant_new_from_bytes (OSTREE_SUMMARY_GVARIANT_FORMAT, summary_bytes, FALSE); if (flags & OSTREE_DUMP_RAW) { ot_dump_variant (summary); return; } refs = g_variant_get_child_value (summary, 0); exts = g_variant_get_child_value (summary, 1); g_variant_iter_init (&iter, refs); while ((value = g_variant_iter_next_value (&iter)) != NULL) { const char *ref_name = NULL; g_variant_get_child (value, 0, "&s", &ref_name); if (ref_name != NULL) { g_autoptr(GVariant) csum_v = NULL; g_autoptr(GVariantIter) metadata = NULL; guint64 commit_size; g_variant_get_child (value, 1, "(t@aya{sv})", &commit_size, &csum_v, &metadata); dump_summary_ref (ref_name, commit_size, csum_v, metadata); g_print ("\n"); } g_variant_unref (value); } g_variant_iter_init (&iter, exts); while (g_variant_iter_loop (&iter, "{sv}", &key, &value)) { g_autofree gchar *value_str = NULL; const gchar *pretty_key = NULL; if (g_strcmp0 (key, OSTREE_SUMMARY_STATIC_DELTAS) == 0) { pretty_key = "Static Deltas"; value_str = g_variant_print (value, FALSE); } else if (g_strcmp0 (key, OSTREE_SUMMARY_LAST_MODIFIED) == 0) { pretty_key = "Last-Modified"; value_str = uint64_secs_to_iso8601 (GUINT64_FROM_BE (g_variant_get_uint64 (value))); } else if (g_strcmp0 (key, OSTREE_SUMMARY_EXPIRES) == 0) { pretty_key = "Expires"; value_str = uint64_secs_to_iso8601 (GUINT64_FROM_BE (g_variant_get_uint64 (value))); } else { value_str = g_variant_print (value, FALSE); } /* Print out. */ if (pretty_key != NULL) g_print ("%s (%s): %s\n", pretty_key, key, value_str); else g_print ("%s: %s\n", key, value_str); } }