diff --git a/system/src/Grav/Common/Upgrade/SafeUpgradeService.php b/system/src/Grav/Common/Upgrade/SafeUpgradeService.php index e313f2bc3..f9c7af4aa 100644 --- a/system/src/Grav/Common/Upgrade/SafeUpgradeService.php +++ b/system/src/Grav/Common/Upgrade/SafeUpgradeService.php @@ -1184,7 +1184,12 @@ class SafeUpgradeService // Sort by created_at descending usort($manifests, static function ($a, $b) { - return $b['created_at'] <=> $a['created_at']; + $result = $b['created_at'] <=> $a['created_at']; + if ($result === 0) { + return strcmp($b['path'], $a['path']); + } + + return $result; }); $toDelete = array_slice($manifests, $limit); diff --git a/tests/unit/Grav/Common/Upgrade/SafeUpgradeServiceTest.php b/tests/unit/Grav/Common/Upgrade/SafeUpgradeServiceTest.php index 11f26c186..da2f5d252 100644 --- a/tests/unit/Grav/Common/Upgrade/SafeUpgradeServiceTest.php +++ b/tests/unit/Grav/Common/Upgrade/SafeUpgradeServiceTest.php @@ -132,9 +132,6 @@ class SafeUpgradeServiceTest extends \PHPUnit\Framework\TestCase $manifests[] = $service->promote($package, '1.8.' . $i, ['backup', 'cache', 'images', 'logs', 'tmp', 'user']); // Ensure subsequent promotions have a marker to restore. file_put_contents($root . '/ORIGINAL', 'state-' . $i); - // Sleep to ensure different timestamps for sorting (time() has 1s resolution) - sleep(1); - usleep(100000); // +100ms to be sure } $files = glob($manifestStore . '/*.json');