upleb.uk

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

summaryrefslogtreecommitdiff
path: root/src/purgatory/mod.rs
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2026-01-07 12:24:42 +0000
committerDanConwayDev <DanConwayDev@protonmail.com>2026-01-07 12:24:42 +0000
commite72edbae86affcb9fc0429bd197639bf438ffb6c (patch)
treeb59f31287d10fe9b22d7e5af4cb3aa94ef06dc8a /src/purgatory/mod.rs
parent18bfb246029a848a0b307e7c8a8e4df57addabb2 (diff)
Add unified process_newly_available_git_data function
Implement the unified function that handles all post-git-data-available processing, regardless of how data arrived (git push or purgatory sync). This function: - Discovers satisfiable events from purgatory (state and PR events) - Syncs OIDs to authorized owner repos - Aligns refs and sets HEAD - Saves events to database - Notifies WebSocket subscribers - Removes from purgatory New additions: - ProcessResult struct for tracking processing outcomes - process_newly_available_git_data async function in src/git/sync.rs - Helper functions: extract_identifier_from_repo_path, extract_identifier_from_pr_event - Purgatory::find_prs_for_identifier method for PR event discovery - Unit tests for all helper functions Also fixes: - Simplified extract_domain to avoid url crate dependency - Removed unused imports in sync/loop.rs
Diffstat (limited to 'src/purgatory/mod.rs')
-rw-r--r--src/purgatory/mod.rs27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/purgatory/mod.rs b/src/purgatory/mod.rs
index fcb812b..11fe41f 100644
--- a/src/purgatory/mod.rs
+++ b/src/purgatory/mod.rs
@@ -365,6 +365,33 @@ impl Purgatory {
365 }) 365 })
366 } 366 }
367 367
368 /// Find all PR events for a specific repository identifier.
369 ///
370 /// PR events reference repositories via `a` tags with format `30617:<owner_pubkey>:<identifier>`.
371 /// This function scans all PR entries and returns those that reference the given identifier.
372 ///
373 /// Note: This is a linear scan since PR events are indexed by event_id, not by identifier.
374 /// For repositories with many PR events, this could be optimized with a secondary index.
375 ///
376 /// # Arguments
377 /// * `identifier` - The repository identifier to search for
378 ///
379 /// # Returns
380 /// Vector of PR purgatory entries that reference this identifier
381 pub fn find_prs_for_identifier(&self, identifier: &str) -> Vec<PrPurgatoryEntry> {
382 self.pr_events
383 .iter()
384 .filter(|entry| {
385 if let Some(ref event) = entry.value().event {
386 Self::event_references_identifier(event, identifier)
387 } else {
388 false
389 }
390 })
391 .map(|entry| entry.value().clone())
392 .collect()
393 }
394
368 /// Remove a state event from purgatory. 395 /// Remove a state event from purgatory.
369 /// 396 ///
370 /// Removes all entries for the given identifier. 397 /// Removes all entries for the given identifier.