commit cca718816f66b0155602c974e6743e8ce49e367b Author: Martin Weinelt Date: Thu Jun 12 03:37:27 2025 +0200 blueprints: copy default blueprints w/o permissions There is no easy way to achieve this with shutil, because copytree() will always call copystat() an ruin directory permissions. diff --git a/homeassistant/components/blueprint/models.py b/homeassistant/components/blueprint/models.py index 88052100259..a0b29ed3d01 100644 --- a/homeassistant/components/blueprint/models.py +++ b/homeassistant/components/blueprint/models.py @@ -378,9 +378,17 @@ class DomainBlueprints: if self.blueprint_folder.exists(): return - shutil.copytree( - integration.file_path / BLUEPRINT_FOLDER, - self.blueprint_folder / HOMEASSISTANT_DOMAIN, - ) + import os + os.makedirs(self.blueprint_folder / HOMEASSISTANT_DOMAIN) + + import subprocess + subprocess.check_call([ + "cp", + "--no-preserve=mode", + "--no-target-directory", + "--recursive", + str(integration.file_path / BLUEPRINT_FOLDER), + str(self.blueprint_folder / HOMEASSISTANT_DOMAIN), + ]) await self.hass.async_add_executor_job(populate)