upleb.uk

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

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/purgatory/mod.rs65
1 files changed, 40 insertions, 25 deletions
diff --git a/src/purgatory/mod.rs b/src/purgatory/mod.rs
index 3c6bc1b..f5f8b31 100644
--- a/src/purgatory/mod.rs
+++ b/src/purgatory/mod.rs
@@ -898,33 +898,48 @@ impl Purgatory {
898 "Announcement fully expired from purgatory (soft expiry period elapsed)" 898 "Announcement fully expired from purgatory (soft expiry period elapsed)"
899 ); 899 );
900 } else { 900 } else {
901 // Phase 1: soft expiry — delete bare repo, retain event 901 // Phase 1: soft expiry — delete bare repo, retain event.
902 if repo_path.exists() { 902 //
903 if let Err(e) = std::fs::remove_dir_all(&repo_path) { 903 // Only transition to soft_expired if the directory is gone (or never
904 tracing::warn!( 904 // existed). If removal fails we leave the entry untouched so the next
905 path = %repo_path.display(), 905 // cleanup cycle retries the deletion automatically.
906 error = %e, 906 let repo_gone = if repo_path.exists() {
907 "Failed to delete bare repository during soft expiry" 907 match std::fs::remove_dir_all(&repo_path) {
908 ); 908 Ok(()) => {
909 } else { 909 tracing::info!(
910 tracing::info!( 910 path = %repo_path.display(),
911 path = %repo_path.display(), 911 owner = %owner,
912 owner = %owner, 912 identifier = %identifier,
913 identifier = %identifier, 913 "Deleted bare repository during soft expiry (event retained for revival)"
914 "Deleted bare repository during soft expiry (event retained for revival)" 914 );
915 ); 915 true
916 }
917 Err(e) => {
918 tracing::warn!(
919 path = %repo_path.display(),
920 error = %e,
921 "Failed to delete bare repository during soft expiry; will retry next cleanup cycle"
922 );
923 false
924 }
916 } 925 }
926 } else {
927 // Already gone (e.g. deleted externally)
928 true
929 };
930
931 if repo_gone {
932 // Mark soft_expired and extend expiry
933 if let Some(mut entry) = self.announcement_purgatory.get_mut(&(owner.clone(), identifier.clone())) {
934 entry.soft_expired = true;
935 entry.expires_at = now + SOFT_EXPIRY_EXTENDED;
936 }
937 tracing::debug!(
938 owner = %owner,
939 identifier = %identifier,
940 "Announcement soft-expired: bare repo deleted, event retained for 24h"
941 );
917 } 942 }
918 // Mark soft_expired and extend expiry
919 if let Some(mut entry) = self.announcement_purgatory.get_mut(&(owner.clone(), identifier.clone())) {
920 entry.soft_expired = true;
921 entry.expires_at = now + SOFT_EXPIRY_EXTENDED;
922 }
923 tracing::debug!(
924 owner = %owner,
925 identifier = %identifier,
926 "Announcement soft-expired: bare repo deleted, event retained for 24h"
927 );
928 } 943 }
929 } 944 }
930 945