[ostree] core: Add API to enumerate all refs
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ostree] core: Add API to enumerate all refs
- Date: Mon, 27 Feb 2012 13:39:05 +0000 (UTC)
commit d3a73225b0997e794abc0b10fac018e5e6374223
Author: Colin Walters <walters verbum org>
Date: Mon Feb 27 05:58:42 2012 -0500
core: Add API to enumerate all refs
src/libostree/ostree-repo.c | 80 +++++++++++++++++++++++++++++++++++++++++
src/libostree/ostree-repo.h | 5 +++
src/ostree/ot-builtin-prune.c | 80 +----------------------------------------
tests/t0000-basic.sh | 6 +++-
4 files changed, 91 insertions(+), 80 deletions(-)
---
diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c
index 17f3c7b..7f0ecef 100644
--- a/src/libostree/ostree-repo.c
+++ b/src/libostree/ostree-repo.c
@@ -1375,6 +1375,86 @@ create_empty_gvariant_dict (void)
return g_variant_builder_end (&builder);
}
+static gboolean
+enumerate_refs_recurse (OstreeRepo *repo,
+ GFile *base,
+ GFile *dir,
+ GHashTable *refs,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ GFileInfo *file_info = NULL;
+ GFileEnumerator *enumerator = NULL;
+ GFile *child = NULL;
+ GError *temp_error = NULL;
+
+ enumerator = g_file_enumerate_children (dir, OSTREE_GIO_FAST_QUERYINFO,
+ G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+ cancellable, error);
+ if (!enumerator)
+ goto out;
+
+ while ((file_info = g_file_enumerator_next_file (enumerator, cancellable, &temp_error)) != NULL)
+ {
+ g_clear_object (&child);
+ child = g_file_get_child (dir, g_file_info_get_name (file_info));
+ if (g_file_info_get_file_type (file_info) == G_FILE_TYPE_DIRECTORY)
+ {
+ if (!enumerate_refs_recurse (repo, base, child, refs, cancellable, error))
+ goto out;
+ }
+ else if (g_file_info_get_file_type (file_info) == G_FILE_TYPE_REGULAR)
+ {
+ char *contents;
+ gsize len;
+
+ if (!g_file_load_contents (child, cancellable, &contents, &len, NULL, error))
+ goto out;
+
+ g_strchomp (contents);
+
+ g_hash_table_insert (refs, g_file_get_relative_path (base, child), contents);
+ }
+
+ g_clear_object (&file_info);
+ }
+ if (temp_error != NULL)
+ {
+ g_propagate_error (error, temp_error);
+ goto out;
+ }
+
+ ret = TRUE;
+ out:
+ g_clear_object (&file_info);
+ g_clear_object (&child);
+ return ret;
+}
+
+gboolean
+ostree_repo_list_all_refs (OstreeRepo *repo,
+ GHashTable **out_all_refs,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ GHashTable *ret_all_refs = NULL;
+ GFile *heads_dir = NULL;
+
+ ret_all_refs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+
+ heads_dir = g_file_resolve_relative_path (ostree_repo_get_path (repo), "refs/heads");
+ if (!enumerate_refs_recurse (repo, heads_dir, heads_dir, ret_all_refs, cancellable, error))
+ goto out;
+
+ ret = TRUE;
+ ot_transfer_out_value (out_all_refs, &ret_all_refs);
+ out:
+ g_clear_object (&heads_dir);
+ return ret;
+}
+
gboolean
ostree_repo_write_ref (OstreeRepo *self,
const char *remote,
diff --git a/src/libostree/ostree-repo.h b/src/libostree/ostree-repo.h
index 1949446..ca1fecf 100644
--- a/src/libostree/ostree-repo.h
+++ b/src/libostree/ostree-repo.h
@@ -130,6 +130,11 @@ gboolean ostree_repo_write_ref (OstreeRepo *self,
const char *rev,
GError **error);
+gboolean ostree_repo_list_all_refs (OstreeRepo *repo,
+ GHashTable **out_all_refs,
+ GCancellable *cancellable,
+ GError **error);
+
gboolean ostree_repo_load_variant (OstreeRepo *self,
OstreeObjectType expected_type,
const char *sha256,
diff --git a/src/ostree/ot-builtin-prune.c b/src/ostree/ot-builtin-prune.c
index 5bfc74a..d747d69 100644
--- a/src/ostree/ot-builtin-prune.c
+++ b/src/ostree/ot-builtin-prune.c
@@ -225,84 +225,6 @@ object_iter_callback (OstreeRepo *repo,
g_free (key);
}
-static gboolean
-add_refs_recurse (OstreeRepo *repo,
- GFile *base,
- GFile *dir,
- GHashTable *refs,
- GCancellable *cancellable,
- GError **error)
-{
- gboolean ret = FALSE;
- GFileInfo *file_info = NULL;
- GFileEnumerator *enumerator = NULL;
- GFile *child = NULL;
- GError *temp_error = NULL;
-
- enumerator = g_file_enumerate_children (dir, OSTREE_GIO_FAST_QUERYINFO,
- G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
- cancellable, error);
- if (!enumerator)
- goto out;
-
- while ((file_info = g_file_enumerator_next_file (enumerator, cancellable, &temp_error)) != NULL)
- {
- g_clear_object (&child);
- child = g_file_get_child (dir, g_file_info_get_name (file_info));
- if (g_file_info_get_file_type (file_info) == G_FILE_TYPE_DIRECTORY)
- {
- if (!add_refs_recurse (repo, base, child, refs, cancellable, error))
- goto out;
- }
- else if (g_file_info_get_file_type (file_info) == G_FILE_TYPE_REGULAR)
- {
- char *contents;
- gsize len;
-
- if (!g_file_load_contents (child, cancellable, &contents, &len, NULL, error))
- goto out;
-
- g_strchomp (contents);
-
- g_hash_table_insert (refs, g_file_get_relative_path (base, child), contents);
- }
-
- g_clear_object (&file_info);
- }
- if (temp_error != NULL)
- {
- g_propagate_error (error, temp_error);
- goto out;
- }
-
- ret = TRUE;
- out:
- g_clear_object (&file_info);
- g_clear_object (&child);
- return ret;
-}
-
-static gboolean
-list_all_refs (OstreeRepo *repo,
- GHashTable **out_all_refs,
- GCancellable *cancellable,
- GError **error)
-{
- gboolean ret = FALSE;
- GHashTable *ret_all_refs = NULL;
- GFile *heads_dir = NULL;
-
- ret_all_refs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
-
- heads_dir = g_file_resolve_relative_path (ostree_repo_get_path (repo), "refs/heads");
- if (!add_refs_recurse (repo, heads_dir, heads_dir, ret_all_refs, cancellable, error))
- goto out;
-
- ret = TRUE;
- ot_transfer_out_value (out_all_refs, &ret_all_refs);
- out:
- return ret;
-}
gboolean
ostree_builtin_prune (int argc, char **argv, GFile *repo_path, GError **error)
@@ -333,7 +255,7 @@ ostree_builtin_prune (int argc, char **argv, GFile *repo_path, GError **error)
data.n_reachable = 0;
data.n_unreachable = 0;
- if (!list_all_refs (repo, &all_refs, cancellable, error))
+ if (!ostree_repo_list_all_refs (repo, &all_refs, cancellable, error))
goto out;
g_hash_table_iter_init (&hash_iter, all_refs);
diff --git a/tests/t0000-basic.sh b/tests/t0000-basic.sh
index 2a00b91..c3cd7a5 100755
--- a/tests/t0000-basic.sh
+++ b/tests/t0000-basic.sh
@@ -19,7 +19,7 @@
set -e
-echo "1..24"
+echo "1..25"
. libtest.sh
@@ -181,3 +181,7 @@ EOF
cd ${test_tmpdir}/checkout-test2-4
$OSTREE commit -b test2 -s "with statoverride" --statoverride=../test-statoverride.txt
echo "ok commit statoverridde"
+
+cd ${test_tmpdir}
+$OSTREE prune
+echo "ok prune didn't fail"
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]