From 6ae42e67d9da36f6c2e1356acba30a3a62112bc7 Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Mon, 4 Aug 2025 08:20:30 +0100 Subject: 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. --- src/bin/git_remote_nostr/push.rs | 9 ++++----- src/lib/git_events.rs | 12 ++++++------ test_utils/src/lib.rs | 2 +- tests/git_remote_nostr/push.rs | 6 +++++- tests/ngit_send.rs | 19 ++++++++----------- 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( bail!("thread root is not a git patch"); } - if proposal_or_revision - .tags - .iter() - .any(|t| t.as_slice().len() > 1 && t.as_slice()[1].eq("revision-root")) - { + if proposal_or_revision.tags.iter().any(|t| { + t.as_slice().len() > 1 + && ["revision-root", "root-revision"].contains(&t.as_slice()[1].as_str()) + }) { Ok(( EventId::parse( &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 { pub fn event_is_revision_root(event: &Event) -> bool { (event.kind.eq(&Kind::GitPatch) - && event - .tags - .iter() - .any(|t| t.as_slice().len() > 1 && t.as_slice()[1].eq("revision-root"))) + && event.tags.iter().any(|t| { + t.as_slice().len() > 1 + && ["revision-root", "root-revision"].contains(&t.as_slice()[1].as_str()) + })) || (event.kind.eq(&KIND_PULL_REQUEST) && event .tags @@ -179,7 +179,7 @@ pub async fn generate_patch_event( } else if let Some(event_ref) = root_proposal_id.clone() { vec![ Tag::hashtag("root"), - Tag::hashtag("revision-root"), + Tag::hashtag("root-revision"), // TODO check if id is for a root proposal (perhaps its for an issue?) event_tag_from_nip19_or_hex( &event_ref, @@ -598,7 +598,7 @@ pub async fn generate_cover_letter_and_patch_events( if let Some(event_ref) = root_proposal_id.clone() { vec![ Tag::hashtag("root"), - Tag::hashtag("revision-root"), + Tag::hashtag("root-revision"), // TODO check if id is for a root proposal (perhaps its for an issue?) event_tag_from_nip19_or_hex(&event_ref,"proposal",EventRefType::Reply, false, false)?, ] 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( if !event .tags .iter() - .any(|t| t.as_slice()[1].eq("revision-root")) + .any(|t| ["revision-root", "root-revision"].contains(&t.as_slice()[1].as_str())) && event.tags.iter().any(|t| { t.as_slice()[0].eq("branch-name") && t.as_slice()[1].eq(branch_name_in_event) }) 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<()> { let revision_root_patch = new_events .iter() - .find(|e| e.tags.iter().any(|t| t.as_slice()[1].eq("revision-root"))) + .find(|e| { + e.tags + .iter() + .any(|t| ["revision-root", "root-revision"].contains(&t.as_slice()[1].as_str())) + }) .unwrap(); 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 for relay in [&r53, &r55, &r56] { let cover_letter_event: &nostr::Event = relay.events.iter().find(|e| is_cover_letter(e)).unwrap(); - assert!( - cover_letter_event.tags.iter().any(|t| { - t.as_slice()[0].eq("t") && t.as_slice()[1].eq(&"revision-root") - }) - ); + assert!(cover_letter_event.tags.iter().any(|t| { + t.as_slice()[0].eq("t") + && ["revision-root", "root-revision"].contains(&t.as_slice()[1].as_str()) + })); } Ok(()) } @@ -1773,12 +1772,10 @@ mod in_reply_to_mentions_issue { for relay in [&r53, &r55, &r56] { let cover_letter_event: &nostr::Event = relay.events.iter().find(|e| is_cover_letter(e)).unwrap(); - assert!( - !cover_letter_event - .tags - .iter() - .any(|t| { t.as_slice()[0].eq("t") && t.as_slice()[1].eq(&"revision-root") }) - ); + assert!(!cover_letter_event.tags.iter().any(|t| { + t.as_slice()[0].eq("t") + && ["revision-root", "root-revision"].contains(&t.as_slice()[1].as_str()) + })); } Ok(()) } -- cgit v1.2.3