From a13006d5c8ee09377c9af45e10bbc9713a8dce3d Mon Sep 17 00:00:00 2001 From: wakqasahmed Date: Fri, 4 Sep 2026 12:08:15 +0000 Subject: [PATCH] Follow symlinked directories in FileDatasource::getAvailablePaths() --- src/Halcyon/Datasource/FileDatasource.php | 6 +++++- tests/Halcyon/FileDatasourceTest.php | 10 ++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/Halcyon/Datasource/FileDatasource.php b/src/Halcyon/Datasource/FileDatasource.php index e056e9486..e7c905d2f 100644 --- a/src/Halcyon/Datasource/FileDatasource.php +++ b/src/Halcyon/Datasource/FileDatasource.php @@ -1,6 +1,7 @@ basePath)) - ? new RecursiveIteratorIterator(new RecursiveDirectoryIterator($this->basePath)) + ? new RecursiveIteratorIterator(new RecursiveDirectoryIterator( + $this->basePath, + FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::FOLLOW_SYMLINKS + )) : []; foreach ($it as $file) { diff --git a/tests/Halcyon/FileDatasourceTest.php b/tests/Halcyon/FileDatasourceTest.php index f5514458d..b0a02c63f 100644 --- a/tests/Halcyon/FileDatasourceTest.php +++ b/tests/Halcyon/FileDatasourceTest.php @@ -102,6 +102,16 @@ public function testGetAvailablePathsIsEmptyWhenBasePathIsMissing() $this->assertSame([], $datasource->getAvailablePaths()); } + public function testGetAvailablePathsFollowsSymlinkedDirectories() + { + $this->seedFile('shared/static-pages/index.htm', 'Index page'); + symlink($this->basePath . '/shared/static-pages', $this->basePath . '/pages/linked'); + + $paths = array_keys($this->datasource->getAvailablePaths()); + + $this->assertContains('pages/linked/index.htm', $paths); + } + // // selectOne() //