mirror of
https://github.com/espressif/esp-idf.git
synced 2025-07-30 18:57:19 +02:00
fix(tools): idf_tools.py install tool@version
This commit is contained in:
@ -1089,17 +1089,37 @@ class IDFTool(object):
|
|||||||
|
|
||||||
def get_preferred_installed_version(self) -> Optional[str]:
|
def get_preferred_installed_version(self) -> Optional[str]:
|
||||||
"""
|
"""
|
||||||
Get the preferred installed version of the tool. If more versions installed, return the highest.
|
Get the preferred installed version of the tool.
|
||||||
|
If more versions installed, return recommended version if exists, otherwise return the highest supported version
|
||||||
"""
|
"""
|
||||||
recommended_versions = [
|
|
||||||
|
try:
|
||||||
|
self.find_installed_versions()
|
||||||
|
except ToolBinaryError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if self.get_recommended_version() in self.versions_installed:
|
||||||
|
return self.get_recommended_version()
|
||||||
|
|
||||||
|
supported_installed_versions = [
|
||||||
k
|
k
|
||||||
for k in self.versions_installed
|
for k in self.versions_installed
|
||||||
if self.versions[k].status == IDFToolVersion.STATUS_RECOMMENDED
|
if self.versions[k].status == IDFToolVersion.STATUS_SUPPORTED
|
||||||
and self.versions[k].compatible_with_platform(self._platform)
|
and self.versions[k].compatible_with_platform(self._platform)
|
||||||
]
|
]
|
||||||
assert len(recommended_versions) <= 1
|
sorted_supported_installed_versions = sorted(
|
||||||
if recommended_versions:
|
supported_installed_versions, key=lambda x: self.versions[x], reverse=True
|
||||||
return recommended_versions[0]
|
)
|
||||||
|
if sorted_supported_installed_versions:
|
||||||
|
warn(
|
||||||
|
''.join(
|
||||||
|
[
|
||||||
|
f'Using supported version {sorted_supported_installed_versions[0]} for tool {self.name} ',
|
||||||
|
f'as recommended version {self.get_recommended_version()} is not installed.',
|
||||||
|
]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return sorted_supported_installed_versions[0]
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def find_installed_versions(self) -> None:
|
def find_installed_versions(self) -> None:
|
||||||
@ -1152,8 +1172,7 @@ class IDFTool(object):
|
|||||||
else:
|
else:
|
||||||
if ver_str != version:
|
if ver_str != version:
|
||||||
warn(f'tool {self.name} version {version} is installed, but has reported version {ver_str}')
|
warn(f'tool {self.name} version {version} is installed, but has reported version {ver_str}')
|
||||||
else:
|
self.versions_installed.append(version)
|
||||||
self.versions_installed.append(version)
|
|
||||||
if tool_error:
|
if tool_error:
|
||||||
raise ToolBinaryError
|
raise ToolBinaryError
|
||||||
|
|
||||||
@ -1900,6 +1919,9 @@ def expand_tools_arg(tools_spec: List[str], overall_tools: OrderedDict, targets:
|
|||||||
|
|
||||||
# Filtering by ESP_targets
|
# Filtering by ESP_targets
|
||||||
tools = [k for k in tools if overall_tools[k].is_supported_for_any_of_targets(targets)]
|
tools = [k for k in tools if overall_tools[k].is_supported_for_any_of_targets(targets)]
|
||||||
|
|
||||||
|
# Processing specific version of tool - defined with '@'
|
||||||
|
tools.extend([tool_pattern for tool_pattern in tools_spec if '@' in tool_pattern])
|
||||||
return tools
|
return tools
|
||||||
|
|
||||||
|
|
||||||
@ -2250,10 +2272,6 @@ def process_tool(
|
|||||||
tool_export_paths: List[str] = []
|
tool_export_paths: List[str] = []
|
||||||
tool_export_vars: Dict[str, str] = {}
|
tool_export_vars: Dict[str, str] = {}
|
||||||
|
|
||||||
try:
|
|
||||||
tool.find_installed_versions()
|
|
||||||
except ToolBinaryError:
|
|
||||||
pass
|
|
||||||
recommended_version_to_use = tool.get_preferred_installed_version()
|
recommended_version_to_use = tool.get_preferred_installed_version()
|
||||||
|
|
||||||
if not tool.is_executable and recommended_version_to_use:
|
if not tool.is_executable and recommended_version_to_use:
|
||||||
|
Reference in New Issue
Block a user