Compare commits

...
Sign in to create a new pull request.

2 commits

Author SHA1 Message Date
nexy7574
cd95f29ece
feat: Allow manually specifying event IDs as extremities 2025-08-31 22:53:58 +01:00
nexy7574
39023b5ed3
feat: Add force-set-latest-extremity command 2025-08-31 21:51:04 +01:00
2 changed files with 56 additions and 0 deletions

View file

@ -920,3 +920,49 @@ pub(super) async fn trim_memory(&self) -> Result {
writeln!(self, "done").await
}
#[admin_command]
pub(super) async fn force_append_latest_extremity(
&self,
room_id: OwnedRoomId,
event_id: Option<OwnedEventId>,
) -> Result {
let lock = self.services.rooms.state.mutex.lock(&*room_id).await;
let mut extremities: Vec<&EventId> = self
.services
.rooms
.state
.get_forward_extremities(&room_id)
.collect()
.await;
let selected_id = if let Some(event_id) = event_id {
event_id
} else {
self.services
.rooms
.timeline
.latest_pdu_in_room(&room_id)
.await
.map_err(|_| err!(Database("Failed to find the latest PDU in database")))?
.event_id()
.to_owned()
};
if !extremities.contains(&selected_id.as_ref()) {
extremities.push(&selected_id);
}
self.services
.rooms
.state
.set_forward_extremities(&room_id, extremities.iter().copied(), &lock)
.await;
self.write_str(&format!(
"Successfully retained the following {} forward extremities in room \
{room_id}:\n```\n{extremities:?}\n```",
extremities.len()
))
.await
}

View file

@ -237,6 +237,16 @@ pub enum DebugCommand {
level: Option<i32>,
},
/// - Forcefully add the latest known event in the specified room as a
/// forward extremity. Use with caution.
ForceAppendLatestExtremity {
/// The room ID
room_id: OwnedRoomId,
/// If set, forcefully picks an event ID to use as an extremity. Is not
/// validated.
event_id: Option<OwnedEventId>,
},
/// - Developer test stubs
#[command(subcommand)]
#[allow(non_snake_case)]