diff --git a/libips/src/image/mod.rs b/libips/src/image/mod.rs index 73f1745..0b8cd11 100644 --- a/libips/src/image/mod.rs +++ b/libips/src/image/mod.rs @@ -530,7 +530,7 @@ impl Image { if origin.starts_with("file://") { let path_str = origin.trim_start_matches("file://"); let path = std::path::PathBuf::from(path_str); - let mut repo = crate::repository::FileBackend::open(&path)?; + let repo = crate::repository::FileBackend::open(&path)?; repo.fetch_manifest_text(&publisher_name, fmri)? } else { let mut repo = crate::repository::RestBackend::open(origin)?; @@ -814,7 +814,7 @@ impl Image { if origin.starts_with("file://") { let path_str = origin.trim_start_matches("file://"); let path = PathBuf::from(path_str); - let mut repo = FileBackend::open(&path)?; + let repo = FileBackend::open(&path)?; repo.fetch_manifest(&publisher_name, fmri) .map_err(Into::into) } else { diff --git a/libips/src/repository/file_backend.rs b/libips/src/repository/file_backend.rs index 5ab40e7..9cdbadb 100644 --- a/libips/src/repository/file_backend.rs +++ b/libips/src/repository/file_backend.rs @@ -2553,10 +2553,42 @@ impl FileBackend { let mut dependency_actions = Vec::new(); for dep in &manifest.dependencies { if let Some(dep_fmri) = &dep.fmri { - dependency_actions.push(format!( + let mut action = format!( "depend fmri={} type={}", dep_fmri, dep.dependency_type - )); + ); + + // Add predicate for conditional dependencies + if let Some(predicate_fmri) = &dep.predicate { + action.push_str(&format!(" predicate={}", predicate_fmri)); + } + + // Add root-image if present + if !dep.root_image.is_empty() { + action.push_str(&format!(" root-image={}", dep.root_image)); + } + + // Add any optional properties + for prop in &dep.optional { + action.push_str(&format!(" {}={}", prop.key, quote_action_value(&prop.value))); + } + + // Add facets + for (facet_name, facet) in &dep.facets { + action.push_str(&format!(" facet.{}={}", facet_name, quote_action_value(&facet.value))); + } + + // Add any optional properties + for prop in &dep.optional { + action.push_str(&format!(" {}={}", prop.key, quote_action_value(&prop.value))); + } + + // Add facets + for (facet_name, facet) in &dep.facets { + action.push_str(&format!(" facet.{}={}", facet_name, quote_action_value(&facet.value))); + } + + dependency_actions.push(action); } } diff --git a/pkg6depotd/src/repo.rs b/pkg6depotd/src/repo.rs index 7151ce8..29463fd 100644 --- a/pkg6depotd/src/repo.rs +++ b/pkg6depotd/src/repo.rs @@ -57,7 +57,7 @@ impl DepotRepo { } pub fn get_manifest_text(&self, publisher: &str, fmri: &Fmri) -> Result { - let mut backend = self + let backend = self .backend .lock() .map_err(|e| DepotError::Server(format!("Lock poisoned: {}", e)))?;