upleb.uk

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

summaryrefslogtreecommitdiff
path: root/src/sub_commands
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
parent614d2c8a3a0ac01b142aa83a142fc34d1ad56e9d (diff)
refactor: remove reliance on 'commit' tag
as part of nip34 compliance
Diffstat (limited to 'src/sub_commands')
-rw-r--r--src/sub_commands/list.rs19
-rw-r--r--src/sub_commands/push.rs6
2 files changed, 18 insertions, 7 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
diff --git a/src/sub_commands/push.rs b/src/sub_commands/push.rs
index cc1f480..7c6b95b 100644
--- a/src/sub_commands/push.rs
+++ b/src/sub_commands/push.rs
@@ -12,8 +12,8 @@ use crate::{
12 repo_ref::{self, RepoRef}, 12 repo_ref::{self, RepoRef},
13 sub_commands::{ 13 sub_commands::{
14 list::{ 14 list::{
15 find_commits_for_pr_event, find_pr_events, get_most_recent_patch_with_ancestors, 15 find_commits_for_pr_event, find_pr_events, get_commit_id_from_patch,
16 tag_value, 16 get_most_recent_patch_with_ancestors, tag_value,
17 }, 17 },
18 send::{event_to_cover_letter, generate_patch_event, send_events}, 18 send::{event_to_cover_letter, generate_patch_event, send_events},
19 }, 19 },
@@ -66,7 +66,7 @@ pub async fn launch(cli_args: &Cli) -> Result<()> {
66 let branch_tip = git_repo.get_tip_of_local_branch(&branch_name)?; 66 let branch_tip = git_repo.get_tip_of_local_branch(&branch_name)?;
67 67
68 let most_recent_patch_commit_id = str_to_sha1( 68 let most_recent_patch_commit_id = str_to_sha1(
69 &tag_value(&most_recent_pr_patch_chain[0], "commit") 69 &get_commit_id_from_patch(&most_recent_pr_patch_chain[0])
70 .context("latest patch event doesnt have a commit tag")?, 70 .context("latest patch event doesnt have a commit tag")?,
71 ) 71 )
72 .context("latest patch event commit tag isn't a valid SHA1 hash")?; 72 .context("latest patch event commit tag isn't a valid SHA1 hash")?;