[ostree] Move basic commit API into ostree_sysroot_simple_write_deployment()



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]