[core] Only clean build files with esp-idf (#7388)

This commit is contained in:
Jesse Hills 2024-09-02 19:11:21 +12:00
parent 04ec6c5677
commit c9c5ca28d2
No known key found for this signature in database
GPG Key ID: BEAAE804EFD8E83A
2 changed files with 21 additions and 1 deletions

View File

@ -48,6 +48,8 @@ class StorageJSON:
firmware_bin_path: str,
loaded_integrations: set[str],
no_mdns: bool,
framework: str | None = None,
core_platform: str | None = None,
) -> None:
# Version of the storage JSON schema
assert storage_version is None or isinstance(storage_version, int)
@ -78,6 +80,10 @@ class StorageJSON:
self.loaded_integrations = loaded_integrations
# Is mDNS disabled
self.no_mdns = no_mdns
# The framework used to compile the firmware
self.framework = framework
# The core platform of this firmware. Like "esp32", "rp2040", "host" etc.
self.core_platform = core_platform
def as_dict(self):
return {
@ -94,6 +100,8 @@ class StorageJSON:
"firmware_bin_path": self.firmware_bin_path,
"loaded_integrations": sorted(self.loaded_integrations),
"no_mdns": self.no_mdns,
"framework": self.framework,
"core_platform": self.core_platform,
}
def to_json(self):
@ -127,6 +135,8 @@ class StorageJSON:
and CONF_DISABLED in esph.config[CONF_MDNS]
and esph.config[CONF_MDNS][CONF_DISABLED] is True
),
framework=esph.target_framework,
core_platform=esph.target_platform,
)
@staticmethod
@ -147,6 +157,8 @@ class StorageJSON:
firmware_bin_path=None,
loaded_integrations=set(),
no_mdns=False,
framework=None,
core_platform=platform.lower(),
)
@staticmethod
@ -168,6 +180,8 @@ class StorageJSON:
firmware_bin_path = storage.get("firmware_bin_path")
loaded_integrations = set(storage.get("loaded_integrations", []))
no_mdns = storage.get("no_mdns", False)
framework = storage.get("framework")
core_platform = storage.get("core_platform")
return StorageJSON(
storage_version,
name,
@ -182,6 +196,8 @@ class StorageJSON:
firmware_bin_path,
loaded_integrations,
no_mdns,
framework,
core_platform,
)
@staticmethod

View File

@ -9,6 +9,7 @@ from esphome.config import iter_component_configs, iter_components
from esphome.const import (
ENV_NOGITIGNORE,
HEADER_FILE_EXTENSIONS,
PLATFORM_ESP32,
SOURCE_FILE_EXTENSIONS,
__version__,
)
@ -107,7 +108,10 @@ def storage_should_clean(old: StorageJSON, new: StorageJSON) -> bool:
if old.build_path != new.build_path:
return True
if old.loaded_integrations != new.loaded_integrations:
return True
if new.core_platform == PLATFORM_ESP32:
from esphome.components.esp32 import FRAMEWORK_ESP_IDF
return new.framework == FRAMEWORK_ESP_IDF
return False