repo: Add a private helper to replace a file, honoring fsync policy

Extracted from discussion in https://github.com/GNOME/ostree/pull/83
This commit is contained in:
Colin Walters 2015-04-13 13:28:02 -04:00
parent 1892a6fe13
commit fff8ffdd2f
3 changed files with 28 additions and 3 deletions

View File

@ -126,6 +126,15 @@ _ostree_repo_update_refs (OstreeRepo *self,
GCancellable *cancellable, GCancellable *cancellable,
GError **error); GError **error);
gboolean
_ostree_repo_file_replace_contents (OstreeRepo *self,
int dfd,
const char *path,
guint8 *buf,
gsize len,
GCancellable *cancellable,
GError **error);
gboolean gboolean
_ostree_repo_write_ref (OstreeRepo *self, _ostree_repo_write_ref (OstreeRepo *self,
const char *remote, const char *remote,

View File

@ -106,9 +106,8 @@ write_checksum_file_at (OstreeRepo *self,
bufnl[l] = '\n'; bufnl[l] = '\n';
bufnl[l+1] = '\0'; bufnl[l+1] = '\0';
if (!glnx_file_replace_contents_at (dfd, name, (guint8*)bufnl, l + 1, if (!_ostree_repo_file_replace_contents (self, dfd, name, (guint8*)bufnl, l + 1,
self->disable_fsync ? GLNX_FILE_REPLACE_NODATASYNC : GLNX_FILE_REPLACE_DATASYNC_NEW, cancellable, error))
cancellable, error))
goto out; goto out;
} }

View File

@ -1502,6 +1502,23 @@ ostree_repo_set_disable_fsync (OstreeRepo *self,
} }
/* Replace the contents of a file, honoring the repository's fsync
* policy.
*/
gboolean
_ostree_repo_file_replace_contents (OstreeRepo *self,
int dfd,
const char *path,
guint8 *buf,
gsize len,
GCancellable *cancellable,
GError **error)
{
return glnx_file_replace_contents_at (dfd, path, buf, len,
self->disable_fsync ? GLNX_FILE_REPLACE_NODATASYNC : GLNX_FILE_REPLACE_DATASYNC_NEW,
cancellable, error);
}
/** /**
* ostree_repo_get_path: * ostree_repo_get_path:
* @self: * @self: