MCPcopy Create free account
hub / github.com/bootc-dev/bootc / query_image_commit

Function query_image_commit

crates/ostree-ext/src/container/store.rs:1739–1778  ·  view source on GitHub ↗

Query metadata for a pulled image via an OSTree commit digest. The digest must refer to a pulled container image's merge commit.

(repo: &ostree::Repo, commit: &str)

Source from the content-addressed store, hash-verified

1737/// Query metadata for a pulled image via an OSTree commit digest.
1738/// The digest must refer to a pulled container image's merge commit.
1739pub fn query_image_commit(repo: &ostree::Repo, commit: &str) -> Result<Box<LayeredImageState>> {
1740 let merge_commit = commit.to_string();
1741 let merge_commit_obj = repo.load_commit(commit)?.0;
1742 let commit_meta = &merge_commit_obj.child_value(0);
1743 let commit_meta = &ostree::glib::VariantDict::new(Some(commit_meta));
1744 let (manifest, manifest_digest) = manifest_data_from_commitmeta(commit_meta)?;
1745 let configuration = image_config_from_commitmeta(commit_meta)?;
1746 let mut layers = manifest.layers().iter().cloned();
1747 // We require a base layer.
1748 let base_layer = layers.next().ok_or_else(|| anyhow!("No layers found"))?;
1749 let base_layer = query_layer(repo, base_layer)?;
1750 let ostree_ref = base_layer.ostree_ref.as_str();
1751 let base_commit = base_layer
1752 .commit
1753 .ok_or_else(|| anyhow!("Missing base image ref {ostree_ref}"))?;
1754
1755 let detached_commitmeta =
1756 repo.read_commit_detached_metadata(&merge_commit, gio::Cancellable::NONE)?;
1757 let detached_commitmeta = detached_commitmeta
1758 .as_ref()
1759 .map(|v| glib::VariantDict::new(Some(v)));
1760 let cached_update = detached_commitmeta
1761 .as_ref()
1762 .map(parse_cached_update)
1763 .transpose()?
1764 .flatten();
1765 let state = Box::new(LayeredImageState {
1766 base_commit,
1767 merge_commit,
1768 manifest_digest,
1769 manifest,
1770 configuration,
1771 cached_update,
1772 // we can't cross-reference with a remote here
1773 verify_text: None,
1774 filtered_files: None,
1775 });
1776 tracing::debug!("Wrote merge commit {}", state.merge_commit);
1777 Ok(state)
1778}
1779
1780fn manifest_for_image(repo: &ostree::Repo, imgref: &ImageReference) -> Result<ImageManifest> {
1781 let ostree_ref = ref_for_image(imgref)?;

Callers 6

imagestatusFunction · 0.85
query_imageMethod · 0.85
get_manifestMethod · 0.85
try_query_imageFunction · 0.85
query_imageFunction · 0.85

Calls 6

query_layerFunction · 0.85
iterMethod · 0.45
nextMethod · 0.45
as_refMethod · 0.45

Tested by

no test coverage detected