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.
This commit is contained in:
Till Wegmueller 2026-02-05 21:56:53 +01:00
parent e236f30f6e
commit 38baf16b6f
No known key found for this signature in database
3 changed files with 37 additions and 5 deletions

View file

@ -530,7 +530,7 @@ impl Image {
if origin.starts_with("file://") { if origin.starts_with("file://") {
let path_str = origin.trim_start_matches("file://"); let path_str = origin.trim_start_matches("file://");
let path = std::path::PathBuf::from(path_str); 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)? repo.fetch_manifest_text(&publisher_name, fmri)?
} else { } else {
let mut repo = crate::repository::RestBackend::open(origin)?; let mut repo = crate::repository::RestBackend::open(origin)?;
@ -814,7 +814,7 @@ impl Image {
if origin.starts_with("file://") { if origin.starts_with("file://") {
let path_str = origin.trim_start_matches("file://"); let path_str = origin.trim_start_matches("file://");
let path = PathBuf::from(path_str); let path = PathBuf::from(path_str);
let mut repo = FileBackend::open(&path)?; let repo = FileBackend::open(&path)?;
repo.fetch_manifest(&publisher_name, fmri) repo.fetch_manifest(&publisher_name, fmri)
.map_err(Into::into) .map_err(Into::into)
} else { } else {

View file

@ -2553,10 +2553,42 @@ impl FileBackend {
let mut dependency_actions = Vec::new(); let mut dependency_actions = Vec::new();
for dep in &manifest.dependencies { for dep in &manifest.dependencies {
if let Some(dep_fmri) = &dep.fmri { if let Some(dep_fmri) = &dep.fmri {
dependency_actions.push(format!( let mut action = format!(
"depend fmri={} type={}", "depend fmri={} type={}",
dep_fmri, dep.dependency_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);
} }
} }

View file

@ -57,7 +57,7 @@ impl DepotRepo {
} }
pub fn get_manifest_text(&self, publisher: &str, fmri: &Fmri) -> Result<String> { pub fn get_manifest_text(&self, publisher: &str, fmri: &Fmri) -> Result<String> {
let mut backend = self let backend = self
.backend .backend
.lock() .lock()
.map_err(|e| DepotError::Server(format!("Lock poisoned: {}", e)))?; .map_err(|e| DepotError::Server(format!("Lock poisoned: {}", e)))?;