upleb.uk

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

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2025-08-04 08:20:30 +0100
committerDanConwayDev <DanConwayDev@protonmail.com>2025-08-04 08:20:30 +0100
commit6ae42e67d9da36f6c2e1356acba30a3a62112bc7 (patch)
tree33c1ba06fc1bf79311a36693754b120ec8c67a33
parenta7cabb96df30cd5d26f63affdb023b0706a387d1 (diff)
fix: `t` tag `revision-root` ~> `root-revision`
NIP-34 specifies patch revisions should have a `t` tag of `root-revision` whereas we have been using `revision-root`. this fixes it and and handles events created with the incorrect tag.
-rw-r--r--src/bin/git_remote_nostr/push.rs9
-rw-r--r--src/lib/git_events.rs12
-rw-r--r--test_utils/src/lib.rs2
-rw-r--r--tests/git_remote_nostr/push.rs6
-rw-r--r--tests/ngit_send.rs19
5 files changed, 24 insertions, 24 deletions
diff --git a/src/bin/git_remote_nostr/push.rs b/src/bin/git_remote_nostr/push.rs
index 9ba7c30..d0cf923 100644
--- a/src/bin/git_remote_nostr/push.rs
+++ b/src/bin/git_remote_nostr/push.rs
@@ -1365,11 +1365,10 @@ async fn get_proposal_and_revision_root_from_patch(
1365 bail!("thread root is not a git patch"); 1365 bail!("thread root is not a git patch");
1366 } 1366 }
1367 1367
1368 if proposal_or_revision 1368 if proposal_or_revision.tags.iter().any(|t| {
1369 .tags 1369 t.as_slice().len() > 1
1370 .iter() 1370 && ["revision-root", "root-revision"].contains(&t.as_slice()[1].as_str())
1371 .any(|t| t.as_slice().len() > 1 && t.as_slice()[1].eq("revision-root")) 1371 }) {
1372 {
1373 Ok(( 1372 Ok((
1374 EventId::parse( 1373 EventId::parse(
1375 &proposal_or_revision 1374 &proposal_or_revision
diff --git a/src/lib/git_events.rs b/src/lib/git_events.rs
index 79f5772..8ba5419 100644
--- a/src/lib/git_events.rs
+++ b/src/lib/git_events.rs
@@ -74,10 +74,10 @@ pub fn event_is_patch_set_root(event: &Event) -> bool {
74 74
75pub fn event_is_revision_root(event: &Event) -> bool { 75pub fn event_is_revision_root(event: &Event) -> bool {
76 (event.kind.eq(&Kind::GitPatch) 76 (event.kind.eq(&Kind::GitPatch)
77 && event 77 && event.tags.iter().any(|t| {
78 .tags 78 t.as_slice().len() > 1
79 .iter() 79 && ["revision-root", "root-revision"].contains(&t.as_slice()[1].as_str())
80 .any(|t| t.as_slice().len() > 1 && t.as_slice()[1].eq("revision-root"))) 80 }))
81 || (event.kind.eq(&KIND_PULL_REQUEST) 81 || (event.kind.eq(&KIND_PULL_REQUEST)
82 && event 82 && event
83 .tags 83 .tags
@@ -179,7 +179,7 @@ pub async fn generate_patch_event(
179 } else if let Some(event_ref) = root_proposal_id.clone() { 179 } else if let Some(event_ref) = root_proposal_id.clone() {
180 vec![ 180 vec![
181 Tag::hashtag("root"), 181 Tag::hashtag("root"),
182 Tag::hashtag("revision-root"), 182 Tag::hashtag("root-revision"),
183 // TODO check if id is for a root proposal (perhaps its for an issue?) 183 // TODO check if id is for a root proposal (perhaps its for an issue?)
184 event_tag_from_nip19_or_hex( 184 event_tag_from_nip19_or_hex(
185 &event_ref, 185 &event_ref,
@@ -598,7 +598,7 @@ pub async fn generate_cover_letter_and_patch_events(
598 if let Some(event_ref) = root_proposal_id.clone() { 598 if let Some(event_ref) = root_proposal_id.clone() {
599 vec![ 599 vec![
600 Tag::hashtag("root"), 600 Tag::hashtag("root"),
601 Tag::hashtag("revision-root"), 601 Tag::hashtag("root-revision"),
602 // TODO check if id is for a root proposal (perhaps its for an issue?) 602 // TODO check if id is for a root proposal (perhaps its for an issue?)
603 event_tag_from_nip19_or_hex(&event_ref,"proposal",EventRefType::Reply, false, false)?, 603 event_tag_from_nip19_or_hex(&event_ref,"proposal",EventRefType::Reply, false, false)?,
604 ] 604 ]
diff --git a/test_utils/src/lib.rs b/test_utils/src/lib.rs
index 3ae004f..6d0dd45 100644
--- a/test_utils/src/lib.rs
+++ b/test_utils/src/lib.rs
@@ -1182,7 +1182,7 @@ pub fn get_proposal_branch_name_from_events(
1182 if !event 1182 if !event
1183 .tags 1183 .tags
1184 .iter() 1184 .iter()
1185 .any(|t| t.as_slice()[1].eq("revision-root")) 1185 .any(|t| ["revision-root", "root-revision"].contains(&t.as_slice()[1].as_str()))
1186 && event.tags.iter().any(|t| { 1186 && event.tags.iter().any(|t| {
1187 t.as_slice()[0].eq("branch-name") && t.as_slice()[1].eq(branch_name_in_event) 1187 t.as_slice()[0].eq("branch-name") && t.as_slice()[1].eq(branch_name_in_event)
1188 }) 1188 })
diff --git a/tests/git_remote_nostr/push.rs b/tests/git_remote_nostr/push.rs
index a137da5..2afadf9 100644
--- a/tests/git_remote_nostr/push.rs
+++ b/tests/git_remote_nostr/push.rs
@@ -1688,7 +1688,11 @@ async fn force_push_creates_proposal_revision() -> Result<()> {
1688 1688
1689 let revision_root_patch = new_events 1689 let revision_root_patch = new_events
1690 .iter() 1690 .iter()
1691 .find(|e| e.tags.iter().any(|t| t.as_slice()[1].eq("revision-root"))) 1691 .find(|e| {
1692 e.tags
1693 .iter()
1694 .any(|t| ["revision-root", "root-revision"].contains(&t.as_slice()[1].as_str()))
1695 })
1692 .unwrap(); 1696 .unwrap();
1693 1697
1694 assert_eq!( 1698 assert_eq!(
diff --git a/tests/ngit_send.rs b/tests/ngit_send.rs
index 9a46469..b0c1768 100644
--- a/tests/ngit_send.rs
+++ b/tests/ngit_send.rs
@@ -1592,11 +1592,10 @@ mod root_proposal_specified_using_in_reply_to_with_range_of_head_2_and_cover_let
1592 for relay in [&r53, &r55, &r56] { 1592 for relay in [&r53, &r55, &r56] {
1593 let cover_letter_event: &nostr::Event = 1593 let cover_letter_event: &nostr::Event =
1594 relay.events.iter().find(|e| is_cover_letter(e)).unwrap(); 1594 relay.events.iter().find(|e| is_cover_letter(e)).unwrap();
1595 assert!( 1595 assert!(cover_letter_event.tags.iter().any(|t| {
1596 cover_letter_event.tags.iter().any(|t| { 1596 t.as_slice()[0].eq("t")
1597 t.as_slice()[0].eq("t") && t.as_slice()[1].eq(&"revision-root") 1597 && ["revision-root", "root-revision"].contains(&t.as_slice()[1].as_str())
1598 }) 1598 }));
1599 );
1600 } 1599 }
1601 Ok(()) 1600 Ok(())
1602 } 1601 }
@@ -1773,12 +1772,10 @@ mod in_reply_to_mentions_issue {
1773 for relay in [&r53, &r55, &r56] { 1772 for relay in [&r53, &r55, &r56] {
1774 let cover_letter_event: &nostr::Event = 1773 let cover_letter_event: &nostr::Event =
1775 relay.events.iter().find(|e| is_cover_letter(e)).unwrap(); 1774 relay.events.iter().find(|e| is_cover_letter(e)).unwrap();
1776 assert!( 1775 assert!(!cover_letter_event.tags.iter().any(|t| {
1777 !cover_letter_event 1776 t.as_slice()[0].eq("t")
1778 .tags 1777 && ["revision-root", "root-revision"].contains(&t.as_slice()[1].as_str())
1779 .iter() 1778 }));
1780 .any(|t| { t.as_slice()[0].eq("t") && t.as_slice()[1].eq(&"revision-root") })
1781 );
1782 } 1779 }
1783 Ok(()) 1780 Ok(())
1784 } 1781 }