From 36f5ecd33f662da31bb856aaecfdeb675ff06306 Mon Sep 17 00:00:00 2001
From: Kunal Sachdev <57170-kunal.sachdev@users.noreply.drupalcode.org>
Date: Tue, 21 Feb 2023 15:45:07 +0000
Subject: [PATCH] =?UTF-8?q?Issue=20#3342726=20by=20kunal.sachdev,=20Wim=20?=
 =?UTF-8?q?Leers:=20UnknownPathExcluder=20doesn=E2=80=99t=20consider=20hid?=
 =?UTF-8?q?den=20files?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../src/PathExcluder/UnknownPathExcluder.php  |  3 ++-
 .../PathExcluder/UnknownPathExcluderTest.php  | 20 +++++++++++++++++++
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/package_manager/src/PathExcluder/UnknownPathExcluder.php b/package_manager/src/PathExcluder/UnknownPathExcluder.php
index d0ae54dbc3..163c4c40d1 100644
--- a/package_manager/src/PathExcluder/UnknownPathExcluder.php
+++ b/package_manager/src/PathExcluder/UnknownPathExcluder.php
@@ -64,7 +64,8 @@ final class UnknownPathExcluder implements EventSubscriberInterface {
     // @todo Refactor in https://www.drupal.org/project/automatic_updates/issues/3334994.
     $core_packages = $event->stage->getActiveComposer()->getCorePackages();
     $scaffold_files_paths = $this->getScaffoldFiles($core_packages);
-    $paths_in_project_root = glob("$project_root/*");
+    // Search for all files (including hidden ones) in project root.
+    $paths_in_project_root = glob("$project_root/{,.}*", GLOB_BRACE);
     $paths = [];
     $known_paths = array_merge([$vendor_dir, $web_root, "$project_root/composer.json", "$project_root/composer.lock"], $scaffold_files_paths);
     foreach ($paths_in_project_root as $path_in_project_root) {
diff --git a/package_manager/tests/src/Kernel/PathExcluder/UnknownPathExcluderTest.php b/package_manager/tests/src/Kernel/PathExcluder/UnknownPathExcluderTest.php
index c56be26270..642047efdd 100644
--- a/package_manager/tests/src/Kernel/PathExcluder/UnknownPathExcluderTest.php
+++ b/package_manager/tests/src/Kernel/PathExcluder/UnknownPathExcluderTest.php
@@ -94,6 +94,16 @@ class UnknownPathExcluderTest extends PackageManagerKernelTestBase {
         NULL,
         ['unknown_file.txt'],
       ],
+      'unknown hidden file where web and project root same' => [
+        FALSE,
+        NULL,
+        ['.unknown_file'],
+      ],
+      'unknown hidden file where web and project root different' => [
+        TRUE,
+        NULL,
+        ['.unknown_file'],
+      ],
       'unknown directory where web and project root same' => [
         FALSE,
         'unknown_dir',
@@ -104,6 +114,16 @@ class UnknownPathExcluderTest extends PackageManagerKernelTestBase {
         'unknown_dir',
         ['unknown_dir/unknown_dir.README.md', 'unknown_dir/unknown_file.txt'],
       ],
+      'unknown hidden directory where web and project root same' => [
+        FALSE,
+        '.unknown_dir',
+        ['.unknown_dir/unknown_dir.README.md', '.unknown_dir/unknown_file.txt'],
+      ],
+      'unknown hidden directory where web and project root different' => [
+        TRUE,
+        '.unknown_dir',
+        ['.unknown_dir/unknown_dir.README.md', '.unknown_dir/unknown_file.txt'],
+      ],
     ];
   }
 
-- 
GitLab