summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2014-12-16 10:29:09 -0500
committerMatthew Barnes <mbarnes@redhat.com>2014-12-17 16:05:37 -0500
commit39be27fc93926c8ecede26d10385673100b8540f (patch)
tree8a9e8ffe7a8afab7ea7cd29fb8fcc55618ae22a3
parentfd07a6a8629d24012be7cb5f343ffa638e1f6120 (diff)
downloadostree-39be27fc93926c8ecede26d10385673100b8540f.tar.gz
Add ostree_repo_remote_list()
Lists available remote names.
-rw-r--r--doc/ostree-sections.txt1
-rw-r--r--src/libostree/ostree-repo.c48
-rw-r--r--src/libostree/ostree-repo.h3
3 files changed, 52 insertions, 0 deletions
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
@@ -881,6 +881,54 @@ ostree_repo_remote_change (OstreeRepo *self,
}
/**
+ * 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
* @name: Name of remote
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,