From ffa3d3f2f1ef646d44160b8dfaa1448b025e5d1e Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Wed, 30 Jul 2014 23:08:36 +0300 Subject: [PATCH] Optimised conversion from package aliases to names --- HISTORY.rst | 2 +- platformio/platforms/base.py | 41 ++++++++++++++---------------------- 2 files changed, 17 insertions(+), 26 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index 71c68c40..f72038f0 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -16,7 +16,7 @@ Release History * Implemented (especially for `SmartAnthill `_) ``platformio run -t uploadlazy`` target (no dependencies to framework libs, ELF and etc.) -* Allowed to skip default packages via ``platformio install--skip-default-package`` flag +* Allowed to skip default packages via ``platformio install --skip-default-package`` flag 0.3.1 (2014-06-21) diff --git a/platformio/platforms/base.py b/platformio/platforms/base.py index afda73ed..8b6233fc 100644 --- a/platformio/platforms/base.py +++ b/platformio/platforms/base.py @@ -40,36 +40,27 @@ class BasePlatform(object): else: raise NotImplementedError() - def get_pkgname_by_alias(self, alias): - for name, opts in self.PACKAGES.items(): - if opts.get("alias", None) == alias: - return name - return None + def pkg_aliases_to_names(self, aliases): + names = [] + for alias in aliases: + name = alias + # lookup by packages alias + if name not in self.PACKAGES: + for _name, _opts in self.PACKAGES.items(): + if _opts.get("alias", None) == alias: + name = _name + break + names.append(name) + return names def install(self, with_packages, without_packages, skip_default_packages): - with_packages = set(with_packages) - without_packages = set(without_packages) + with_packages = set(self.pkg_aliases_to_names(with_packages)) + without_packages = set(self.pkg_aliases_to_names(without_packages)) upkgs = with_packages | without_packages ppkgs = set(self.PACKAGES.keys()) - unknown = upkgs - ppkgs - if unknown: - _unknown = unknown.copy() - # maybe aliases - for alias in unknown: - pkgname = self.get_pkgname_by_alias(alias) - if pkgname not in self.PACKAGES: - continue - if alias in with_packages: - with_packages.discard(alias) - with_packages.add(pkgname) - if alias in without_packages: - without_packages.discard(alias) - without_packages.add(pkgname) - _unknown.discard(alias) - - if _unknown: - raise UnknownPackage(", ".join(_unknown)) + if not upkgs.issubset(ppkgs): + raise UnknownPackage(", ".join(upkgs - ppkgs)) requirements = [] for name, opts in self.PACKAGES.items():