diff --git a/platformio/managers/core.py b/platformio/managers/core.py index 75ce6162..c835ed84 100644 --- a/platformio/managers/core.py +++ b/platformio/managers/core.py @@ -69,7 +69,7 @@ class CorePackageManager(PackageManager): if manifest['name'] not in best_pkg_versions: continue 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() return True diff --git a/platformio/managers/lib.py b/platformio/managers/lib.py index c1e5ab96..9fa3d02a 100644 --- a/platformio/managers/lib.py +++ b/platformio/managers/lib.py @@ -332,7 +332,7 @@ class LibraryManager(BasePkgManager): name, requirements=None, silent=False, - trigger_event=True, + after_update=False, interactive=False, force=False): _name, _requirements, _url = self.parse_pkg_uri(name, requirements) @@ -350,7 +350,7 @@ class LibraryManager(BasePkgManager): name, requirements, silent=silent, - trigger_event=trigger_event, + after_update=after_update, force=force) if not pkg_dir: @@ -369,7 +369,7 @@ class LibraryManager(BasePkgManager): self.install( "{name}={version}".format(**filters), silent=silent, - trigger_event=trigger_event, + after_update=after_update, interactive=interactive, force=force) else: @@ -385,14 +385,14 @@ class LibraryManager(BasePkgManager): lib_id, filters.get("version"), silent=silent, - trigger_event=trigger_event, + after_update=after_update, interactive=interactive, force=force) else: self.install( lib_id, silent=silent, - trigger_event=trigger_event, + after_update=after_update, interactive=interactive, force=force) return pkg_dir diff --git a/platformio/managers/package.py b/platformio/managers/package.py index 905b756a..d3942905 100644 --- a/platformio/managers/package.py +++ b/platformio/managers/package.py @@ -633,7 +633,7 @@ class BasePkgManager(PkgRepoMixin, PkgInstallerMixin): name, requirements=None, silent=False, - trigger_event=True, + after_update=False, force=False): name, requirements, url = self.parse_pkg_uri(name, requirements) package_dir = self.get_package_dir(name, requirements, url) @@ -676,7 +676,7 @@ class BasePkgManager(PkgRepoMixin, PkgInstallerMixin): manifest = self.load_manifest(pkg_dir) assert manifest - if trigger_event: + if not after_update: telemetry.on_event( category=self.__class__.__name__, action="Install", @@ -690,7 +690,7 @@ class BasePkgManager(PkgRepoMixin, PkgInstallerMixin): return pkg_dir - def uninstall(self, package, requirements=None, trigger_event=True): + def uninstall(self, package, requirements=None, after_update=False): if isdir(package): pkg_dir = package else: @@ -723,7 +723,7 @@ class BasePkgManager(PkgRepoMixin, PkgInstallerMixin): click.echo("[%s]" % click.style("OK", fg="green")) - if trigger_event: + if not after_update: telemetry.on_event( category=self.__class__.__name__, action="Uninstall", @@ -769,8 +769,8 @@ class BasePkgManager(PkgRepoMixin, PkgInstallerMixin): self._update_src_manifest( dict(version=vcs.get_current_revision()), vcs.storage_dir) else: - self.uninstall(pkg_dir, trigger_event=False) - self.install(name, latest, trigger_event=False) + self.uninstall(pkg_dir, after_update=True) + self.install(name, latest, after_update=True) telemetry.on_event( category=self.__class__.__name__, diff --git a/platformio/managers/platform.py b/platformio/managers/platform.py index f147b762..bffcf16c 100644 --- a/platformio/managers/platform.py +++ b/platformio/managers/platform.py @@ -62,7 +62,7 @@ class PlatformManager(BasePkgManager): with_packages=None, without_packages=None, skip_default_package=False, - trigger_event=True, + after_update=False, silent=False, force=False, **_): # pylint: disable=too-many-arguments, arguments-differ @@ -70,20 +70,20 @@ class PlatformManager(BasePkgManager): self, name, requirements, silent=silent, force=force) p = PlatformFactory.newPlatform(platform_dir) - # @Hook: when 'update' operation (trigger_event is False), - # don't cleanup packages or install them - if not trigger_event: + # don't cleanup packages or install them after update + # we check packages for updates in def update() + if after_update: return True + p.install_packages( with_packages, without_packages, skip_default_package, silent=silent, force=force) - self.cleanup_packages(p.packages.keys()) - return True + return self.cleanup_packages(p.packages.keys()) - def uninstall(self, package, requirements=None, trigger_event=True): + def uninstall(self, package, requirements=None, after_update=False): if isdir(package): pkg_dir = package else: @@ -96,13 +96,12 @@ class PlatformManager(BasePkgManager): p = PlatformFactory.newPlatform(pkg_dir) BasePkgManager.uninstall(self, pkg_dir, requirements) - # @Hook: when 'update' operation (trigger_event is False), - # don't cleanup packages or install them - if not trigger_event: + # don't cleanup packages or install them after update + # we check packages for updates in def update() + if after_update: return True - self.cleanup_packages(p.packages.keys()) - return True + return self.cleanup_packages(p.packages.keys()) def update( # pylint: disable=arguments-differ self, @@ -154,7 +153,7 @@ class PlatformManager(BasePkgManager): continue if (manifest['name'] not in deppkgs 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() return True @@ -280,21 +279,25 @@ class PlatformPackagesMixin(object): return True - def find_pkg_names(self, items): + def find_pkg_names(self, candidates): result = [] - for item in items: - candidate = item + for candidate in candidates: + found = False # lookup by package types for _name, _opts in self.packages.items(): - if _opts.get("type") == item: - candidate = _name + if _opts.get("type") == candidate: + result.append(_name) + found = True - if (self.frameworks and item.startswith("framework-") - and item[10:] in self.frameworks): - candidate = self.frameworks[item[10:]]['package'] + if (self.frameworks and candidate.startswith("framework-") + and candidate[10:] in self.frameworks): + result.append(self.frameworks[candidate[10:]]['package']) + found = True + + if not found: + result.append(candidate) - result.append(candidate) return result def update_packages(self, only_check=False): diff --git a/tests/commands/test_platform.py b/tests/commands/test_platform.py index 5b3053fe..d327ef37 100644 --- a/tests/commands/test_platform.py +++ b/tests/commands/test_platform.py @@ -61,13 +61,14 @@ def test_install_known_version(clirunner, validate_cliresult, 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, [ "https://github.com/platformio/" "platform-espressif8266.git#feature/stage", "--skip-default-package" ]) validate_cliresult(result) assert "espressif8266" in result.output + assert len(isolated_pio_home.join("packages").listdir()) == 1 def test_list_json_output(clirunner, validate_cliresult):