[ostree] traverse: Skip already traversed commits
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ostree] traverse: Skip already traversed commits
- Date: Fri, 16 Nov 2012 19:29:55 +0000 (UTC)
commit 51b1dd7cbd1368e76cb0fcb71c4ea067293b36f1
Author: Colin Walters <walters verbum org>
Date: Fri Nov 16 12:10:21 2012 -0500
traverse: Skip already traversed commits
This is just more efficient, since e.g. "ostree prune" may invoke
ostree_traverse_commit() multiple times for the same commit.
src/libostree/ostree-traverse.c | 8 ++++++--
1 files changed, 6 insertions(+), 2 deletions(-)
---
diff --git a/src/libostree/ostree-traverse.c b/src/libostree/ostree-traverse.c
index 3dc323e..20f7586 100644
--- a/src/libostree/ostree-traverse.c
+++ b/src/libostree/ostree-traverse.c
@@ -155,6 +155,11 @@ ostree_traverse_commit (OstreeRepo *repo,
ot_lvariant GVariant *key = NULL;
ot_lvariant GVariant *commit = NULL;
+ key = ostree_object_name_serialize (commit_checksum, OSTREE_OBJECT_TYPE_COMMIT);
+
+ if (g_hash_table_contains (inout_reachable, key))
+ break;
+
/* PARSE OSTREE_SERIALIZED_COMMIT_VARIANT */
if (!ostree_repo_load_variant_if_exists (repo, OSTREE_OBJECT_TYPE_COMMIT, commit_checksum, &commit, error))
goto out;
@@ -165,8 +170,7 @@ ostree_traverse_commit (OstreeRepo *repo,
if (!commit)
break;
- key = ostree_object_name_serialize (commit_checksum, OSTREE_OBJECT_TYPE_COMMIT);
- g_hash_table_replace (inout_reachable, key, key);
+ g_hash_table_add (inout_reachable, key);
key = NULL;
g_variant_get_child (commit, 7, "@ay", &meta_csum_bytes);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]