MCPcopy Create free account
hub / github.com/ChrisFeldmeier/OpenCodeRust / cleanup

Method cleanup

crates/opencode-session/src/revert.rs:162–210  ·  view source on GitHub ↗
(
        &self,
        session_id: &str,
        revert: &RevertInfo,
        manager: &mut SessionManager,
    )

Source from the content-addressed store, hash-verified

160 }
161
162 pub fn cleanup(
163 &self,
164 session_id: &str,
165 revert: &RevertInfo,
166 manager: &mut SessionManager,
167 ) -> Result<()> {
168 let session = match manager.get(session_id) {
169 Some(s) => s.clone(),
170 None => return Ok(()),
171 };
172
173 let message_id = &revert.message_id;
174 let messages = &session.messages;
175
176 let mut preserve: Vec<crate::SessionMessage> = Vec::new();
177 let mut target_msg: Option<crate::SessionMessage> = None;
178
179 for msg in messages {
180 if msg.id < *message_id {
181 preserve.push(msg.clone());
182 continue;
183 }
184 if msg.id > *message_id {
185 continue;
186 }
187 if revert.part_id.is_some() {
188 target_msg = Some(msg.clone());
189 continue;
190 }
191 }
192
193 if let (Some(part_id), Some(mut target)) = (&revert.part_id, target_msg) {
194 let remove_start = target.parts.iter().position(|p| &p.id == part_id);
195
196 if let Some(start) = remove_start {
197 let preserve_parts: Vec<crate::MessagePart> =
198 target.parts.iter().take(start).cloned().collect();
199 target.parts = preserve_parts;
200 preserve.push(target);
201 }
202 }
203
204 if let Some(session) = manager.get_mut(session_id) {
205 session.messages = preserve;
206 session.clear_revert();
207 }
208
209 Ok(())
210 }
211
212 /// Compute file diffs from session messages.
213 ///

Callers 1

cleanupFunction · 0.45

Calls 5

newFunction · 0.85
clear_revertMethod · 0.80
getMethod · 0.45
cloneMethod · 0.45
get_mutMethod · 0.45

Tested by

no test coverage detected