diff --git a/src/libostree/ostree-repo-prune.c b/src/libostree/ostree-repo-prune.c index da4f4284..e53b8163 100644 --- a/src/libostree/ostree-repo-prune.c +++ b/src/libostree/ostree-repo-prune.c @@ -189,7 +189,6 @@ _ostree_repo_prune_tmp (OstreeRepo *self, return TRUE; } - /** * ostree_repo_prune_static_deltas: * @self: Repo @@ -437,8 +436,17 @@ ostree_repo_prune (OstreeRepo *self, return FALSE; } - objects = ostree_repo_list_objects_set (self, OSTREE_REPO_LIST_OBJECTS_ALL | OSTREE_REPO_LIST_OBJECTS_NO_PARENTS, + if (commit_only) + { + if (!ostree_repo_list_commit_objects_starting_with (self, "", &objects, cancellable, error)) + return FALSE; + } + else + { + objects = ostree_repo_list_objects_set (self, OSTREE_REPO_LIST_OBJECTS_ALL | OSTREE_REPO_LIST_OBJECTS_NO_PARENTS, cancellable, error); + } + if (!objects) return FALSE; @@ -508,9 +516,20 @@ ostree_repo_prune_from_reachable (OstreeRepo *self, if (!lock) return FALSE; - g_autoptr(GHashTable) objects = - ostree_repo_list_objects_set (self, OSTREE_REPO_LIST_OBJECTS_ALL | OSTREE_REPO_LIST_OBJECTS_NO_PARENTS, - cancellable, error); + g_autoptr(GHashTable) objects = NULL; + OstreeRepoPruneFlags flags = options->flags; + gboolean commit_only = (flags & OSTREE_REPO_PRUNE_FLAGS_COMMIT_ONLY) > 0; + if (commit_only) + { + if (!ostree_repo_list_commit_objects_starting_with (self, "", &objects, cancellable, error)) + return FALSE; + } + else + { + objects = + ostree_repo_list_objects_set (self, OSTREE_REPO_LIST_OBJECTS_ALL | OSTREE_REPO_LIST_OBJECTS_NO_PARENTS, + cancellable, error); + } if (!objects) return FALSE; diff --git a/src/libostree/ostree-repo.h b/src/libostree/ostree-repo.h index 98571170..b7ed3600 100644 --- a/src/libostree/ostree-repo.h +++ b/src/libostree/ostree-repo.h @@ -1261,7 +1261,7 @@ void ostree_repo_commit_traverse_iter_cleanup (void *p); * OstreeRepoPruneFlags: * @OSTREE_REPO_PRUNE_FLAGS_NONE: No special options for pruning * @OSTREE_REPO_PRUNE_FLAGS_NO_PRUNE: Don't actually delete objects - * @OSTREE_REPO_PRUNE_FLAGS_REFS_ONLY: Do not traverse individual commit objects, only follow refs + * @OSTREE_REPO_PRUNE_FLAGS_REFS_ONLY: Do not traverse individual commit objects, only follow refs for reachability calculations * @OSTREE_REPO_PRUNE_FLAGS_COMMIT_ONLY: Only traverse commit objects. (Since 2022.2) */ typedef enum {