Optimised conversion from package aliases to names

This commit is contained in:
Ivan Kravets
2014-07-30 23:08:36 +03:00
parent 3125c8485b
commit ffa3d3f2f1
2 changed files with 17 additions and 26 deletions

View File

@ -16,7 +16,7 @@ Release History
* Implemented (especially for `SmartAnthill <http://smartanthill.ikravets.com/>`_) * Implemented (especially for `SmartAnthill <http://smartanthill.ikravets.com/>`_)
``platformio run -t uploadlazy`` target (no dependencies to framework libs, ``platformio run -t uploadlazy`` target (no dependencies to framework libs,
ELF and etc.) 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) 0.3.1 (2014-06-21)

View File

@ -40,36 +40,27 @@ class BasePlatform(object):
else: else:
raise NotImplementedError() raise NotImplementedError()
def get_pkgname_by_alias(self, alias): def pkg_aliases_to_names(self, aliases):
for name, opts in self.PACKAGES.items(): names = []
if opts.get("alias", None) == alias: for alias in aliases:
return name name = alias
return None # 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): def install(self, with_packages, without_packages, skip_default_packages):
with_packages = set(with_packages) with_packages = set(self.pkg_aliases_to_names(with_packages))
without_packages = set(without_packages) without_packages = set(self.pkg_aliases_to_names(without_packages))
upkgs = with_packages | without_packages upkgs = with_packages | without_packages
ppkgs = set(self.PACKAGES.keys()) ppkgs = set(self.PACKAGES.keys())
unknown = upkgs - ppkgs if not upkgs.issubset(ppkgs):
if unknown: raise UnknownPackage(", ".join(upkgs - ppkgs))
_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))
requirements = [] requirements = []
for name, opts in self.PACKAGES.items(): for name, opts in self.PACKAGES.items():