ostree-repo: new public function `ostree_repo_list_refs_ext`

It accepts a `flags` argument to control its behavior.  Differently
from `ostree_repo_list_refs`, the `refspec_prefix` is not removed from
the results.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
Giuseppe Scrivano 2016-03-02 09:58:38 +01:00 committed by Colin Walters
parent 5d463ba577
commit 898c7b6577
4 changed files with 77 additions and 20 deletions

View File

@ -260,6 +260,7 @@ ostree_repo_write_content_async
ostree_repo_write_content_finish ostree_repo_write_content_finish
ostree_repo_resolve_rev ostree_repo_resolve_rev
ostree_repo_list_refs ostree_repo_list_refs
ostree_repo_list_refs_ext
ostree_repo_remote_list_refs ostree_repo_remote_list_refs
ostree_repo_load_variant ostree_repo_load_variant
ostree_repo_load_commit ostree_repo_load_commit

View File

@ -315,4 +315,5 @@ local:
LIBOSTREE_2016.4 { LIBOSTREE_2016.4 {
global: global:
ostree_repo_get_dfd; ostree_repo_get_dfd;
ostree_repo_list_refs_ext;
} LIBOSTREE_2016.3; } LIBOSTREE_2016.3;

View File

@ -508,24 +508,13 @@ enumerate_refs_recurse (OstreeRepo *repo,
return ret; return ret;
} }
/** static gboolean
* ostree_repo_list_refs: _ostree_repo_list_refs_internal (OstreeRepo *self,
* @self: Repo gboolean cut_prefix,
* @refspec_prefix: (allow-none): Only list refs which match this prefix const char *refspec_prefix,
* @out_all_refs: (out) (element-type utf8 utf8): Mapping from ref to checksum GHashTable **out_all_refs,
* @cancellable: Cancellable GCancellable *cancellable,
* @error: Error GError **error)
*
* If @refspec_prefix is %NULL, list all local and remote refspecs,
* with their current values in @out_all_refs. Otherwise, only list
* refspecs which have @refspec_prefix as a prefix.
*/
gboolean
ostree_repo_list_refs (OstreeRepo *self,
const char *refspec_prefix,
GHashTable **out_all_refs,
GCancellable *cancellable,
GError **error)
{ {
gboolean ret = FALSE; gboolean ret = FALSE;
g_autoptr(GHashTable) ret_all_refs = NULL; g_autoptr(GHashTable) ret_all_refs = NULL;
@ -568,12 +557,14 @@ ostree_repo_list_refs (OstreeRepo *self,
{ {
glnx_fd_close int base_fd = -1; glnx_fd_close int base_fd = -1;
g_autoptr(GString) base_path = g_string_new (""); g_autoptr(GString) base_path = g_string_new ("");
if (!cut_prefix)
g_string_printf (base_path, "%s/", ref_prefix);
if (!glnx_opendirat (self->repo_dir_fd, path, TRUE, &base_fd, error)) if (!glnx_opendirat (self->repo_dir_fd, cut_prefix ? path : prefix_path, TRUE, &base_fd, error))
goto out; goto out;
if (!enumerate_refs_recurse (self, remote, base_fd, base_path, if (!enumerate_refs_recurse (self, remote, base_fd, base_path,
base_fd, ".", base_fd, cut_prefix ? "." : ref_prefix,
ret_all_refs, cancellable, error)) ret_all_refs, cancellable, error))
goto out; goto out;
} }
@ -639,6 +630,54 @@ ostree_repo_list_refs (OstreeRepo *self,
return ret; return ret;
} }
/**
* ostree_repo_list_refs:
* @self: Repo
* @refspec_prefix: (allow-none): Only list refs which match this prefix
* @out_all_refs: (out) (element-type utf8 utf8): Mapping from ref to checksum
* @cancellable: Cancellable
* @error: Error
*
* If @refspec_prefix is %NULL, list all local and remote refspecs,
* with their current values in @out_all_refs. Otherwise, only list
* refspecs which have @refspec_prefix as a prefix.
*/
gboolean
ostree_repo_list_refs (OstreeRepo *self,
const char *refspec_prefix,
GHashTable **out_all_refs,
GCancellable *cancellable,
GError **error)
{
return _ostree_repo_list_refs_internal (self, TRUE, refspec_prefix, out_all_refs, cancellable, error);
}
/**
* ostree_repo_list_refs_ext:
* @self: Repo
* @refspec_prefix: (allow-none): Only list refs which match this prefix
* @out_all_refs: (out) (element-type utf8 utf8): Mapping from ref to checksum
* @flags: Options controlling listing behavior
* @cancellable: Cancellable
* @error: Error
*
* If @refspec_prefix is %NULL, list all local and remote refspecs,
* with their current values in @out_all_refs. Otherwise, only list
* refspecs which have @refspec_prefix as a prefix. Differently from
* ostree_repo_list_refs(), the prefix will not be removed from the ref
* name.
*/
gboolean
ostree_repo_list_refs_ext (OstreeRepo *self,
const char *refspec_prefix,
GHashTable **out_all_refs,
OstreeRepoListRefsExtFlags flags,
GCancellable *cancellable,
GError **error)
{
return _ostree_repo_list_refs_internal (self, FALSE, refspec_prefix, out_all_refs, cancellable, error);
}
/** /**
* ostree_repo_remote_list_refs: * ostree_repo_remote_list_refs:
* @self: Repo * @self: Repo

View File

@ -342,6 +342,22 @@ gboolean ostree_repo_list_refs (OstreeRepo *self,
GCancellable *cancellable, GCancellable *cancellable,
GError **error); GError **error);
/**
* OstreeRepoListRefsExtFlags:
* @OSTREE_REPO_LIST_REFS_EXT_NONE: No flags.
*/
typedef enum {
OSTREE_REPO_LIST_REFS_EXT_NONE = 0,
} OstreeRepoListRefsExtFlags;
_OSTREE_PUBLIC
gboolean ostree_repo_list_refs_ext (OstreeRepo *self,
const char *refspec_prefix,
GHashTable **out_all_refs,
OstreeRepoListRefsExtFlags flags,
GCancellable *cancellable,
GError **error);
_OSTREE_PUBLIC _OSTREE_PUBLIC
gboolean ostree_repo_remote_list_refs (OstreeRepo *self, gboolean ostree_repo_remote_list_refs (OstreeRepo *self,
const char *remote_name, const char *remote_name,