Fix/out of index (#3872)

This commit is contained in:
Jarrett Ye 2025-03-25 01:04:25 +08:00 committed by GitHub
parent d52889f45c
commit a4e0a0824b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 21 additions and 9 deletions

View file

@ -152,14 +152,23 @@ impl Collection {
let mut revlog_index = 0; let mut revlog_index = 0;
for entry in revlog { for entry in revlog {
let mut stats_entry = stats_revlog_entry(&entry); let mut stats_entry = stats_revlog_entry(&entry);
let memory_state: FsrsMemoryState = let memory_state: Option<FsrsMemoryState> = if revlog_index >= memory_states.len() {
if entry.id == item.filtered_revlogs[revlog_index].id { // The removed revlog is in the end of the revlog, so we use the last memory
// state
Some(memory_states[memory_states.len() - 1].into())
} else if entry.id == item.filtered_revlogs[revlog_index].id {
revlog_index += 1; revlog_index += 1;
memory_states[revlog_index - 1].into() Some(memory_states[revlog_index - 1].into())
} else if revlog_index == 0 {
// The removed revlog is in the start of the revlog, so we don't have a memory
// state for it
None
} else { } else {
memory_states[revlog_index].into() // The removed revlog is in the middle of the revlog, so we use the memory
// state for the previous revlog entry
Some(memory_states[revlog_index].into())
}; };
stats_entry.memory_state = Some(memory_state.into()); stats_entry.memory_state = memory_state.map(|s| s.into());
result.push(stats_entry); result.push(stats_entry);
} }
Ok(result.into_iter().rev().collect()) Ok(result.into_iter().rev().collect())

View file

@ -56,7 +56,10 @@ export function filterRevlogEntryByReviewKind(entry: RevlogEntry): boolean {
export function filterRevlog(revlog: RevlogEntry[]): RevlogEntry[] { export function filterRevlog(revlog: RevlogEntry[]): RevlogEntry[] {
const result: RevlogEntry[] = []; const result: RevlogEntry[] = [];
for (const entry of revlog) { for (const entry of revlog) {
if (entry.reviewKind === RevlogEntry_ReviewKind.MANUAL && entry.ease === 0) { if (
(entry.reviewKind === RevlogEntry_ReviewKind.MANUAL && entry.ease === 0)
|| entry.memoryState === undefined
) {
break; break;
} }
result.push(entry); result.push(entry);