From 873ec6fd947c76961318beb691b4e1f65e98bb03 Mon Sep 17 00:00:00 2001 From: Hammed Abass Date: Tue, 21 Jul 2026 18:23:50 +0200 Subject: [PATCH] fix(diagnostics): stabilize pending crash ordering --- .../vnidrop/app/diagnostics/PendingCrashStore.jvm.kt | 10 ++++++++-- .../app/diagnostics/PendingCrashStoreJvmTest.kt | 3 +++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/shared/src/jvmMain/kotlin/com/vnidrop/app/diagnostics/PendingCrashStore.jvm.kt b/shared/src/jvmMain/kotlin/com/vnidrop/app/diagnostics/PendingCrashStore.jvm.kt index 1935f7c..3c5c099 100644 --- a/shared/src/jvmMain/kotlin/com/vnidrop/app/diagnostics/PendingCrashStore.jvm.kt +++ b/shared/src/jvmMain/kotlin/com/vnidrop/app/diagnostics/PendingCrashStore.jvm.kt @@ -31,10 +31,13 @@ private class JvmPendingCrashStore( return directory .listFiles { file -> file.isFile && file.name.endsWith(".crash") } .orEmpty() - .sortedByDescending { it.lastModified() } .mapNotNull { file -> runCatching { CrashReportCodec.decode(file.readText(StandardCharsets.UTF_8)) }.getOrNull() } + .sortedWith( + compareByDescending { it.timestampMillis } + .thenBy { it.id }, + ) } @Synchronized @@ -64,7 +67,10 @@ private class JvmPendingCrashStore( file to report } } - .sortedByDescending { (_, report) -> report.timestampMillis } + .sortedWith( + compareByDescending> { (_, report) -> report.timestampMillis } + .thenBy { (_, report) -> report.id }, + ) reports.forEachIndexed { index, (file, report) -> if (index >= maxCount || report.timestampMillis < olderThanTimestampMillis) file.delete() } diff --git a/shared/src/jvmTest/kotlin/com/vnidrop/app/diagnostics/PendingCrashStoreJvmTest.kt b/shared/src/jvmTest/kotlin/com/vnidrop/app/diagnostics/PendingCrashStoreJvmTest.kt index 054abd0..1ef7285 100644 --- a/shared/src/jvmTest/kotlin/com/vnidrop/app/diagnostics/PendingCrashStoreJvmTest.kt +++ b/shared/src/jvmTest/kotlin/com/vnidrop/app/diagnostics/PendingCrashStoreJvmTest.kt @@ -2,6 +2,7 @@ package com.vnidrop.app.diagnostics import java.io.File import java.nio.file.Files +import java.nio.file.attribute.FileTime import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertFalse @@ -24,6 +25,8 @@ class PendingCrashStoreJvmTest { File(directory, ".orphan.tmp").writeText("partial") store.write(current.copy(id = "../../escape")) val escapedPath = File(directory, "../../escape.crash").canonicalFile + Files.setLastModifiedTime(File(directory, "${older.id}.crash").toPath(), FileTime.fromMillis(2_000)) + Files.setLastModifiedTime(File(directory, "${current.id}.crash").toPath(), FileTime.fromMillis(1_000)) assertEquals( listOf("replaced", "older"),