[ostree] core: Ensure we abort transaction if we fail in the middle



commit 788dfe89e1aae7f1958606d8af109652d53692f5
Author: Colin Walters <walters verbum org>
Date:   Sat Jan 7 11:11:51 2012 -0500

    core: Ensure we abort transaction if we fail in the middle
    
    Otherwise we could leave a lot of temp files lying around.

 src/ostree/ot-builtin-commit.c  |   11 +++++++++++
 src/ostree/ot-builtin-compose.c |   12 ++++++++++++
 2 files changed, 23 insertions(+), 0 deletions(-)
---
diff --git a/src/ostree/ot-builtin-commit.c b/src/ostree/ot-builtin-commit.c
index 8b79118..be58f19 100644
--- a/src/ostree/ot-builtin-commit.c
+++ b/src/ostree/ot-builtin-commit.c
@@ -81,6 +81,7 @@ ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GError **error)
   GVariantBuilder metadata_builder;
   gboolean metadata_builder_initialized = FALSE;
   gboolean skip_commit = FALSE;
+  gboolean in_transaction = FALSE;
 
   context = g_option_context_new ("[ARG] - Commit a new revision");
   g_option_context_add_main_entries (context, options, NULL);
@@ -180,6 +181,8 @@ ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GError **error)
   if (!ostree_repo_prepare_transaction (repo, cancellable, error))
     goto out;
 
+  in_transaction = TRUE;
+
   mtree = ostree_mutable_tree_new ();
 
   if (argc == 1 && (trees == NULL || trees[0] == NULL))
@@ -282,6 +285,8 @@ ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GError **error)
 
       if (!ostree_repo_commit_transaction (repo, cancellable, error))
         goto out;
+
+      in_transaction = FALSE;
       
       if (!ostree_repo_write_ref (repo, NULL, branch, commit_checksum, error))
         goto out;
@@ -293,11 +298,17 @@ ostree_builtin_commit (int argc, char **argv, GFile *repo_path, GError **error)
       if (!ostree_repo_abort_transaction (repo, cancellable, error))
         goto out;
 
+      in_transaction = FALSE;
+
       g_print ("%s\n", parent);
     }
 
   ret = TRUE;
  out:
+  if (in_transaction)
+    {
+      (void) ostree_repo_abort_transaction (repo, cancellable, NULL);
+    }
   if (metadata_builder_initialized)
     g_variant_builder_clear (&metadata_builder);
   g_clear_object (&arg);
diff --git a/src/ostree/ot-builtin-compose.c b/src/ostree/ot-builtin-compose.c
index 15e1bb8..3fc18b3 100644
--- a/src/ostree/ot-builtin-compose.c
+++ b/src/ostree/ot-builtin-compose.c
@@ -94,6 +94,7 @@ ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error)
   GFile *metadata_f = NULL;
   OstreeMutableTree *mtree = NULL;
   gboolean skip_commit = FALSE;
+  gboolean in_transaction = FALSE;
   int i;
 
   context = g_option_context_new ("BRANCH1 BRANCH2 ... - Merge multiple commits into a single commit tree");
@@ -136,6 +137,8 @@ ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error)
   if (!ostree_repo_prepare_transaction (repo, cancellable, error))
     goto out;
 
+  in_transaction = TRUE;
+
   mtree = ostree_mutable_tree_new ();
 
   if (recompose)
@@ -224,6 +227,8 @@ ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error)
       if (!ostree_repo_commit_transaction (repo, cancellable, error))
         goto out;
 
+      in_transaction = FALSE;
+
       if (!ostree_repo_write_ref (repo, NULL, branch, commit_checksum, error))
         goto out;
     }
@@ -231,6 +236,8 @@ ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error)
     {
       if (!ostree_repo_abort_transaction (repo, cancellable, error))
         goto out;
+
+      in_transaction = FALSE;
       
       g_print ("%s\n", parent);
     }
@@ -238,6 +245,11 @@ ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error)
   ret = TRUE;
   g_print ("%s\n", commit_checksum);
  out:
+  if (in_transaction)
+    {
+      (void) ostree_repo_abort_transaction (repo, cancellable, NULL);
+    }
+
   if (compose_metadata_builder_initialized)
     g_variant_builder_clear (&compose_metadata_builder);
   if (commit_metadata_builder_initialized)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]