upleb.uk

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

summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2025-05-21 15:46:08 +0100
committerDanConwayDev <DanConwayDev@protonmail.com>2025-05-21 16:21:32 +0100
commita9dc4da2329019f095e811c3837f329ecd94765b (patch)
tree7e0d985b30bbf932ab58490c84d2ff032b0d1d58 /src/lib
parentd0a27fc7828aee5ca7d4c56a9c9f9f5b08878fbf (diff)
fix: preserve relay and git server order
rewrite of 25e58e52624210f5852a9183495821526add5928 which took relays & git servers from all maintainer some test failed due to incorrect ordering. its better to start with the ones the trusted maintainer selected.
Diffstat (limited to 'src/lib')
-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 })