upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/client.rs29
1 files changed, 22 insertions, 7 deletions
diff --git a/src/lib/client.rs b/src/lib/client.rs
index 7cd3c46..5ba64ff 100644
--- a/src/lib/client.rs
+++ b/src/lib/client.rs
@@ -973,14 +973,29 @@ pub async fn get_repo_ref_from_cache(
973 } 973 }
974 } 974 }
975 975
976 // use relays and git servers from all maintainer announcement event 976 // Use relays and git servers from all maintainer announcement events
977 let mut relays: HashSet<RelayUrl> = HashSet::from_iter(repo_ref.relays.iter().cloned()); 977 // we use Vec and HashSet to remove duplicates and preserve order
978 let mut git_servers: HashSet<String> = HashSet::from_iter(repo_ref.git_server.iter().cloned()); 978 let mut relays: Vec<RelayUrl> = repo_ref.relays.clone();
979 let mut git_server: Vec<String> = repo_ref.git_server.clone();
980 let mut seen_relays: HashSet<RelayUrl> = HashSet::from_iter(relays.iter().cloned());
981 let mut seen_git_server: HashSet<String> = git_server
982 .iter()
983 .map(|server| server.trim_end_matches('/').to_string())
984 .collect();
985
979 for m in &maintainers { 986 for m in &maintainers {
980 if let Some(event) = repo_events.iter().find(|e| e.pubkey == *m) { 987 if let Some(event) = repo_events.iter().find(|e| e.pubkey == *m) {
981 if let Ok(m_repo_ref) = RepoRef::try_from((event.clone(), None)) { 988 if let Ok(m_repo_ref) = RepoRef::try_from((event.clone(), None)) {
982 relays.extend(m_repo_ref.relays); 989 for relay in m_repo_ref.relays {
983 git_servers.extend(m_repo_ref.git_server); 990 if seen_relays.insert(relay.clone()) {
991 relays.push(relay);
992 }
993 }
994 for server in m_repo_ref.git_server {
995 if seen_git_server.insert(server.trim_end_matches('/').to_string()) {
996 git_server.push(server);
997 }
998 }
984 } 999 }
985 } 1000 }
986 } 1001 }
@@ -989,8 +1004,8 @@ pub async fn get_repo_ref_from_cache(
989 // use all maintainers from all events found, not just maintainers in the most 1004 // use all maintainers from all events found, not just maintainers in the most
990 // recent event 1005 // recent event
991 maintainers: maintainers.iter().copied().collect::<Vec<PublicKey>>(), 1006 maintainers: maintainers.iter().copied().collect::<Vec<PublicKey>>(),
992 relays: relays.into_iter().collect(), 1007 relays,
993 git_server: git_servers.into_iter().collect(), 1008 git_server,
994 events, 1009 events,
995 ..repo_ref 1010 ..repo_ref
996 }) 1011 })