summary: write the contents to a temporary file

do not write directly to the summary file but use a temporary file
first.  It avoids to create an empty file if "ot_util_variant_save"
fails.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
Giuseppe Scrivano 2015-04-02 11:58:16 +02:00
parent 69184e70e9
commit 362771aa98
1 changed files with 10 additions and 8 deletions

View File

@ -1,6 +1,7 @@
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
* *
* Copyright (C) 2011 Colin Walters <walters@verbum.org> * Copyright (C) 2011 Colin Walters <walters@verbum.org>
* Copyright (C) 2015 Red Hat, Inc.
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
@ -3461,10 +3462,8 @@ out:
* An OSTree repository can contain a high level "summary" file that * An OSTree repository can contain a high level "summary" file that
* describes the available branches and other metadata. * describes the available branches and other metadata.
* *
* It is not regenerated automatically when commits are created; this * It is regenerated automatically after a commit if
* API is available to atomically regenerate the summary after * `core/commit-update-summary` is set.
* multiple commits. It should only be invoked by one process at a
* time.
*/ */
gboolean gboolean
ostree_repo_regenerate_summary (OstreeRepo *self, ostree_repo_regenerate_summary (OstreeRepo *self,
@ -3473,7 +3472,6 @@ ostree_repo_regenerate_summary (OstreeRepo *self,
GError **error) GError **error)
{ {
gboolean ret = FALSE; gboolean ret = FALSE;
gs_unref_object GFile *summary_path = NULL;
gs_unref_hashtable GHashTable *refs = NULL; gs_unref_hashtable GHashTable *refs = NULL;
gs_unref_variant_builder GVariantBuilder *refs_builder = NULL; gs_unref_variant_builder GVariantBuilder *refs_builder = NULL;
gs_unref_variant GVariant *summary = NULL; gs_unref_variant GVariant *summary = NULL;
@ -3516,9 +3514,13 @@ ostree_repo_regenerate_summary (OstreeRepo *self,
g_variant_ref_sink (summary); g_variant_ref_sink (summary);
} }
summary_path = g_file_get_child (self->repodir, "summary"); if (!_ostree_repo_file_replace_contents (self,
self->repo_dir_fd,
if (!ot_util_variant_save (summary_path, summary, cancellable, error)) "summary",
g_variant_get_data (summary),
g_variant_get_size (summary),
cancellable,
error))
goto out; goto out;
ret = TRUE; ret = TRUE;