From 39be27fc93926c8ecede26d10385673100b8540f Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 16 Dec 2014 10:29:09 -0500 Subject: [PATCH] Add ostree_repo_remote_list() Lists available remote names. --- doc/ostree-sections.txt | 1 + src/libostree/ostree-repo.c | 48 +++++++++++++++++++++++++++++++++++++ src/libostree/ostree-repo.h | 3 +++ 3 files changed, 52 insertions(+) diff --git a/doc/ostree-sections.txt b/doc/ostree-sections.txt index dcdf40bf..897d389b 100644 --- a/doc/ostree-sections.txt +++ b/doc/ostree-sections.txt @@ -61,6 +61,7 @@ ostree_repo_get_mode ostree_repo_mode_from_string ostree_repo_get_config ostree_repo_copy_config +ostree_repo_remote_list ostree_repo_get_parent ostree_repo_write_config OstreeRepoTransactionStats diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c index fb4ff91c..9d581224 100644 --- a/src/libostree/ostree-repo.c +++ b/src/libostree/ostree-repo.c @@ -880,6 +880,54 @@ ostree_repo_remote_change (OstreeRepo *self, g_assert_not_reached (); } +/** + * ostree_repo_remote_list: + * @self: Repo + * @out_n_remotes: (out) (allow-none): Number of remotes available + * + * List available remote names in an #OstreeRepo. Remote names are sorted + * alphabetically. If no remotes are available the function returns %NULL. + * + * Returns: (array length=out_n_remotes) (transfer full): a %NULL-terminated + * array of remote names + **/ +char ** +ostree_repo_remote_list (OstreeRepo *self, + guint *out_n_remotes) +{ + char **remotes = NULL; + guint n_remotes; + + g_mutex_lock (&self->remotes_lock); + + n_remotes = g_hash_table_size (self->remotes); + + if (n_remotes > 0) + { + GList *list, *link; + guint ii = 0; + + remotes = g_new (char *, n_remotes + 1); + + list = g_hash_table_get_keys (self->remotes); + list = g_list_sort (list, (GCompareFunc) strcmp); + + for (link = list; link != NULL; link = link->next) + remotes[ii++] = g_strdup (link->data); + + g_list_free (list); + + remotes[ii] = NULL; + } + + g_mutex_unlock (&self->remotes_lock); + + if (out_n_remotes) + *out_n_remotes = n_remotes; + + return remotes; +} + /** * ostree_repo_remote_get_url: * @self: Repo diff --git a/src/libostree/ostree-repo.h b/src/libostree/ostree-repo.h index 7320f2c7..ce786b19 100644 --- a/src/libostree/ostree-repo.h +++ b/src/libostree/ostree-repo.h @@ -95,6 +95,9 @@ gboolean ostree_repo_remote_change (OstreeRepo *self, GCancellable *cancellable, GError **error); +char ** ostree_repo_remote_list (OstreeRepo *self, + guint *out_n_remotes); + gboolean ostree_repo_remote_get_url (OstreeRepo *self, const char *name, char **out_url,