@@ -23,9 +23,10 @@ use futures_util::TryFutureExt;
23
23
use oci_spec:: image:: {
24
24
self as oci_image, Arch , Descriptor , Digest , History , ImageConfiguration , ImageManifest ,
25
25
} ;
26
+ use ostree:: glib:: FromVariant ;
26
27
use ostree:: prelude:: { Cast , FileEnumeratorExt , FileExt , ToVariant } ;
27
28
use ostree:: { gio, glib} ;
28
- use std:: collections:: { BTreeSet , HashMap } ;
29
+ use std:: collections:: { BTreeMap , BTreeSet , HashMap } ;
29
30
use std:: iter:: FromIterator ;
30
31
use tokio:: sync:: mpsc:: { Receiver , Sender } ;
31
32
@@ -1196,6 +1197,37 @@ fn parse_cached_update(meta: &glib::VariantDict) -> Result<Option<CachedImageUpd
1196
1197
} ) )
1197
1198
}
1198
1199
1200
+ /// Remove any cached
1201
+ #[ context( "Clearing cached update {imgref}" ) ]
1202
+ pub fn clear_cached_update ( repo : & ostree:: Repo , imgref : & ImageReference ) -> Result < ( ) > {
1203
+ let cancellable = gio:: Cancellable :: NONE ;
1204
+ let ostree_ref = ref_for_image ( imgref) ?;
1205
+ let rev = repo. require_rev ( & ostree_ref) ?;
1206
+ let Some ( commitmeta) = repo. read_commit_detached_metadata ( & rev, cancellable) ? else {
1207
+ return Ok ( ( ) ) ;
1208
+ } ;
1209
+
1210
+ // SAFETY: We know this is an a{sv}
1211
+ let mut commitmeta: BTreeMap < String , glib:: Variant > =
1212
+ BTreeMap :: from_variant ( & commitmeta) . unwrap ( ) ;
1213
+ let mut changed = false ;
1214
+ for key in [
1215
+ ImageImporter :: CACHED_KEY_CONFIG ,
1216
+ ImageImporter :: CACHED_KEY_MANIFEST ,
1217
+ ImageImporter :: CACHED_KEY_MANIFEST_DIGEST ,
1218
+ ] {
1219
+ if commitmeta. remove ( key) . is_some ( ) {
1220
+ changed = true ;
1221
+ }
1222
+ }
1223
+ if !changed {
1224
+ return Ok ( ( ) ) ;
1225
+ }
1226
+ let commitmeta = glib:: Variant :: from ( commitmeta) ;
1227
+ repo. write_commit_detached_metadata ( & rev, Some ( & commitmeta) , cancellable) ?;
1228
+ Ok ( ( ) )
1229
+ }
1230
+
1199
1231
/// Query metadata for a pulled image via an OSTree commit digest.
1200
1232
/// The digest must refer to a pulled container image's merge commit.
1201
1233
pub fn query_image_commit ( repo : & ostree:: Repo , commit : & str ) -> Result < Box < LayeredImageState > > {
0 commit comments