Add ostree_repo_is_writable()

This commit is contained in:
Matthew Barnes 2015-01-18 20:27:53 -05:00 committed by Colin Walters
parent f89032f581
commit a25c7fab12
4 changed files with 33 additions and 0 deletions

View File

@ -217,6 +217,7 @@ ostree_repo_new_default
ostree_repo_open
ostree_repo_set_disable_fsync
ostree_repo_is_system
ostree_repo_is_writable
ostree_repo_create
ostree_repo_get_path
ostree_repo_get_mode

View File

@ -65,6 +65,7 @@ struct OstreeRepo {
gboolean inited;
gboolean writable;
GError *writable_error;
gboolean in_transaction;
gboolean disable_fsync;
GHashTable *loose_object_devino_hash;

View File

@ -381,6 +381,7 @@ ostree_repo_finalize (GObject *object)
g_clear_pointer (&self->txn_refs, g_hash_table_destroy);
g_clear_pointer (&self->cached_meta_indexes, (GDestroyNotify) g_ptr_array_unref);
g_clear_pointer (&self->cached_content_indexes, (GDestroyNotify) g_ptr_array_unref);
g_clear_error (&self->writable_error);
g_clear_pointer (&self->object_sizes, (GDestroyNotify) g_hash_table_unref);
g_mutex_clear (&self->cache_lock);
g_mutex_clear (&self->txn_stats_lock);
@ -551,6 +552,28 @@ ostree_repo_is_system (OstreeRepo *repo)
return g_file_equal (repo->repodir, default_repo_path);
}
/**
* ostree_repo_is_writable:
* @self: Repo
* @error: a #GError
*
* Returns whether the repository is writable by the current user.
* If the repository is not writable, the @error indicates why.
*
* Returns: %TRUE if this repository is writable
*/
gboolean
ostree_repo_is_writable (OstreeRepo *self,
GError **error)
{
g_return_val_if_fail (self->inited, FALSE);
if (error != NULL && self->writable_error != NULL)
*error = g_error_copy (self->writable_error);
return self->writable;
}
/**
* ostree_repo_get_config:
* @self:
@ -1339,6 +1362,11 @@ ostree_repo_open (OstreeRepo *self,
}
self->writable = faccessat (self->objects_dir_fd, ".", W_OK, 0) == 0;
if (!self->writable)
{
/* This is returned through ostree_repo_is_writable(). */
gs_set_error_from_errno (&self->writable_error, errno);
}
if (fstat (self->objects_dir_fd, &stbuf) != 0)
{

View File

@ -55,6 +55,9 @@ void ostree_repo_set_disable_fsync (OstreeRepo *self,
gboolean ostree_repo_is_system (OstreeRepo *repo);
gboolean ostree_repo_is_writable (OstreeRepo *self,
GError **error);
gboolean ostree_repo_create (OstreeRepo *self,
OstreeRepoMode mode,
GCancellable *cancellable,