core: Ensure we abort transaction if we fail in the middle

Otherwise we could leave a lot of temp files lying around.
This commit is contained in:
Colin Walters 2012-01-07 11:11:51 -05:00
parent fc1ed105b4
commit 788dfe89e1
2 changed files with 23 additions and 0 deletions

View File

@ -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))
@ -283,6 +286,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);

View File

@ -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;
}
@ -232,12 +237,19 @@ 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);
}
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)