diff options
Diffstat (limited to 'src/lib/accept_maintainership.rs')
| -rw-r--r-- | src/lib/accept_maintainership.rs | 53 |
1 files changed, 42 insertions, 11 deletions
diff --git a/src/lib/accept_maintainership.rs b/src/lib/accept_maintainership.rs index 39f10cf..086b858 100644 --- a/src/lib/accept_maintainership.rs +++ b/src/lib/accept_maintainership.rs | |||
| @@ -66,7 +66,8 @@ pub async fn accept_maintainership_with_defaults( | |||
| 66 | 66 | ||
| 67 | // --- Step 1: resolve infrastructure --- | 67 | // --- Step 1: resolve infrastructure --- |
| 68 | 68 | ||
| 69 | let selected_grasp_servers = grasp_servers_from_user_or_fallback(user_ref, client); | 69 | let selected_grasp_servers = |
| 70 | grasp_servers_from_user_or_fallback(user_ref, Some(repo_ref), client); | ||
| 70 | 71 | ||
| 71 | let mut git_servers: Vec<String> = vec![]; | 72 | let mut git_servers: Vec<String> = vec![]; |
| 72 | let mut relay_strings: Vec<String> = vec![]; | 73 | let mut relay_strings: Vec<String> = vec![]; |
| @@ -208,26 +209,56 @@ pub async fn accept_maintainership_with_defaults( | |||
| 208 | // Grasp server helpers | 209 | // Grasp server helpers |
| 209 | // --------------------------------------------------------------------------- | 210 | // --------------------------------------------------------------------------- |
| 210 | 211 | ||
| 211 | /// Return the user's saved grasp servers, falling back to client defaults. | 212 | /// Return grasp servers for a co-maintainer using the following priority: |
| 213 | /// | ||
| 214 | /// 1. User's own saved grasp server list (if non-empty). | ||
| 215 | /// 2. Trusted maintainer's grasp servers derived from | ||
| 216 | /// `trusted_maintainer_repo_ref` (if provided and non-empty). If the trusted | ||
| 217 | /// maintainer only uses a single grasp server, the first system-default | ||
| 218 | /// grasp server is appended so the co-maintainer has at least two servers | ||
| 219 | /// for redundancy. | ||
| 220 | /// 3. System / client default grasp servers. | ||
| 212 | pub fn grasp_servers_from_user_or_fallback( | 221 | pub fn grasp_servers_from_user_or_fallback( |
| 213 | user_ref: &UserRef, | 222 | user_ref: &UserRef, |
| 223 | trusted_maintainer_repo_ref: Option<&RepoRef>, | ||
| 214 | #[cfg(test)] client: &MockConnect, | 224 | #[cfg(test)] client: &MockConnect, |
| 215 | #[cfg(not(test))] client: &Client, | 225 | #[cfg(not(test))] client: &Client, |
| 216 | ) -> Vec<String> { | 226 | ) -> Vec<String> { |
| 217 | if user_ref.grasp_list.urls.is_empty() { | 227 | // Priority 1: user's own grasp list. |
| 218 | client | 228 | if !user_ref.grasp_list.urls.is_empty() { |
| 219 | .get_grasp_default_set() | 229 | return user_ref |
| 220 | .iter() | ||
| 221 | .map(std::string::ToString::to_string) | ||
| 222 | .collect() | ||
| 223 | } else { | ||
| 224 | user_ref | ||
| 225 | .grasp_list | 230 | .grasp_list |
| 226 | .urls | 231 | .urls |
| 227 | .iter() | 232 | .iter() |
| 228 | .map(std::string::ToString::to_string) | 233 | .map(std::string::ToString::to_string) |
| 229 | .collect() | 234 | .collect(); |
| 230 | } | 235 | } |
| 236 | |||
| 237 | // Priority 2: trusted maintainer's grasp servers. | ||
| 238 | if let Some(rr) = trusted_maintainer_repo_ref { | ||
| 239 | let maintainer_servers = rr.grasp_servers(); | ||
| 240 | if !maintainer_servers.is_empty() { | ||
| 241 | if maintainer_servers.len() == 1 { | ||
| 242 | // Supplement a single server with the first system default for | ||
| 243 | // redundancy, avoiding duplicates. | ||
| 244 | let mut servers = maintainer_servers; | ||
| 245 | if let Some(first_default) = client.get_grasp_default_set().first() { | ||
| 246 | if !servers.contains(first_default) { | ||
| 247 | servers.push(first_default.clone()); | ||
| 248 | } | ||
| 249 | } | ||
| 250 | return servers; | ||
| 251 | } | ||
| 252 | return maintainer_servers; | ||
| 253 | } | ||
| 254 | } | ||
| 255 | |||
| 256 | // Priority 3: system defaults. | ||
| 257 | client | ||
| 258 | .get_grasp_default_set() | ||
| 259 | .iter() | ||
| 260 | .map(std::string::ToString::to_string) | ||
| 261 | .collect() | ||
| 231 | } | 262 | } |
| 232 | 263 | ||
| 233 | // --------------------------------------------------------------------------- | 264 | // --------------------------------------------------------------------------- |