From 7ead3c1aa83c1282bd583e2c3e1e610225987ac5 Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Thu, 28 Jun 2018 15:18:27 -0400 Subject: [PATCH] sysroot: Reject attempts to pin the staged deployment From https://github.com/projectatomic/rpm-ostree/pull/1434#discussion_r198936674 To support it we'd have to actually write it to disk, which...let's not try that right now. Closes: #1660 Approved by: jlebon --- src/libostree/ostree-sysroot.c | 6 +++++- tests/installed/destructive/staged-deploy.yml | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/libostree/ostree-sysroot.c b/src/libostree/ostree-sysroot.c index 707b161f..4b2c654c 100644 --- a/src/libostree/ostree-sysroot.c +++ b/src/libostree/ostree-sysroot.c @@ -1894,7 +1894,8 @@ ostree_sysroot_deployment_unlock (OstreeSysroot *self, * for e.g. older versions of libostree unaware of pinning to GC the deployment. * * This function does nothing and returns successfully if the deployment - * is already in the desired pinning state. + * is already in the desired pinning state. It is an error to try to pin + * the staged deployment (as it's not in the bootloader entries). * * Since: 2018.3 */ @@ -1908,6 +1909,9 @@ ostree_sysroot_deployment_set_pinned (OstreeSysroot *self, if (is_pinned == current_pin) return TRUE; + if (ostree_deployment_is_staged (deployment)) + return glnx_throw (error, "Cannot pin staged deployment"); + g_autoptr(OstreeDeployment) deployment_clone = ostree_deployment_clone (deployment); GKeyFile *origin_clone = ostree_deployment_get_origin (deployment_clone); diff --git a/tests/installed/destructive/staged-deploy.yml b/tests/installed/destructive/staged-deploy.yml index f34550a2..8802fb1b 100644 --- a/tests/installed/destructive/staged-deploy.yml +++ b/tests/installed/destructive/staged-deploy.yml @@ -21,6 +21,10 @@ done test -f deployment-ref-found rm deployment-ref-found + if ostree admin pin 0 2>err.txt; then + echo "Pinned staged deployment"; exit 1 + fi + grep -qFe 'Cannot pin staged deployment' err.txt environment: commit: "{{ rpmostree_status['deployments'][0]['checksum'] }}" - include_tasks: ../tasks/reboot.yml