From 5d413dff882efe1ee4faa6e4642d5b04598c01b8 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Mon, 20 Mar 2017 10:35:40 -0400 Subject: [PATCH] sysroot: Prep refactoring of cleanup logic For future work I'm going to tweak how we handle cleanup, and the private cleanup flags didn't really end up being used - we only specify "prune repo or not". So fold that into a boolean for now. The sysroot deploy logic then has a single "do_postclean" boolean, which is all I want to expose as public API. Closes: #744 Approved by: jlebon --- src/libostree/ostree-sysroot-cleanup.c | 53 +++++++++----------------- src/libostree/ostree-sysroot-deploy.c | 15 ++++---- src/libostree/ostree-sysroot-private.h | 17 +++------ src/libostree/ostree-sysroot.c | 3 +- 4 files changed, 31 insertions(+), 57 deletions(-) diff --git a/src/libostree/ostree-sysroot-cleanup.c b/src/libostree/ostree-sysroot-cleanup.c index 2a78d2ce..022654c3 100644 --- a/src/libostree/ostree-sysroot-cleanup.c +++ b/src/libostree/ostree-sysroot-cleanup.c @@ -515,12 +515,7 @@ ostree_sysroot_cleanup (OstreeSysroot *self, GCancellable *cancellable, GError **error) { - OstreeSysrootCleanupFlags flags; - - /* Do everything. */ - flags = OSTREE_SYSROOT_CLEANUP_ALL; - - return _ostree_sysroot_piecemeal_cleanup (self, flags, cancellable, error); + return _ostree_sysroot_cleanup_internal (self, TRUE, cancellable, error); } /** @@ -537,55 +532,41 @@ ostree_sysroot_prepare_cleanup (OstreeSysroot *self, GCancellable *cancellable, GError **error) { - OstreeSysrootCleanupFlags flags; - - /* Do everything EXCEPT pruning the repository. */ - flags = OSTREE_SYSROOT_CLEANUP_ALL & ~OSTREE_SYSROOT_CLEANUP_PRUNE_REPO; - - return _ostree_sysroot_piecemeal_cleanup (self, flags, cancellable, error); + return _ostree_sysroot_cleanup_internal (self, FALSE, cancellable, error); } gboolean -_ostree_sysroot_piecemeal_cleanup (OstreeSysroot *self, - OstreeSysrootCleanupFlags flags, - GCancellable *cancellable, - GError **error) +_ostree_sysroot_cleanup_internal (OstreeSysroot *self, + gboolean do_prune_repo, + GCancellable *cancellable, + GError **error) { - gboolean ret = FALSE; glnx_unref_object OstreeRepo *repo = NULL; g_return_val_if_fail (OSTREE_IS_SYSROOT (self), FALSE); g_return_val_if_fail (self->loaded, FALSE); - if (flags & OSTREE_SYSROOT_CLEANUP_BOOTVERSIONS) - { - if (!cleanup_other_bootversions (self, cancellable, error)) - goto out; - } + if (!cleanup_other_bootversions (self, cancellable, error)) + return FALSE; - if (flags & OSTREE_SYSROOT_CLEANUP_DEPLOYMENTS) - { - if (!cleanup_old_deployments (self, cancellable, error)) - goto out; - } + if (!cleanup_old_deployments (self, cancellable, error)) + return FALSE; if (!ostree_sysroot_get_repo (self, &repo, cancellable, error)) - goto out; - + return FALSE; + if (!generate_deployment_refs (self, repo, self->bootversion, self->subbootversion, self->deployments, cancellable, error)) - goto out; - - if (flags & OSTREE_SYSROOT_CLEANUP_PRUNE_REPO) + return FALSE; + + if (do_prune_repo) { if (!prune_repo (repo, cancellable, error)) - goto out; + return FALSE; } - ret = TRUE; - out: - return ret; + return TRUE; } diff --git a/src/libostree/ostree-sysroot-deploy.c b/src/libostree/ostree-sysroot-deploy.c index 2321cbba..6bf01a16 100644 --- a/src/libostree/ostree-sysroot-deploy.c +++ b/src/libostree/ostree-sysroot-deploy.c @@ -1703,14 +1703,13 @@ ostree_sysroot_write_deployments (OstreeSysroot *self, GError **error) { return _ostree_sysroot_write_deployments_internal (self, new_deployments, - OSTREE_SYSROOT_CLEANUP_ALL, - cancellable, error); + TRUE, cancellable, error); } gboolean _ostree_sysroot_write_deployments_internal (OstreeSysroot *self, GPtrArray *new_deployments, - OstreeSysrootCleanupFlags cleanup_flags, + gboolean do_clean, GCancellable *cancellable, GError **error) { @@ -1938,11 +1937,13 @@ _ostree_sysroot_write_deployments_internal (OstreeSysroot *self, /* And finally, cleanup of any leftover data. */ - if (!_ostree_sysroot_piecemeal_cleanup (self, cleanup_flags, - cancellable, error)) + if (do_clean) { - g_prefix_error (error, "Performing final cleanup: "); - goto out; + if (!ostree_sysroot_cleanup (self, cancellable, error)) + { + g_prefix_error (error, "Performing final cleanup: "); + goto out; + } } ret = TRUE; diff --git a/src/libostree/ostree-sysroot-private.h b/src/libostree/ostree-sysroot-private.h index b2def7fa..18fc0cb0 100644 --- a/src/libostree/ostree-sysroot-private.h +++ b/src/libostree/ostree-sysroot-private.h @@ -109,21 +109,14 @@ gboolean _ostree_sysroot_query_bootloader (OstreeSysroot *sysroot, gboolean _ostree_sysroot_bump_mtime (OstreeSysroot *sysroot, GError **error); -typedef enum { - OSTREE_SYSROOT_CLEANUP_BOOTVERSIONS = 1 << 0, - OSTREE_SYSROOT_CLEANUP_DEPLOYMENTS = 1 << 1, - OSTREE_SYSROOT_CLEANUP_PRUNE_REPO = 1 << 2, - OSTREE_SYSROOT_CLEANUP_ALL = 0xffff -} OstreeSysrootCleanupFlags; - -gboolean _ostree_sysroot_piecemeal_cleanup (OstreeSysroot *sysroot, - OstreeSysrootCleanupFlags flags, - GCancellable *cancellable, - GError **error); +gboolean _ostree_sysroot_cleanup_internal (OstreeSysroot *sysroot, + gboolean prune_repo, + GCancellable *cancellable, + GError **error); gboolean _ostree_sysroot_write_deployments_internal (OstreeSysroot *self, GPtrArray *new_deployments, - OstreeSysrootCleanupFlags cleanup_flags, + gboolean do_clean, GCancellable *cancellable, GError **error); diff --git a/src/libostree/ostree-sysroot.c b/src/libostree/ostree-sysroot.c index 238ee74a..575cb6df 100644 --- a/src/libostree/ostree-sysroot.c +++ b/src/libostree/ostree-sysroot.c @@ -1604,8 +1604,7 @@ ostree_sysroot_simple_write_deployment (OstreeSysroot *sysroot, } if (!_ostree_sysroot_write_deployments_internal (sysroot, new_deployments, - postclean ? OSTREE_SYSROOT_CLEANUP_ALL : 0, - cancellable, error)) + postclean, cancellable, error)) goto out; ret = TRUE;