upleb.uk

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

summaryrefslogtreecommitdiff
path: root/src/sub_commands/send.rs
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2024-02-20 11:51:50 +0000
committerDanConwayDev <DanConwayDev@protonmail.com>2024-02-20 11:51:50 +0000
commite472f83e1fa280025234b6c1eeda1ecfce443e79 (patch)
tree048d4d0171ffe044ce9e45337c1789efa0fc8712 /src/sub_commands/send.rs
parent0509d42a088539da441c7ce62f3fe7ac6c66fa68 (diff)
refactor: simplify commit msg extraction
and create functions to use this for non-root patches
Diffstat (limited to 'src/sub_commands/send.rs')
-rw-r--r--src/sub_commands/send.rs57
1 files changed, 27 insertions, 30 deletions
diff --git a/src/sub_commands/send.rs b/src/sub_commands/send.rs
index 1633cb8..c3b3fda 100644
--- a/src/sub_commands/send.rs
+++ b/src/sub_commands/send.rs
@@ -472,41 +472,38 @@ pub fn event_is_cover_letter(event: &nostr::Event) -> bool {
472 && event.iter_tags().any(|t| t.as_vec()[1].eq("root")) 472 && event.iter_tags().any(|t| t.as_vec()[1].eq("root"))
473 && event.iter_tags().any(|t| t.as_vec()[1].eq("cover-letter")) 473 && event.iter_tags().any(|t| t.as_vec()[1].eq("cover-letter"))
474} 474}
475
476pub fn commit_msg_from_patch(patch: &nostr::Event) -> Result<String> {
477 if let Ok(msg) = tag_value(patch, "description") {
478 Ok(msg)
479 } else {
480 let start_index = patch
481 .content
482 .find("] ")
483 .context("event is not formatted as a patch or cover letter")?
484 + 2;
485 let end_index = patch.content[start_index..]
486 .find("\ndiff --git")
487 .unwrap_or(patch.content.len());
488 Ok(patch.content[start_index..end_index].to_string())
489 }
490}
491
492pub fn commit_msg_from_patch_oneliner(patch: &nostr::Event) -> Result<String> {
493 Ok(commit_msg_from_patch(patch)?
494 .split('\n')
495 .collect::<Vec<&str>>()[0]
496 .to_string())
497}
498
475pub fn event_to_cover_letter(event: &nostr::Event) -> Result<CoverLetter> { 499pub fn event_to_cover_letter(event: &nostr::Event) -> Result<CoverLetter> {
476 if !event_is_patch_set_root(event) { 500 if !event_is_patch_set_root(event) {
477 bail!("event is not a patch set root event (root patch or cover letter)") 501 bail!("event is not a patch set root event (root patch or cover letter)")
478 } 502 }
479 let title_index = event
480 .content
481 .find("] ")
482 .context("event is not formatted as a patch or cover letter")?
483 + 2;
484 let description_index = event.content[title_index..]
485 .find('\n')
486 .unwrap_or(event.content.len() - 1 - title_index)
487 + title_index;
488
489 let description_index_end = event.content[title_index..]
490 .find("\ndiff --git")
491 .unwrap_or(event.content.len() - 1);
492
493 let title = if let Ok(msg) = tag_value(event, "description") {
494 msg.split('\n').collect::<Vec<&str>>()[0].to_string()
495 } else {
496 event.content[title_index..description_index].to_string()
497 };
498 503
499 let description = if let Ok(msg) = tag_value(event, "description") { 504 let title = commit_msg_from_patch_oneliner(event)?;
500 if let Some((_before, after)) = msg.split_once('\n') { 505 let full = commit_msg_from_patch(event)?;
501 after.trim().to_string() 506 let description = full[title.len()..].trim().to_string();
502 } else {
503 String::new()
504 }
505 } else {
506 event.content[description_index..=description_index_end]
507 .trim()
508 .to_string()
509 };
510 507
511 Ok(CoverLetter { 508 Ok(CoverLetter {
512 title: title.clone(), 509 title: title.clone(),