diff --git a/app/flatpak-builtins-history.c b/app/flatpak-builtins-history.c index 860d82c4..f204edd1 100644 --- a/app/flatpak-builtins-history.c +++ b/app/flatpak-builtins-history.c @@ -217,35 +217,43 @@ print_history (GPtrArray *dirs, strcmp (columns[k].name, "arch") == 0 || strcmp (columns[k].name, "branch") == 0) { - g_autoptr(FlatpakDecomposed) ref = NULL; - g_autofree char *ref_str = get_field (j, "REF", error); + g_autofree char *ref_str = NULL; + g_autofree char *value = NULL; + + ref_str = get_field (j, "REF", error); if (*error) return FALSE; - if (ref_str && ref_str[0]) - { - ref = flatpak_decomposed_new_from_ref (ref_str, error); - if (ref == NULL) - return FALSE; - } + if (ref_str && ref_str[0] && + !flatpak_is_app_runtime_or_appstream_ref (ref_str) && + g_strcmp0 (ref_str, OSTREE_REPO_METADATA_REF) != 0) + g_warning ("Unknown ref in history: %s", ref_str); if (strcmp (columns[k].name, "ref") == 0) - flatpak_table_printer_add_column (printer, ref_str); - else + value = g_strdup (ref_str); + else if (strcmp (columns[k].name, "arch") == 0) { - g_autofree char *value = NULL; - if (ref) + if (ref_str != NULL) + value = flatpak_get_arch_for_ref (ref_str); + } + else if (ref_str && ref_str[0] && + (g_str_has_prefix (ref_str, "app/") || + g_str_has_prefix (ref_str, "runtime/"))) + { + g_autoptr(FlatpakDecomposed) ref = NULL; + ref = flatpak_decomposed_new_from_ref (ref_str, NULL); + if (ref == NULL) + g_warning ("Invalid ref in history: %s", ref_str); + else { if (strcmp (columns[k].name, "application") == 0) value = flatpak_decomposed_dup_id (ref); - else if (strcmp (columns[k].name, "arch") == 0) - value = flatpak_decomposed_dup_arch (ref); else value = flatpak_decomposed_dup_branch (ref); } - - flatpak_table_printer_add_column (printer, value); } + + flatpak_table_printer_add_column (printer, value); } else if (strcmp (columns[k].name, "installation") == 0) { diff --git a/common/flatpak-dir.c b/common/flatpak-dir.c index 1e38b64f..fff1d46b 100644 --- a/common/flatpak-dir.c +++ b/common/flatpak-dir.c @@ -15814,7 +15814,7 @@ flatpak_dir_delete_mirror_refs (FlatpakDir *self, * remotes, but that would not cover the case of if a remote was * deleted. */ - if (is_flatpak_ref (c_r->ref_name) || + if (flatpak_is_app_runtime_or_appstream_ref (c_r->ref_name) || g_strcmp0 (c_r->ref_name, OSTREE_REPO_METADATA_REF) == 0) { if (dry_run) diff --git a/common/flatpak-ref-utils-private.h b/common/flatpak-ref-utils-private.h index 64d93b54..ac73dd16 100644 --- a/common/flatpak-ref-utils-private.h +++ b/common/flatpak-ref-utils-private.h @@ -43,6 +43,7 @@ char * flatpak_make_valid_id_prefix (const char *orig_id); gboolean flatpak_id_has_subref_suffix (const char *id, gssize id_len); +gboolean flatpak_is_app_runtime_or_appstream_ref (const char *ref); char * flatpak_get_arch_for_ref (const char *ref); const char *flatpak_get_compat_arch_reverse (const char *compat_arch); diff --git a/common/flatpak-utils.c b/common/flatpak-utils.c index f7d53e64..a18fc053 100644 --- a/common/flatpak-utils.c +++ b/common/flatpak-utils.c @@ -3173,8 +3173,8 @@ flatpak_repo_save_digested_summary_delta (OstreeRepo *repo, } -static gboolean -is_flatpak_ref (const char *ref) +gboolean +flatpak_is_app_runtime_or_appstream_ref (const char *ref) { return g_str_has_prefix (ref, "appstream/") || @@ -3289,7 +3289,7 @@ populate_commit_data_cache (OstreeRepo *repo, VarVariantRef xa_data_v; VarCacheDataRef xa_data; - if (!is_flatpak_ref (ref)) + if (!flatpak_is_app_runtime_or_appstream_ref (ref)) continue; commit_bytes = var_ref_info_peek_checksum (info, &commit_bytes_len); @@ -4363,7 +4363,7 @@ generate_summary (OstreeRepo *repo, if (!g_hash_table_contains (commits, rev)) continue; /* Filter out commit (by arch & subset) */ - if (is_flatpak_ref (ref)) + if (flatpak_is_app_runtime_or_appstream_ref (ref)) rev_data = g_hash_table_lookup (commit_data_cache, rev); if (rev_data != NULL) @@ -4804,7 +4804,7 @@ flatpak_repo_update (OstreeRepo *repo, g_hash_table_add (arches, g_steal_pointer (&arch)); /* Add CommitData for flatpak refs that we didn't already pre-populate */ - if (is_flatpak_ref (ref)) + if (flatpak_is_app_runtime_or_appstream_ref (ref)) { rev_data = g_hash_table_lookup (commit_data_cache, rev); if (rev_data == NULL)