diff --git a/src/libostree/ostree-repo-prune.c b/src/libostree/ostree-repo-prune.c index fc3cfa54..c8a178ec 100644 --- a/src/libostree/ostree-repo-prune.c +++ b/src/libostree/ostree-repo-prune.c @@ -52,28 +52,31 @@ maybe_prune_loose_object (OtPruneData *data, if (!g_hash_table_lookup_extended (data->reachable, key, NULL, NULL)) { + guint64 storage_size = 0; + g_debug ("Pruning unneeded object %s.%s", checksum, ostree_object_type_to_string (objtype)); + + if (!ostree_repo_query_object_storage_size (data->repo, objtype, checksum, + &storage_size, cancellable, error)) + return FALSE; + + data->freed_bytes += storage_size; + if (!(flags & OSTREE_REPO_PRUNE_FLAGS_NO_PRUNE)) { - guint64 storage_size = 0; - if (objtype == OSTREE_OBJECT_TYPE_COMMIT) { if (!ostree_repo_mark_commit_partial (data->repo, checksum, FALSE, error)) return FALSE; } - if (!ostree_repo_query_object_storage_size (data->repo, objtype, checksum, - &storage_size, cancellable, error)) - return FALSE; - if (!ostree_repo_delete_object (data->repo, objtype, checksum, cancellable, error)) return FALSE; - data->freed_bytes += storage_size; } + if (OSTREE_OBJECT_TYPE_IS_META (objtype)) data->n_unreachable_meta++; else diff --git a/tests/test-prune.sh b/tests/test-prune.sh index 0f083221..7de372c8 100755 --- a/tests/test-prune.sh +++ b/tests/test-prune.sh @@ -52,6 +52,13 @@ assert_repo_has_n_commits() { assert_streq "$(find ${repo}/objects -name '*.commit' | wc -l)" "${count}" } +# Test --no-prune +objectcount_orig=$(find repo/objects | wc -l) +${CMD_PREFIX} ostree prune --repo=repo --refs-only --depth=0 --no-prune | tee noprune.txt +assert_file_has_content noprune.txt 'Would delete: [1-9][0-9]* objects, freeing [1-9][0-9]*' +objectcount_new=$(find repo/objects | wc -l) +assert_streq "${objectcount_orig}" "${objectcount_new}" + ${CMD_PREFIX} ostree prune --repo=repo --refs-only --depth=2 -v assert_repo_has_n_commits repo 3 find repo/objects -name '*.tombstone-commit' | wc -l > tombstonecommitcount