[ostree] Add ostree_repo_remote_list()



commit 39be27fc93926c8ecede26d10385673100b8540f
Author: Matthew Barnes <mbarnes redhat com>
Date:   Tue Dec 16 10:29:09 2014 -0500

    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(+), 0 deletions(-)
---
diff --git a/doc/ostree-sections.txt b/doc/ostree-sections.txt
index dcdf40b..897d389 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 fb4ff91..9d58122 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 7320f2c..ce786b1 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,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]