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

View file

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