From 1222c2271b6a552054dcccf51199ed3314f9c66b Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Thu, 19 Oct 2017 10:25:59 -0400 Subject: [PATCH] repo: Add wrapper function for setting devino cache on checkout opts I was trying to use this with pygobject for an OCI+ostree project, and pygobject rejected simply assigning to the field (understandably, since it can't bind the lifetime together). Add a wrapper function, which is still unsafe, but hides that unsafety where most people shouldn't find it. And if they do...well, sorry, Rust wasn't invented when ostree was started. Closes: #1295 Approved by: pwithnall --- apidoc/ostree-sections.txt | 2 ++ src/libostree/libostree-devel.sym | 1 + src/libostree/ostree-repo-checkout.c | 18 ++++++++++++++++++ src/libostree/ostree-repo-commit.c | 2 ++ src/libostree/ostree-repo.h | 3 +++ 5 files changed, 26 insertions(+) diff --git a/apidoc/ostree-sections.txt b/apidoc/ostree-sections.txt index 1ba02cfc..b37c8914 100644 --- a/apidoc/ostree-sections.txt +++ b/apidoc/ostree-sections.txt @@ -371,6 +371,8 @@ ostree_repo_write_commit ostree_repo_write_commit_with_time ostree_repo_read_commit_detached_metadata ostree_repo_write_commit_detached_metadata +OstreeRepoCheckoutAtOptions +ostree_repo_checkout_at_options_set_devino OstreeRepoCheckoutMode OstreeRepoCheckoutOverwriteMode ostree_repo_checkout_tree diff --git a/src/libostree/libostree-devel.sym b/src/libostree/libostree-devel.sym index 07d99f15..aa3a82e9 100644 --- a/src/libostree/libostree-devel.sym +++ b/src/libostree/libostree-devel.sym @@ -21,6 +21,7 @@ LIBOSTREE_2017.13 { global: ostree_checksum_file_at; + ostree_repo_checkout_at_options_set_devino; } LIBOSTREE_2017.12; /* Stub section for the stable release *after* this development one; don't diff --git a/src/libostree/ostree-repo-checkout.c b/src/libostree/ostree-repo-checkout.c index c2639a22..962b503d 100644 --- a/src/libostree/ostree-repo-checkout.c +++ b/src/libostree/ostree-repo-checkout.c @@ -1210,6 +1210,24 @@ ostree_repo_checkout_at (OstreeRepo *self, return TRUE; } +/** + * ostree_repo_checkout_at_options_set_devino: + * @opts: Checkout options + * @cache: (transfer none) (nullable): Devino cache + * + * This function simply assigns @cache to the `devino_to_csum_cache` member of + * @opts; it's only useful for introspection. + * + * Note that cache does *not* have its refcount incremented - the lifetime of + * @cache must be equal to or greater than that of @opts. + */ +void +ostree_repo_checkout_at_options_set_devino (OstreeRepoCheckoutAtOptions *opts, + OstreeRepoDevInoCache *cache) +{ + opts->devino_to_csum_cache = cache; +} + static guint devino_hash (gconstpointer a) { diff --git a/src/libostree/ostree-repo-commit.c b/src/libostree/ostree-repo-commit.c index b6fbd3d1..d6a425d8 100644 --- a/src/libostree/ostree-repo-commit.c +++ b/src/libostree/ostree-repo-commit.c @@ -3415,6 +3415,8 @@ ostree_repo_commit_modifier_set_sepolicy (OstreeRepoCommitModifier * * This function will add a reference to @cache without copying - you * should avoid further mutation of the cache. + * + * Since: 2017.13 */ void ostree_repo_commit_modifier_set_devino_cache (OstreeRepoCommitModifier *modifier, diff --git a/src/libostree/ostree-repo.h b/src/libostree/ostree-repo.h index e1daf08d..15e5f94e 100644 --- a/src/libostree/ostree-repo.h +++ b/src/libostree/ostree-repo.h @@ -911,6 +911,9 @@ OstreeRepoDevInoCache * ostree_repo_devino_cache_ref (OstreeRepoDevInoCache *cac _OSTREE_PUBLIC void ostree_repo_devino_cache_unref (OstreeRepoDevInoCache *cache); +_OSTREE_PUBLIC +void ostree_repo_checkout_at_options_set_devino (OstreeRepoCheckoutAtOptions *opts, OstreeRepoDevInoCache *cache); + _OSTREE_PUBLIC gboolean ostree_repo_checkout_at (OstreeRepo *self, OstreeRepoCheckoutAtOptions *options,