diff --git a/src/repositories/mod.rs b/src/repositories/mod.rs index 7bac3336..86378511 100644 --- a/src/repositories/mod.rs +++ b/src/repositories/mod.rs @@ -12,7 +12,7 @@ mod file; pub use file::{APTRepositoryFile, APTRepositoryFileError, APTRepositoryInfo}; mod release; -use release::get_current_release_codename; +pub use release::get_current_release_codename; mod standard; pub use standard::{APTRepositoryHandle, APTStandardRepository}; @@ -60,24 +60,24 @@ pub fn check_repositories(files: &[APTRepositoryFile]) -> Result Result<(APTRepository, String), Error> { - let suite = get_current_release_codename()?; - + suite: &str, +) -> (APTRepository, String) { let repo = handle.to_repository(product, &suite); let path = handle.path(product); - Ok((repo, path)) + (repo, path) } -/// Return handles for standard Proxmox repositories and whether their status, where -/// None means not configured, and Some(bool) indicates enabled or disabled +/// Return handles for standard Proxmox repositories and their status, where +/// `None` means not configured, and `Some(bool)` indicates enabled or disabled. pub fn standard_repositories( - product: &str, files: &[APTRepositoryFile], + product: &str, + suite: &str, ) -> Vec { let mut result = vec![ APTStandardRepository::from(APTRepositoryHandle::Enterprise), @@ -101,7 +101,7 @@ pub fn standard_repositories( continue; } - if repo.is_referenced_repository(entry.handle, product) { + if repo.is_referenced_repository(entry.handle, product, suite) { entry.status = Some(repo.enabled); } } diff --git a/src/repositories/repository.rs b/src/repositories/repository.rs index b56ec477..fc16327f 100644 --- a/src/repositories/repository.rs +++ b/src/repositories/repository.rs @@ -270,7 +270,12 @@ impl APTRepository { } /// Checks if the repository is the one referenced by the handle. - pub fn is_referenced_repository(&self, handle: APTRepositoryHandle, product: &str) -> bool { + pub fn is_referenced_repository( + &self, + handle: APTRepositoryHandle, + product: &str, + suite: &str, + ) -> bool { let (package_type, handle_uris, component) = handle.info(product); let mut found_uri = false; @@ -281,7 +286,11 @@ impl APTRepository { found_uri = found_uri || handle_uris.iter().any(|handle_uri| handle_uri == uri); } - self.types.contains(&package_type) && found_uri && self.components.contains(&component) + self.types.contains(&package_type) + && found_uri + // using contains would require a &String + && self.suites.iter().any(|self_suite| self_suite == suite) + && self.components.contains(&component) } /// Check if a variant of the given suite is configured in this repository diff --git a/tests/repositories.rs b/tests/repositories.rs index 64356711..4cbde609 100644 --- a/tests/repositories.rs +++ b/tests/repositories.rs @@ -5,8 +5,8 @@ use anyhow::{bail, format_err, Error}; use proxmox_apt::config::APTConfig; use proxmox_apt::repositories::{ - check_repositories, standard_repositories, APTRepositoryFile, APTRepositoryHandle, - APTRepositoryInfo, APTStandardRepository, + check_repositories, get_current_release_codename, standard_repositories, APTRepositoryFile, + APTRepositoryHandle, APTRepositoryInfo, APTStandardRepository, }; #[test] @@ -337,7 +337,7 @@ fn test_standard_repositories() -> Result<(), Error> { let mut file = APTRepositoryFile::new(&absolute_suite_list)?.unwrap(); file.parse()?; - let std_repos = standard_repositories("pve", &vec![file]); + let std_repos = standard_repositories(&vec![file], "pve", "bullseye"); assert_eq!(std_repos, expected); @@ -347,14 +347,14 @@ fn test_standard_repositories() -> Result<(), Error> { let file_vec = vec![file]; - let std_repos = standard_repositories("pbs", &file_vec); + let std_repos = standard_repositories(&file_vec, "pbs", "bullseye"); assert_eq!(&std_repos, &expected[0..=2]); expected[0].status = Some(false); expected[1].status = Some(true); - let std_repos = standard_repositories("pve", &file_vec); + let std_repos = standard_repositories(&file_vec, "pve", "bullseye"); assert_eq!(std_repos, expected); @@ -368,9 +368,18 @@ fn test_standard_repositories() -> Result<(), Error> { expected[1].status = Some(true); expected[2].status = Some(false); - let std_repos = standard_repositories("pve", &file_vec); + let std_repos = standard_repositories(&file_vec, "pve", "bullseye"); assert_eq!(std_repos, expected); Ok(()) } + +#[test] +fn test_get_current_release_codename() -> Result<(), Error> { + let codename = get_current_release_codename()?; + + assert_eq!(&codename, "bullseye"); + + Ok(()) +}