mirror of
https://github.com/platformio/platformio-core.git
synced 2025-07-30 18:17:13 +02:00
Fix issue with installing only the one platform package by specified type
This commit is contained in:
@ -69,7 +69,7 @@ class CorePackageManager(PackageManager):
|
|||||||
if manifest['name'] not in best_pkg_versions:
|
if manifest['name'] not in best_pkg_versions:
|
||||||
continue
|
continue
|
||||||
if manifest['version'] != best_pkg_versions[manifest['name']]:
|
if manifest['version'] != best_pkg_versions[manifest['name']]:
|
||||||
self.uninstall(manifest['__pkg_dir'], trigger_event=False)
|
self.uninstall(manifest['__pkg_dir'], after_update=True)
|
||||||
self.cache_reset()
|
self.cache_reset()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -332,7 +332,7 @@ class LibraryManager(BasePkgManager):
|
|||||||
name,
|
name,
|
||||||
requirements=None,
|
requirements=None,
|
||||||
silent=False,
|
silent=False,
|
||||||
trigger_event=True,
|
after_update=False,
|
||||||
interactive=False,
|
interactive=False,
|
||||||
force=False):
|
force=False):
|
||||||
_name, _requirements, _url = self.parse_pkg_uri(name, requirements)
|
_name, _requirements, _url = self.parse_pkg_uri(name, requirements)
|
||||||
@ -350,7 +350,7 @@ class LibraryManager(BasePkgManager):
|
|||||||
name,
|
name,
|
||||||
requirements,
|
requirements,
|
||||||
silent=silent,
|
silent=silent,
|
||||||
trigger_event=trigger_event,
|
after_update=after_update,
|
||||||
force=force)
|
force=force)
|
||||||
|
|
||||||
if not pkg_dir:
|
if not pkg_dir:
|
||||||
@ -369,7 +369,7 @@ class LibraryManager(BasePkgManager):
|
|||||||
self.install(
|
self.install(
|
||||||
"{name}={version}".format(**filters),
|
"{name}={version}".format(**filters),
|
||||||
silent=silent,
|
silent=silent,
|
||||||
trigger_event=trigger_event,
|
after_update=after_update,
|
||||||
interactive=interactive,
|
interactive=interactive,
|
||||||
force=force)
|
force=force)
|
||||||
else:
|
else:
|
||||||
@ -385,14 +385,14 @@ class LibraryManager(BasePkgManager):
|
|||||||
lib_id,
|
lib_id,
|
||||||
filters.get("version"),
|
filters.get("version"),
|
||||||
silent=silent,
|
silent=silent,
|
||||||
trigger_event=trigger_event,
|
after_update=after_update,
|
||||||
interactive=interactive,
|
interactive=interactive,
|
||||||
force=force)
|
force=force)
|
||||||
else:
|
else:
|
||||||
self.install(
|
self.install(
|
||||||
lib_id,
|
lib_id,
|
||||||
silent=silent,
|
silent=silent,
|
||||||
trigger_event=trigger_event,
|
after_update=after_update,
|
||||||
interactive=interactive,
|
interactive=interactive,
|
||||||
force=force)
|
force=force)
|
||||||
return pkg_dir
|
return pkg_dir
|
||||||
|
@ -633,7 +633,7 @@ class BasePkgManager(PkgRepoMixin, PkgInstallerMixin):
|
|||||||
name,
|
name,
|
||||||
requirements=None,
|
requirements=None,
|
||||||
silent=False,
|
silent=False,
|
||||||
trigger_event=True,
|
after_update=False,
|
||||||
force=False):
|
force=False):
|
||||||
name, requirements, url = self.parse_pkg_uri(name, requirements)
|
name, requirements, url = self.parse_pkg_uri(name, requirements)
|
||||||
package_dir = self.get_package_dir(name, requirements, url)
|
package_dir = self.get_package_dir(name, requirements, url)
|
||||||
@ -676,7 +676,7 @@ class BasePkgManager(PkgRepoMixin, PkgInstallerMixin):
|
|||||||
manifest = self.load_manifest(pkg_dir)
|
manifest = self.load_manifest(pkg_dir)
|
||||||
assert manifest
|
assert manifest
|
||||||
|
|
||||||
if trigger_event:
|
if not after_update:
|
||||||
telemetry.on_event(
|
telemetry.on_event(
|
||||||
category=self.__class__.__name__,
|
category=self.__class__.__name__,
|
||||||
action="Install",
|
action="Install",
|
||||||
@ -690,7 +690,7 @@ class BasePkgManager(PkgRepoMixin, PkgInstallerMixin):
|
|||||||
|
|
||||||
return pkg_dir
|
return pkg_dir
|
||||||
|
|
||||||
def uninstall(self, package, requirements=None, trigger_event=True):
|
def uninstall(self, package, requirements=None, after_update=False):
|
||||||
if isdir(package):
|
if isdir(package):
|
||||||
pkg_dir = package
|
pkg_dir = package
|
||||||
else:
|
else:
|
||||||
@ -723,7 +723,7 @@ class BasePkgManager(PkgRepoMixin, PkgInstallerMixin):
|
|||||||
|
|
||||||
click.echo("[%s]" % click.style("OK", fg="green"))
|
click.echo("[%s]" % click.style("OK", fg="green"))
|
||||||
|
|
||||||
if trigger_event:
|
if not after_update:
|
||||||
telemetry.on_event(
|
telemetry.on_event(
|
||||||
category=self.__class__.__name__,
|
category=self.__class__.__name__,
|
||||||
action="Uninstall",
|
action="Uninstall",
|
||||||
@ -769,8 +769,8 @@ class BasePkgManager(PkgRepoMixin, PkgInstallerMixin):
|
|||||||
self._update_src_manifest(
|
self._update_src_manifest(
|
||||||
dict(version=vcs.get_current_revision()), vcs.storage_dir)
|
dict(version=vcs.get_current_revision()), vcs.storage_dir)
|
||||||
else:
|
else:
|
||||||
self.uninstall(pkg_dir, trigger_event=False)
|
self.uninstall(pkg_dir, after_update=True)
|
||||||
self.install(name, latest, trigger_event=False)
|
self.install(name, latest, after_update=True)
|
||||||
|
|
||||||
telemetry.on_event(
|
telemetry.on_event(
|
||||||
category=self.__class__.__name__,
|
category=self.__class__.__name__,
|
||||||
|
@ -62,7 +62,7 @@ class PlatformManager(BasePkgManager):
|
|||||||
with_packages=None,
|
with_packages=None,
|
||||||
without_packages=None,
|
without_packages=None,
|
||||||
skip_default_package=False,
|
skip_default_package=False,
|
||||||
trigger_event=True,
|
after_update=False,
|
||||||
silent=False,
|
silent=False,
|
||||||
force=False,
|
force=False,
|
||||||
**_): # pylint: disable=too-many-arguments, arguments-differ
|
**_): # pylint: disable=too-many-arguments, arguments-differ
|
||||||
@ -70,20 +70,20 @@ class PlatformManager(BasePkgManager):
|
|||||||
self, name, requirements, silent=silent, force=force)
|
self, name, requirements, silent=silent, force=force)
|
||||||
p = PlatformFactory.newPlatform(platform_dir)
|
p = PlatformFactory.newPlatform(platform_dir)
|
||||||
|
|
||||||
# @Hook: when 'update' operation (trigger_event is False),
|
# don't cleanup packages or install them after update
|
||||||
# don't cleanup packages or install them
|
# we check packages for updates in def update()
|
||||||
if not trigger_event:
|
if after_update:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
p.install_packages(
|
p.install_packages(
|
||||||
with_packages,
|
with_packages,
|
||||||
without_packages,
|
without_packages,
|
||||||
skip_default_package,
|
skip_default_package,
|
||||||
silent=silent,
|
silent=silent,
|
||||||
force=force)
|
force=force)
|
||||||
self.cleanup_packages(p.packages.keys())
|
return self.cleanup_packages(p.packages.keys())
|
||||||
return True
|
|
||||||
|
|
||||||
def uninstall(self, package, requirements=None, trigger_event=True):
|
def uninstall(self, package, requirements=None, after_update=False):
|
||||||
if isdir(package):
|
if isdir(package):
|
||||||
pkg_dir = package
|
pkg_dir = package
|
||||||
else:
|
else:
|
||||||
@ -96,13 +96,12 @@ class PlatformManager(BasePkgManager):
|
|||||||
p = PlatformFactory.newPlatform(pkg_dir)
|
p = PlatformFactory.newPlatform(pkg_dir)
|
||||||
BasePkgManager.uninstall(self, pkg_dir, requirements)
|
BasePkgManager.uninstall(self, pkg_dir, requirements)
|
||||||
|
|
||||||
# @Hook: when 'update' operation (trigger_event is False),
|
# don't cleanup packages or install them after update
|
||||||
# don't cleanup packages or install them
|
# we check packages for updates in def update()
|
||||||
if not trigger_event:
|
if after_update:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
self.cleanup_packages(p.packages.keys())
|
return self.cleanup_packages(p.packages.keys())
|
||||||
return True
|
|
||||||
|
|
||||||
def update( # pylint: disable=arguments-differ
|
def update( # pylint: disable=arguments-differ
|
||||||
self,
|
self,
|
||||||
@ -154,7 +153,7 @@ class PlatformManager(BasePkgManager):
|
|||||||
continue
|
continue
|
||||||
if (manifest['name'] not in deppkgs
|
if (manifest['name'] not in deppkgs
|
||||||
or manifest['version'] not in deppkgs[manifest['name']]):
|
or manifest['version'] not in deppkgs[manifest['name']]):
|
||||||
pm.uninstall(manifest['__pkg_dir'], trigger_event=False)
|
pm.uninstall(manifest['__pkg_dir'], after_update=True)
|
||||||
|
|
||||||
self.cache_reset()
|
self.cache_reset()
|
||||||
return True
|
return True
|
||||||
@ -280,21 +279,25 @@ class PlatformPackagesMixin(object):
|
|||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def find_pkg_names(self, items):
|
def find_pkg_names(self, candidates):
|
||||||
result = []
|
result = []
|
||||||
for item in items:
|
for candidate in candidates:
|
||||||
candidate = item
|
found = False
|
||||||
|
|
||||||
# lookup by package types
|
# lookup by package types
|
||||||
for _name, _opts in self.packages.items():
|
for _name, _opts in self.packages.items():
|
||||||
if _opts.get("type") == item:
|
if _opts.get("type") == candidate:
|
||||||
candidate = _name
|
result.append(_name)
|
||||||
|
found = True
|
||||||
|
|
||||||
if (self.frameworks and item.startswith("framework-")
|
if (self.frameworks and candidate.startswith("framework-")
|
||||||
and item[10:] in self.frameworks):
|
and candidate[10:] in self.frameworks):
|
||||||
candidate = self.frameworks[item[10:]]['package']
|
result.append(self.frameworks[candidate[10:]]['package'])
|
||||||
|
found = True
|
||||||
|
|
||||||
|
if not found:
|
||||||
|
result.append(candidate)
|
||||||
|
|
||||||
result.append(candidate)
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def update_packages(self, only_check=False):
|
def update_packages(self, only_check=False):
|
||||||
|
@ -61,13 +61,14 @@ def test_install_known_version(clirunner, validate_cliresult,
|
|||||||
assert len(isolated_pio_home.join("packages").listdir()) == 1
|
assert len(isolated_pio_home.join("packages").listdir()) == 1
|
||||||
|
|
||||||
|
|
||||||
def test_install_from_vcs(clirunner, validate_cliresult):
|
def test_install_from_vcs(clirunner, validate_cliresult, isolated_pio_home):
|
||||||
result = clirunner.invoke(cli_platform.platform_install, [
|
result = clirunner.invoke(cli_platform.platform_install, [
|
||||||
"https://github.com/platformio/"
|
"https://github.com/platformio/"
|
||||||
"platform-espressif8266.git#feature/stage", "--skip-default-package"
|
"platform-espressif8266.git#feature/stage", "--skip-default-package"
|
||||||
])
|
])
|
||||||
validate_cliresult(result)
|
validate_cliresult(result)
|
||||||
assert "espressif8266" in result.output
|
assert "espressif8266" in result.output
|
||||||
|
assert len(isolated_pio_home.join("packages").listdir()) == 1
|
||||||
|
|
||||||
|
|
||||||
def test_list_json_output(clirunner, validate_cliresult):
|
def test_list_json_output(clirunner, validate_cliresult):
|
||||||
|
Reference in New Issue
Block a user