upleb.uk

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

summaryrefslogtreecommitdiff
path: root/src/lib/repo_ref.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/repo_ref.rs')
-rw-r--r--src/lib/repo_ref.rs97
1 files changed, 40 insertions, 57 deletions
diff --git a/src/lib/repo_ref.rs b/src/lib/repo_ref.rs
index aa7a1d2..2ef4b8c 100644
--- a/src/lib/repo_ref.rs
+++ b/src/lib/repo_ref.rs
@@ -43,67 +43,50 @@ impl TryFrom<nostr::Event> for RepoRef {
43 } 43 }
44 let mut r = Self::default(); 44 let mut r = Self::default();
45 45
46 if let Some(t) = event.tags.iter().find(|t| t.as_slice()[0].eq("d")) { 46 for tag in event.tags.iter() {
47 r.identifier = t.as_slice()[1].clone(); 47 match tag.as_slice() {
48 } 48 [t, id] if t == "d" => r.identifier = id.clone(),
49 49 [t, name] if t == "name" => r.name = name.clone(),
50 if let Some(t) = event.tags.iter().find(|t| t.as_slice()[0].eq("name")) { 50 [t, description] if t == "description" => r.description = description.clone(),
51 r.name = t.as_slice()[1].clone(); 51 [t, clone @ ..] if t == "clone" => {
52 } 52 r.git_server = clone.to_vec();
53
54 if let Some(t) = event
55 .tags
56 .iter()
57 .find(|t| t.as_slice()[0].eq("description"))
58 {
59 r.description = t.as_slice()[1].clone();
60 }
61
62 if let Some(t) = event.tags.iter().find(|t| t.as_slice()[0].eq("clone")) {
63 r.git_server = t.clone().to_vec();
64 r.git_server.remove(0);
65 }
66
67 if let Some(t) = event.tags.iter().find(|t| t.as_slice()[0].eq("web")) {
68 r.web = t.clone().to_vec();
69 r.web.remove(0);
70 }
71
72 if let Some(t) = event.tags.iter().find(|t| {
73 t.as_slice()[0].eq("r")
74 && t.as_slice()[1].len().eq(&40)
75 && git2::Oid::from_str(t.as_slice()[1].as_str()).is_ok()
76 }) {
77 r.root_commit = t.as_slice()[1].clone();
78 }
79
80 if let Some(t) = event.tags.iter().find(|t| t.as_slice()[0].eq("relays")) {
81 for relay in t.clone().to_vec() {
82 if let Ok(relay) = RelayUrl::parse(relay) {
83 r.relays.push(relay);
84 } 53 }
54 [t, web @ ..] if t == "web" => {
55 r.web = web.to_vec();
56 }
57 [t, commit_id]
58 if t == "r"
59 && commit_id.len() == 40
60 && git2::Oid::from_str(commit_id).is_ok() =>
61 {
62 r.root_commit = commit_id.clone();
63 }
64 [t, relays @ ..] if t == "relays" => {
65 for relay in relays {
66 if let Ok(relay_url) = RelayUrl::parse(relay) {
67 r.relays.push(relay_url);
68 }
69 }
70 }
71 [t, maintainers @ ..] if t == "maintainers" => {
72 if !maintainers.contains(&event.pubkey.to_string()) {
73 r.maintainers.push(event.pubkey);
74 }
75 for pk in maintainers {
76 r.maintainers.push(
77 nostr_sdk::prelude::PublicKey::from_str(pk)
78 .context(format!("failed to convert entry from maintainers tag {pk} into a valid nostr public key. it should be in hex format"))
79 .context("invalid repository event")?,
80 );
81 }
82 }
83 _ => {}
85 } 84 }
86 } 85 }
87 86
88 if let Some(t) = event 87 // If no maintainers were added, add the event's public key
89 .tags 88 if r.maintainers.is_empty() {
90 .iter() 89 r.maintainers.push(event.pubkey);
91 .find(|t| t.as_slice()[0].eq("maintainers"))
92 {
93 let mut maintainers = t.clone().to_vec();
94 maintainers.remove(0);
95 if !maintainers.contains(&event.pubkey.to_string()) {
96 r.maintainers.push(event.pubkey);
97 }
98 for pk in maintainers {
99 r.maintainers.push(
100 nostr_sdk::prelude::PublicKey::from_str(&pk)
101 .context(format!("failed to convert entry from maintainers tag {pk} into a valid nostr public key. it should be in hex format"))
102 .context("invalid repository event")?,
103 );
104 }
105 } else {
106 r.maintainers = vec![event.pubkey];
107 } 90 }
108 r.events = HashMap::new(); 91 r.events = HashMap::new();
109 r.events.insert( 92 r.events.insert(