upleb.uk

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

summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/client.rs45
-rw-r--r--src/lib/git_events.rs3
2 files changed, 39 insertions, 9 deletions
diff --git a/src/lib/client.rs b/src/lib/client.rs
index e808bea..ae3b414 100644
--- a/src/lib/client.rs
+++ b/src/lib/client.rs
@@ -31,6 +31,7 @@ use indicatif::{MultiProgress, ProgressBar, ProgressDrawTarget, ProgressState, P
31use mockall::*; 31use mockall::*;
32use nostr::{ 32use nostr::{
33 Event, 33 Event,
34 event::{TagKind, TagStandard},
34 filter::Alphabet, 35 filter::Alphabet,
35 nips::{nip01::Coordinate, nip19::Nip19Coordinate}, 36 nips::{nip01::Coordinate, nip19::Nip19Coordinate},
36 signer::SignerBackend, 37 signer::SignerBackend,
@@ -47,7 +48,8 @@ use crate::{
47 get_dirs, 48 get_dirs,
48 git::{Repo, RepoActions, get_git_config_item}, 49 git::{Repo, RepoActions, get_git_config_item},
49 git_events::{ 50 git_events::{
50 event_is_cover_letter, event_is_patch_set_root, event_is_revision_root, status_kinds, 51 KIND_PULL_REQUEST, KIND_PULL_REQUEST_UPDATE, event_is_cover_letter,
52 event_is_patch_set_root, event_is_revision_root, status_kinds,
51 }, 53 },
52 login::{get_likely_logged_in_user, user::get_user_ref_from_cache}, 54 login::{get_likely_logged_in_user, user::get_user_ref_from_cache},
53 repo_ref::RepoRef, 55 repo_ref::RepoRef,
@@ -1459,7 +1461,7 @@ async fn process_fetched_events(
1459 report.updated_state = Some((event.created_at, event.id)); 1461 report.updated_state = Some((event.created_at, event.id));
1460 } 1462 }
1461 } 1463 }
1462 } else if event_is_patch_set_root(event) { 1464 } else if event_is_patch_set_root(event) || event.kind.eq(&KIND_PULL_REQUEST) {
1463 fresh_proposal_roots.insert(event.id); 1465 fresh_proposal_roots.insert(event.id);
1464 report.proposals.insert(event.id); 1466 report.proposals.insert(event.id);
1465 if !request.contributors.contains(&event.pubkey) 1467 if !request.contributors.contains(&event.pubkey)
@@ -1487,12 +1489,23 @@ async fn process_fetched_events(
1487 } 1489 }
1488 for event in &events { 1490 for event in &events {
1489 if !request.existing_events.contains(&event.id) 1491 if !request.existing_events.contains(&event.id)
1490 && !event 1492 && (!event
1491 .tags 1493 .tags
1492 .event_ids() 1494 .event_ids()
1493 .any(|id| report.proposals.contains(id)) 1495 .any(|id| report.proposals.contains(id))
1496 || event
1497 .tags
1498 .filter_standardized(TagKind::Custom(std::borrow::Cow::Borrowed("E")))
1499 .filter_map(|t| match t {
1500 TagStandard::Event { event_id, .. } => Some(event_id),
1501 TagStandard::EventReport(event_id, ..) => Some(event_id),
1502 _ => None,
1503 })
1504 .any(|id| report.proposals.contains(id)))
1494 { 1505 {
1495 if event.kind.eq(&Kind::GitPatch) && !event_is_patch_set_root(event) { 1506 if (event.kind.eq(&Kind::GitPatch) && !event_is_patch_set_root(event))
1507 || event.kind.eq(&KIND_PULL_REQUEST_UPDATE)
1508 {
1496 report.commits.insert(event.id); 1509 report.commits.insert(event.id);
1497 } else if status_kinds().contains(&event.kind) { 1510 } else if status_kinds().contains(&event.kind) {
1498 report.statuses.insert(event.id); 1511 report.statuses.insert(event.id);
@@ -1570,7 +1583,7 @@ pub fn get_fetch_filters(
1570 get_filter_state_events(repo_coordinates), 1583 get_filter_state_events(repo_coordinates),
1571 get_filter_repo_events(repo_coordinates), 1584 get_filter_repo_events(repo_coordinates),
1572 nostr::Filter::default() 1585 nostr::Filter::default()
1573 .kinds(vec![Kind::GitPatch, Kind::EventDeletion]) 1586 .kinds(vec![Kind::GitPatch, Kind::EventDeletion, KIND_PULL_REQUEST])
1574 .custom_tags( 1587 .custom_tags(
1575 SingleLetterTag::lowercase(nostr_sdk::Alphabet::A), 1588 SingleLetterTag::lowercase(nostr_sdk::Alphabet::A),
1576 repo_coordinates 1589 repo_coordinates
@@ -1584,15 +1597,29 @@ pub fn get_fetch_filters(
1584 vec![] 1597 vec![]
1585 } else { 1598 } else {
1586 vec![ 1599 vec![
1587 nostr::Filter::default() 1600 nostr::Filter::default().events(proposal_ids.clone()).kinds(
1588 .events(proposal_ids.clone()) 1601 [
1589 .kinds([vec![Kind::GitPatch, Kind::EventDeletion], status_kinds()].concat()), 1602 vec![
1603 Kind::GitPatch,
1604 Kind::EventDeletion,
1605 KIND_PULL_REQUEST_UPDATE,
1606 ],
1607 status_kinds(),
1608 ]
1609 .concat(),
1610 ),
1590 nostr::Filter::default() 1611 nostr::Filter::default()
1591 .custom_tags( 1612 .custom_tags(
1592 SingleLetterTag::uppercase(Alphabet::E), 1613 SingleLetterTag::uppercase(Alphabet::E),
1593 proposal_ids.clone(), 1614 proposal_ids.clone(),
1594 ) 1615 )
1595 .kinds([vec![Kind::GitPatch, Kind::EventDeletion], status_kinds()].concat()), 1616 .kinds(
1617 [
1618 vec![Kind::EventDeletion, KIND_PULL_REQUEST_UPDATE],
1619 status_kinds(),
1620 ]
1621 .concat(),
1622 ),
1596 ] 1623 ]
1597 }, 1624 },
1598 if required_profiles.is_empty() { 1625 if required_profiles.is_empty() {
diff --git a/src/lib/git_events.rs b/src/lib/git_events.rs
index 69406c1..80793bd 100644
--- a/src/lib/git_events.rs
+++ b/src/lib/git_events.rs
@@ -58,6 +58,9 @@ pub fn status_kinds() -> Vec<Kind> {
58 ] 58 ]
59} 59}
60 60
61pub const KIND_PULL_REQUEST: Kind = Kind::Custom(1618);
62pub const KIND_PULL_REQUEST_UPDATE: Kind = Kind::Custom(1619);
63
61pub fn event_is_patch_set_root(event: &Event) -> bool { 64pub fn event_is_patch_set_root(event: &Event) -> bool {
62 event.kind.eq(&Kind::GitPatch) 65 event.kind.eq(&Kind::GitPatch)
63 && event 66 && event