[ostree] Move basic commit API into ostree_sysroot_simple_write_deployment()
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ostree] Move basic commit API into ostree_sysroot_simple_write_deployment()
- Date: Sun, 23 Mar 2014 15:39:15 +0000 (UTC)
commit ffb9d3467164c1e8ec126d1bf265148e1b2374ab
Author: Colin Walters <walters verbum org>
Date: Sun Mar 23 11:36:09 2014 -0400
Move basic commit API into ostree_sysroot_simple_write_deployment()
The admin commands had this shared in tool common, but we want to
encourage external programs to do this as well.
src/libostree/ostree-sysroot.c | 71 +++++++++++++++++++++++++++++++++
src/libostree/ostree-sysroot.h | 13 ++++++
src/ostree/ot-admin-builtin-deploy.c | 7 ++-
src/ostree/ot-admin-builtin-switch.c | 8 ++-
src/ostree/ot-admin-builtin-upgrade.c | 8 ++-
src/ostree/ot-admin-functions.c | 58 ---------------------------
src/ostree/ot-admin-functions.h | 9 ----
7 files changed, 98 insertions(+), 76 deletions(-)
---
diff --git a/src/libostree/ostree-sysroot.c b/src/libostree/ostree-sysroot.c
index 70186a5..0c92f26 100644
--- a/src/libostree/ostree-sysroot.c
+++ b/src/libostree/ostree-sysroot.c
@@ -1029,3 +1029,74 @@ ostree_sysroot_origin_new_from_refspec (OstreeSysroot *sysroot,
g_key_file_set_string (ret, "origin", "refspec", refspec);
return ret;
}
+
+/**
+ * ostree_sysroot_simple_write_deployment:
+ * @sysroot: Sysroot
+ * @osname: (allow-none): OS name
+ * @new_deployment: Prepend this deployment to the list
+ * @merge_deployment: (allow-none): Use this deployment for configuration merge
+ * @flags: Flags controlling behavior
+ * @cancellable: Cancellable
+ * @error: Error
+ *
+ * Prepend @new_deployment to the list of deployments, commit, and
+ * cleanup. By default, all other deployments for the given @osname
+ * except the merge deployment and the booted deployment will be
+ * garbage collected.
+ *
+ * If %OSTREE_SYSROOT_SIMPLE_WRITE_DEPLOYMENT_FLAGS_RETAIN is
+ * specified, then all current deployments will be kept.
+ */
+gboolean
+ostree_sysroot_simple_write_deployment (OstreeSysroot *sysroot,
+ const char *osname,
+ OstreeDeployment *new_deployment,
+ OstreeDeployment *merge_deployment,
+ OstreeSysrootSimpleWriteDeploymentFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ guint i;
+ OstreeDeployment *booted_deployment = NULL;
+ gs_unref_ptrarray GPtrArray *deployments = NULL;
+ gs_unref_ptrarray GPtrArray *new_deployments = g_ptr_array_new_with_free_func (g_object_unref);
+ gboolean retain = (flags & OSTREE_SYSROOT_SIMPLE_WRITE_DEPLOYMENT_FLAGS_RETAIN) > 0;
+
+ deployments = ostree_sysroot_get_deployments (sysroot);
+ booted_deployment = ostree_sysroot_get_booted_deployment (sysroot);
+
+ if (osname == NULL && booted_deployment)
+ osname = ostree_deployment_get_osname (booted_deployment);
+
+ g_ptr_array_add (new_deployments, g_object_ref (new_deployment));
+
+ for (i = 0; i < deployments->len; i++)
+ {
+ OstreeDeployment *deployment = deployments->pdata[i];
+
+ /* Keep deployments with different osnames, as well as the
+ * booted and merge deployments
+ */
+ if (retain ||
+ (osname != NULL &&
+ strcmp (ostree_deployment_get_osname (deployment), osname) != 0) ||
+ ostree_deployment_equal (deployment, booted_deployment) ||
+ ostree_deployment_equal (deployment, merge_deployment))
+ {
+ g_ptr_array_add (new_deployments, g_object_ref (deployment));
+ }
+ }
+
+ if (!ostree_sysroot_write_deployments (sysroot, new_deployments, cancellable, error))
+ goto out;
+
+ if (!ostree_sysroot_cleanup (sysroot, cancellable, error))
+ goto out;
+
+ ret = TRUE;
+ out:
+ return ret;
+}
+
diff --git a/src/libostree/ostree-sysroot.h b/src/libostree/ostree-sysroot.h
index ec4513b..7bfda2c 100644
--- a/src/libostree/ostree-sysroot.h
+++ b/src/libostree/ostree-sysroot.h
@@ -94,5 +94,18 @@ OstreeDeployment *ostree_sysroot_get_merge_deployment (OstreeSysroot *self,
GKeyFile *ostree_sysroot_origin_new_from_refspec (OstreeSysroot *self,
const char *refspec);
+typedef enum {
+ OSTREE_SYSROOT_SIMPLE_WRITE_DEPLOYMENT_FLAGS_NONE = 0,
+ OSTREE_SYSROOT_SIMPLE_WRITE_DEPLOYMENT_FLAGS_RETAIN = (1 << 0)
+} OstreeSysrootSimpleWriteDeploymentFlags;
+
+gboolean ostree_sysroot_simple_write_deployment (OstreeSysroot *sysroot,
+ const char *osname,
+ OstreeDeployment *new_deployment,
+ OstreeDeployment *merge_deployment,
+ OstreeSysrootSimpleWriteDeploymentFlags flags,
+ GCancellable *cancellable,
+ GError **error);
+
G_END_DECLS
diff --git a/src/ostree/ot-admin-builtin-deploy.c b/src/ostree/ot-admin-builtin-deploy.c
index e2e0e1e..b99497f 100644
--- a/src/ostree/ot-admin-builtin-deploy.c
+++ b/src/ostree/ot-admin-builtin-deploy.c
@@ -174,9 +174,10 @@ ot_admin_builtin_deploy (int argc, char **argv, OstreeSysroot *sysroot, GCancell
goto out;
}
- if (!ot_admin_complete_deploy_one (sysroot, opt_osname,
- new_deployment, merge_deployment, opt_retain,
- cancellable, error))
+ if (!ostree_sysroot_simple_write_deployment (sysroot, opt_osname,
+ new_deployment, merge_deployment,
+ opt_retain ?
OSTREE_SYSROOT_SIMPLE_WRITE_DEPLOYMENT_FLAGS_RETAIN : 0,
+ cancellable, error))
goto out;
ret = TRUE;
diff --git a/src/ostree/ot-admin-builtin-switch.c b/src/ostree/ot-admin-builtin-switch.c
index 87f5893..1edd7f5 100644
--- a/src/ostree/ot-admin-builtin-switch.c
+++ b/src/ostree/ot-admin-builtin-switch.c
@@ -148,9 +148,11 @@ ot_admin_builtin_switch (int argc, char **argv, OstreeSysroot *sysroot, GCancell
cancellable, error))
goto out;
- if (!ot_admin_complete_deploy_one (sysroot, opt_osname,
- new_deployment, merge_deployment, FALSE,
- cancellable, error))
+ if (!ostree_sysroot_simple_write_deployment (sysroot, opt_osname,
+ new_deployment,
+ merge_deployment,
+ 0,
+ cancellable, error))
goto out;
if (!ostree_repo_prepare_transaction (repo, NULL, cancellable, error))
diff --git a/src/ostree/ot-admin-builtin-upgrade.c b/src/ostree/ot-admin-builtin-upgrade.c
index 16a4073..badaf2e 100644
--- a/src/ostree/ot-admin-builtin-upgrade.c
+++ b/src/ostree/ot-admin-builtin-upgrade.c
@@ -176,9 +176,11 @@ ot_admin_builtin_upgrade (int argc, char **argv, OstreeSysroot *sysroot, GCancel
cancellable, error))
goto out;
- if (!ot_admin_complete_deploy_one (sysroot, opt_osname,
- new_deployment, merge_deployment, FALSE,
- cancellable, error))
+ if (!ostree_sysroot_simple_write_deployment (sysroot, opt_osname,
+ new_deployment,
+ merge_deployment,
+ 0,
+ cancellable, error))
goto out;
if (opt_reboot && g_file_equal (ostree_sysroot_get_path (sysroot), real_sysroot))
diff --git a/src/ostree/ot-admin-functions.c b/src/ostree/ot-admin-functions.c
index 6b54fb2..198f3e4 100644
--- a/src/ostree/ot-admin-functions.c
+++ b/src/ostree/ot-admin-functions.c
@@ -50,64 +50,6 @@ ot_admin_require_booted_deployment_or_osname (OstreeSysroot *sysroot,
}
gboolean
-ot_admin_complete_deploy_one (OstreeSysroot *sysroot,
- const char *osname,
- OstreeDeployment *new_deployment,
- OstreeDeployment *merge_deployment,
- gboolean opt_retain,
- GCancellable *cancellable,
- GError **error)
-{
- gboolean ret = FALSE;
- guint i;
- OstreeDeployment *booted_deployment = NULL;
- gs_unref_ptrarray GPtrArray *deployments = NULL;
- gs_unref_ptrarray GPtrArray *new_deployments = g_ptr_array_new_with_free_func (g_object_unref);
-
- deployments = ostree_sysroot_get_deployments (sysroot);
- booted_deployment = ostree_sysroot_get_booted_deployment (sysroot);
-
- if (osname == NULL && booted_deployment)
- osname = ostree_deployment_get_osname (booted_deployment);
-
- g_ptr_array_add (new_deployments, g_object_ref (new_deployment));
-
- for (i = 0; i < deployments->len; i++)
- {
- OstreeDeployment *deployment = deployments->pdata[i];
-
- /* Keep deployments with different osnames, as well as the
- * booted and merge deployments
- */
- if (opt_retain ||
- (osname != NULL &&
- strcmp (ostree_deployment_get_osname (deployment), osname) != 0) ||
- ostree_deployment_equal (deployment, booted_deployment) ||
- ostree_deployment_equal (deployment, merge_deployment))
- {
- g_ptr_array_add (new_deployments, g_object_ref (deployment));
- }
- else
- {
- g_print ("ostadmin: Will delete deployment osname=%s %s.%u\n",
- ostree_deployment_get_osname (deployment),
- ostree_deployment_get_csum (deployment),
- ostree_deployment_get_deployserial (deployment));
- }
- }
-
- if (!ostree_sysroot_write_deployments (sysroot, new_deployments, cancellable, error))
- goto out;
-
- if (!ostree_sysroot_cleanup (sysroot, cancellable, error))
- goto out;
-
- ret = TRUE;
- out:
- return ret;
-}
-
-gboolean
ot_admin_deploy_prepare (OstreeSysroot *sysroot,
const char *osname,
OstreeDeployment **out_merge_deployment,
diff --git a/src/ostree/ot-admin-functions.h b/src/ostree/ot-admin-functions.h
index d42c974..8d90371 100644
--- a/src/ostree/ot-admin-functions.h
+++ b/src/ostree/ot-admin-functions.h
@@ -43,14 +43,5 @@ ot_admin_deploy_prepare (OstreeSysroot *sysroot,
GCancellable *cancellable,
GError **error);
-gboolean
-ot_admin_complete_deploy_one (OstreeSysroot *sysroot,
- const char *osname,
- OstreeDeployment *new_deployment,
- OstreeDeployment *merge_deployment,
- gboolean opt_retain,
- GCancellable *cancellable,
- GError **error);
-
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]