From 38baf16b6f88904d6d213e58b1715f7120de0952 Mon Sep 17 00:00:00 2001 From: Till Wegmueller Date: Thu, 5 Feb 2026 21:56:53 +0100 Subject: [PATCH] Refactor: Replace mutable `repo` assignments with immutable and enhance dependency action formatting - Updated `FileBackend::open` calls to use immutable `repo` variables across multiple modules. - Improved dependency action string construction by integrating optional properties, predicates, and facets for better clarity and flexibility. --- libips/src/image/mod.rs | 4 +-- libips/src/repository/file_backend.rs | 36 +++++++++++++++++++++++++-- pkg6depotd/src/repo.rs | 2 +- 3 files changed, 37 insertions(+), 5 deletions(-) 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)))?;