upleb.uk

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

summaryrefslogtreecommitdiff
path: root/src/sub_commands/list.rs
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2024-02-16 20:41:59 +0000
committerDanConwayDev <DanConwayDev@protonmail.com>2024-02-16 20:41:59 +0000
commita645273433fe3a716dd9c43ad9276da066af6127 (patch)
tree942e08c7de68112975269b64b6802dcfcb7c1fe0 /src/sub_commands/list.rs
parent614d2c8a3a0ac01b142aa83a142fc34d1ad56e9d (diff)
refactor: remove reliance on 'commit' tag
as part of nip34 compliance
Diffstat (limited to 'src/sub_commands/list.rs')
-rw-r--r--src/sub_commands/list.rs19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/sub_commands/list.rs b/src/sub_commands/list.rs
index 413406a..be5b97f 100644
--- a/src/sub_commands/list.rs
+++ b/src/sub_commands/list.rs
@@ -131,6 +131,18 @@ pub fn tag_value(event: &nostr::Event, tag_name: &str) -> Result<String> {
131 .clone()) 131 .clone())
132} 132}
133 133
134pub fn get_commit_id_from_patch(event: &nostr::Event) -> Result<String> {
135 let value = tag_value(event, "commit");
136
137 if value.is_ok() {
138 value
139 } else if event.content.starts_with("From ") && event.content.len().gt(&45) {
140 Ok(event.content[5..45].to_string())
141 } else {
142 bail!("event is not a patch")
143 }
144}
145
134pub fn get_most_recent_patch_with_ancestors( 146pub fn get_most_recent_patch_with_ancestors(
135 mut patches: Vec<nostr::Event>, 147 mut patches: Vec<nostr::Event>,
136) -> Result<Vec<nostr::Event>> { 148) -> Result<Vec<nostr::Event>> {
@@ -143,14 +155,14 @@ pub fn get_most_recent_patch_with_ancestors(
143 .filter(|p| p.created_at.eq(&first_patch.created_at)) 155 .filter(|p| p.created_at.eq(&first_patch.created_at))
144 .collect(); 156 .collect();
145 157
146 let latest_commit_id = tag_value( 158 let latest_commit_id = get_commit_id_from_patch(
147 // get the first patch which isn't a parent of a patch event created at the same 159 // get the first patch which isn't a parent of a patch event created at the same
148 // time 160 // time
149 patches_with_youngest_created_at 161 patches_with_youngest_created_at
150 .clone() 162 .clone()
151 .iter() 163 .iter()
152 .find(|p| { 164 .find(|p| {
153 if let Ok(commit) = tag_value(p, "commit") { 165 if let Ok(commit) = get_commit_id_from_patch(p) {
154 !patches_with_youngest_created_at.iter().any(|p2| { 166 !patches_with_youngest_created_at.iter().any(|p2| {
155 if let Ok(parent) = tag_value(p2, "parent-commit") { 167 if let Ok(parent) = tag_value(p2, "parent-commit") {
156 commit.eq(&parent) 168 commit.eq(&parent)
@@ -163,7 +175,6 @@ pub fn get_most_recent_patch_with_ancestors(
163 } 175 }
164 }) 176 })
165 .context("cannot find patches_with_youngest_created_at")?, 177 .context("cannot find patches_with_youngest_created_at")?,
166 "commit",
167 )?; 178 )?;
168 179
169 let mut res = vec![]; 180 let mut res = vec![];
@@ -171,7 +182,7 @@ pub fn get_most_recent_patch_with_ancestors(
171 let mut commit_id_to_search = latest_commit_id; 182 let mut commit_id_to_search = latest_commit_id;
172 183
173 while let Some(event) = patches.iter().find(|e| { 184 while let Some(event) = patches.iter().find(|e| {
174 if let Ok(commit) = tag_value(e, "commit") { 185 if let Ok(commit) = get_commit_id_from_patch(e) {
175 commit.eq(&commit_id_to_search) 186 commit.eq(&commit_id_to_search)
176 } else { 187 } else {
177 false // skip 188 false // skip