From e2764cd291a6f5b91b03cbc3f8206bd2f5d0cd5c Mon Sep 17 00:00:00 2001 From: Duncan McClean Date: Mon, 31 Aug 2026 09:54:09 +0100 Subject: [PATCH] prevent deleted entries from being restored --- src/Stache/Stores/BasicStore.php | 4 ++++ tests/Stache/FeatureTest.php | 28 ++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/src/Stache/Stores/BasicStore.php b/src/Stache/Stores/BasicStore.php index b0af2fd90f4..560faf35e36 100644 --- a/src/Stache/Stores/BasicStore.php +++ b/src/Stache/Stores/BasicStore.php @@ -31,6 +31,10 @@ public function getItem($key) return $item; } + if (! File::exists($path)) { + return null; + } + $item = $this->makeItemFromFile($path, File::get($path)); $this->cacheItem($item); diff --git a/tests/Stache/FeatureTest.php b/tests/Stache/FeatureTest.php index 27ea9bbc252..d4ebdb8eaac 100644 --- a/tests/Stache/FeatureTest.php +++ b/tests/Stache/FeatureTest.php @@ -7,6 +7,7 @@ use Statamic\Facades\Collection; use Statamic\Facades\Data; use Statamic\Facades\Entry; +use Statamic\Facades\File; use Statamic\Facades\GlobalSet; use Statamic\Facades\Nav; use Statamic\Facades\Nav as NavRepository; @@ -284,6 +285,33 @@ public function saving_an_entry_writes_it_to_file() $entry->delete(); } + #[Test] + public function it_does_not_restore_a_deleted_entry_when_its_cached_item_is_missing() + { + config(['statamic.stache.watcher' => false]); + + $entry = tap(Entry::make() + ->locale('en') + ->id('stale-entry') + ->collection(Collection::findByHandle('blog')) + ->slug('stale-entry') + ->date('2017-07-04') + ->data(['title' => 'Stale Entry']) + )->save(); + + $path = $entry->path(); + + Entry::all(); + + File::delete($path); + $this->stache->cacheStore()->forget('stache::items::entries::blog::'.$entry->id()); + + $entries = Entry::all(); + + $this->assertCount(14, $entries); + $this->assertFileDoesNotExist($path); + } + #[Test] public function saving_an_entry_with_a_closure_based_slug_resolves_it_before_writing_to_file() {