[ostree: 65/70] Add remotes-config-dir to OstreeRepo
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ostree: 65/70] Add remotes-config-dir to OstreeRepo
- Date: Fri, 15 Apr 2016 21:06:43 +0000 (UTC)
commit c86e4f0c9015f1de0a24f66c0cb8c7b93bb1c598
Author: Alexander Larsson <alexl redhat com>
Date: Fri Apr 8 16:59:12 2016 +0200
Add remotes-config-dir to OstreeRepo
This allows you to replace the default
$sysroot/$sysconfdir/ostree/repos.d string value, and to use a similar
feature for repos that are not the system repo.
In particular, this allows us to support /etc/xdg-app/remotes.d for
xdg-app.
Closes: #247
Approved by: cgwalters
src/libostree/ostree-repo-private.h | 1 +
src/libostree/ostree-repo.c | 43 +++++++++++++++++++++++++++-------
2 files changed, 35 insertions(+), 9 deletions(-)
---
diff --git a/src/libostree/ostree-repo-private.h b/src/libostree/ostree-repo-private.h
index a2a9969..6a9092e 100644
--- a/src/libostree/ostree-repo-private.h
+++ b/src/libostree/ostree-repo-private.h
@@ -63,6 +63,7 @@ struct OstreeRepo {
int uncompressed_objects_dir_fd;
GFile *config_file;
GFile *sysroot_dir;
+ char *remotes_config_dir;
GFile *transaction_lock_path;
GHashTable *txn_refs;
diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c
index 495e226..72a2543 100644
--- a/src/libostree/ostree-repo.c
+++ b/src/libostree/ostree-repo.c
@@ -88,6 +88,7 @@ enum {
PROP_0,
PROP_PATH,
+ PROP_REMOTES_CONFIG_DIR,
PROP_SYSROOT_PATH
};
@@ -625,6 +626,7 @@ ostree_repo_finalize (GObject *object)
(void) close (self->uncompressed_objects_dir_fd);
g_clear_object (&self->config_file);
g_clear_object (&self->sysroot_dir);
+ g_free (self->remotes_config_dir);
g_clear_object (&self->transaction_lock_path);
@@ -664,6 +666,9 @@ ostree_repo_set_property(GObject *object,
case PROP_SYSROOT_PATH:
self->sysroot_dir = g_value_dup_object (value);
break;
+ case PROP_REMOTES_CONFIG_DIR:
+ self->remotes_config_dir = g_value_dup_string (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -686,6 +691,9 @@ ostree_repo_get_property(GObject *object,
case PROP_SYSROOT_PATH:
g_value_set_object (value, self->sysroot_dir);
break;
+ case PROP_REMOTES_CONFIG_DIR:
+ g_value_set_string (value, self->remotes_config_dir);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -739,6 +747,13 @@ ostree_repo_class_init (OstreeRepoClass *klass)
"",
G_TYPE_FILE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (object_class,
+ PROP_REMOTES_CONFIG_DIR,
+ g_param_spec_string ("remotes-config-dir",
+ "",
+ "",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
/**
* OstreeRepo::gpg-verify-result:
@@ -2315,19 +2330,32 @@ append_one_remote_config (OstreeRepo *self,
out:
return ret;
}
-
+
+static GFile *
+get_remotes_d_dir (OstreeRepo *self)
+{
+ if (self->remotes_config_dir != NULL)
+ return g_file_resolve_relative_path (self->sysroot_dir, self->remotes_config_dir);
+ else if (ostree_repo_is_system (self))
+ return g_file_resolve_relative_path (self->sysroot_dir, SYSCONF_REMOTES);
+
+ return NULL;
+}
+
static gboolean
append_remotes_d (OstreeRepo *self,
GCancellable *cancellable,
GError **error)
{
gboolean ret = FALSE;
- g_autoptr(GFile) etc_ostree_remotes_d = NULL;
+ g_autoptr(GFile) remotes_d = NULL;
g_autoptr(GFileEnumerator) direnum = NULL;
- etc_ostree_remotes_d = g_file_resolve_relative_path (self->sysroot_dir, SYSCONF_REMOTES);
+ remotes_d = get_remotes_d_dir (self);
+ if (remotes_d == NULL)
+ return TRUE;
- if (!enumerate_directory_allow_noent (etc_ostree_remotes_d, OSTREE_GIO_FAST_QUERYINFO, 0,
+ if (!enumerate_directory_allow_noent (remotes_d, OSTREE_GIO_FAST_QUERYINFO, 0,
&direnum,
cancellable, error))
goto out;
@@ -2502,11 +2530,8 @@ ostree_repo_open (OstreeRepo *self,
ostree_repo_set_disable_fsync (self, TRUE);
}
- if (ostree_repo_is_system (self))
- {
- if (!append_remotes_d (self, cancellable, error))
- goto out;
- }
+ if (!append_remotes_d (self, cancellable, error))
+ goto out;
if (!glnx_opendirat (self->repo_dir_fd, "tmp", TRUE, &self->tmp_dir_fd, error))
goto out;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]