diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c index e823e19e..9b29bd3f 100644 --- a/src/libostree/ostree-repo.c +++ b/src/libostree/ostree-repo.c @@ -4999,7 +4999,7 @@ ostree_repo_list_objects (OstreeRepo *self, /** * ostree_repo_list_commit_objects_starting_with: * @self: Repo - * @start: List commits starting with this checksum + * @start: List commits starting with this checksum (empty string for all) * @out_commits: (out) (transfer container) (element-type GVariant GVariant): * Map of serialized commit name to variant data * @cancellable: Cancellable @@ -5008,6 +5008,8 @@ ostree_repo_list_objects (OstreeRepo *self, * This function synchronously enumerates all commit objects starting * with @start, returning data in @out_commits. * + * To list all commit objects, provide the empty string `""` for @start. + * * Returns: %TRUE on success, %FALSE on error, and @error will be set */ gboolean diff --git a/src/ostree/ot-builtin-fsck.c b/src/ostree/ot-builtin-fsck.c index 9e3f77ef..77ad6a4f 100644 --- a/src/ostree/ot-builtin-fsck.c +++ b/src/ostree/ot-builtin-fsck.c @@ -282,17 +282,16 @@ ostree_builtin_fsck (int argc, char **argv, OstreeCommandInvocation *invocation, } if (!opt_quiet) - g_print ("Enumerating objects...\n"); + g_print ("Enumerating commits...\n"); - g_autoptr(GHashTable) objects = NULL; - if (!ostree_repo_list_objects (repo, OSTREE_REPO_LIST_OBJECTS_ALL, - &objects, cancellable, error)) + // Find all commit objects, including partial ones + g_autoptr(GHashTable) all_commits = NULL; + if (!ostree_repo_list_commit_objects_starting_with (repo, "", &all_commits, cancellable, error)) return FALSE; - + // And gather a set of non-partial commits for further analysis g_autoptr(GHashTable) commits = g_hash_table_new_full (ostree_hash_object_name, g_variant_equal, (GDestroyNotify)g_variant_unref, NULL); - g_autoptr(GPtrArray) tombstones = NULL; if (opt_add_tombstones) tombstones = g_ptr_array_new_with_free_func (g_free); @@ -302,8 +301,8 @@ ostree_builtin_fsck (int argc, char **argv, OstreeCommandInvocation *invocation, guint n_partial = 0; guint n_fsck_partial = 0; - g_hash_table_iter_init (&hash_iter, objects); - while (g_hash_table_iter_next (&hash_iter, &key, &value)) + g_hash_table_iter_init (&hash_iter, all_commits); + while (g_hash_table_iter_next (&hash_iter, &key, NULL)) { GVariant *serialized_key = key; const char *checksum; @@ -313,7 +312,9 @@ ostree_builtin_fsck (int argc, char **argv, OstreeCommandInvocation *invocation, ostree_object_name_deserialize (serialized_key, &checksum, &objtype); - if (objtype == OSTREE_OBJECT_TYPE_COMMIT) + g_assert (objtype == OSTREE_OBJECT_TYPE_COMMIT); + + if (TRUE) // Temporarily avoiding the noise of de-indenting this whole thing { if (!ostree_repo_load_commit (repo, checksum, &commit, &commitstate, error)) return FALSE; @@ -420,7 +421,7 @@ ostree_builtin_fsck (int argc, char **argv, OstreeCommandInvocation *invocation, } } - g_clear_pointer (&objects, g_hash_table_unref); + g_clear_pointer (&all_commits, g_hash_table_unref); if (!opt_quiet) g_print ("Verifying content integrity of %u commit objects...\n",