diff --git a/platformio/builder/tools/piolib.py b/platformio/builder/tools/piolib.py index 3a7b3aad..8cc1ad58 100644 --- a/platformio/builder/tools/piolib.py +++ b/platformio/builder/tools/piolib.py @@ -40,7 +40,7 @@ from platformio.package.manifest.parser import ( ManifestParserError, ManifestParserFactory, ) -from platformio.package.meta import PackageSourceItem +from platformio.package.meta import PackageItem from platformio.project.options import ProjectOptions @@ -1019,7 +1019,7 @@ def ConfigureProjectLibBuilder(env): margin = "| " * (level) for lb in root.depbuilders: title = "<%s>" % lb.name - pkg = PackageSourceItem(lb.path) + pkg = PackageItem(lb.path) if pkg.metadata: title += " %s" % pkg.metadata.version elif lb.version: diff --git a/platformio/commands/lib/command.py b/platformio/commands/lib/command.py index ec5fd8e6..03463aab 100644 --- a/platformio/commands/lib/command.py +++ b/platformio/commands/lib/command.py @@ -30,7 +30,7 @@ from platformio.commands.lib.helpers import ( from platformio.compat import dump_json_to_unicode from platformio.package.exception import UnknownPackageError from platformio.package.manager.library import LibraryPackageManager -from platformio.package.meta import PackageSourceItem, PackageSpec +from platformio.package.meta import PackageItem, PackageSpec from platformio.proc import is_ci from platformio.project.config import ProjectConfig from platformio.project.helpers import get_project_dir, is_platformio_project @@ -262,7 +262,7 @@ def lib_update( # pylint: disable=too-many-arguments for library in _libraries: spec = None pkg = None - if isinstance(library, PackageSourceItem): + if isinstance(library, PackageItem): pkg = library else: spec = PackageSpec(library) @@ -284,9 +284,7 @@ def lib_update( # pylint: disable=too-many-arguments else: for library in _libraries: to_spec = ( - None - if isinstance(library, PackageSourceItem) - else PackageSpec(library) + None if isinstance(library, PackageItem) else PackageSpec(library) ) lm.update( library, to_spec=to_spec, only_check=only_check, silent=silent diff --git a/platformio/package/manager/_install.py b/platformio/package/manager/_install.py index c63a504d..04a41f26 100644 --- a/platformio/package/manager/_install.py +++ b/platformio/package/manager/_install.py @@ -21,7 +21,7 @@ import click from platformio import app, compat, fs, util from platformio.package.exception import PackageException -from platformio.package.meta import PackageSourceItem, PackageSpec +from platformio.package.meta import PackageItem, PackageSpec from platformio.package.unpack import FileUnpacker from platformio.package.vcsclient import VCSClientFactory @@ -109,7 +109,7 @@ class PackageManagerInstallMixin(object): return pkg def _install_dependencies(self, pkg, silent=False): - assert isinstance(pkg, PackageSourceItem) + assert isinstance(pkg, PackageItem) manifest = self.load_manifest(pkg) if not manifest.get("dependencies"): return @@ -155,7 +155,7 @@ class PackageManagerInstallMixin(object): assert vcs.export() root_dir = self.find_pkg_root(tmp_dir, spec) - pkg_item = PackageSourceItem( + pkg_item = PackageItem( root_dir, self.build_metadata( root_dir, spec, vcs.get_current_revision() if vcs else None @@ -168,7 +168,7 @@ class PackageManagerInstallMixin(object): fs.rmtree(tmp_dir) def _install_tmp_pkg(self, tmp_pkg): - assert isinstance(tmp_pkg, PackageSourceItem) + assert isinstance(tmp_pkg, PackageItem) # validate package version and declared requirements if ( tmp_pkg.metadata.spec.requirements @@ -182,7 +182,7 @@ class PackageManagerInstallMixin(object): tmp_pkg.metadata, ) ) - dst_pkg = PackageSourceItem( + dst_pkg = PackageItem( os.path.join(self.package_dir, tmp_pkg.get_safe_dirname()) ) @@ -190,7 +190,7 @@ class PackageManagerInstallMixin(object): action = "overwrite" if tmp_pkg.metadata.spec.has_custom_name(): action = "overwrite" - dst_pkg = PackageSourceItem( + dst_pkg = PackageItem( os.path.join(self.package_dir, tmp_pkg.metadata.spec.name) ) elif dst_pkg.metadata and dst_pkg.metadata.spec.external: @@ -231,7 +231,7 @@ class PackageManagerInstallMixin(object): # move new source to the destination location _cleanup_dir(dst_pkg.path) shutil.move(tmp_pkg.path, dst_pkg.path) - return PackageSourceItem(dst_pkg.path) + return PackageItem(dst_pkg.path) if action == "detach-new": target_dirname = "%s@%s" % ( @@ -248,9 +248,9 @@ class PackageManagerInstallMixin(object): pkg_dir = os.path.join(self.package_dir, target_dirname) _cleanup_dir(pkg_dir) shutil.move(tmp_pkg.path, pkg_dir) - return PackageSourceItem(pkg_dir) + return PackageItem(pkg_dir) # otherwise, overwrite existing _cleanup_dir(dst_pkg.path) shutil.move(tmp_pkg.path, dst_pkg.path) - return PackageSourceItem(dst_pkg.path) + return PackageItem(dst_pkg.path) diff --git a/platformio/package/manager/_legacy.py b/platformio/package/manager/_legacy.py index 22478eff..95f628d0 100644 --- a/platformio/package/manager/_legacy.py +++ b/platformio/package/manager/_legacy.py @@ -15,7 +15,7 @@ import os from platformio import fs -from platformio.package.meta import PackageSourceItem, PackageSpec +from platformio.package.meta import PackageItem, PackageSpec class PackageManagerLegacyMixin(object): @@ -42,7 +42,9 @@ class PackageManagerLegacyMixin(object): return PackageSpec(name=manifest.get("name")) def legacy_load_manifest(self, pkg): - assert isinstance(pkg, PackageSourceItem) + if not isinstance(pkg, PackageItem): + assert os.path.isdir(pkg) + pkg = PackageItem(pkg) manifest = self.load_manifest(pkg) manifest["__pkg_dir"] = pkg.path for key in ("name", "version"): diff --git a/platformio/package/manager/_uninstall.py b/platformio/package/manager/_uninstall.py index 603ad382..e2656401 100644 --- a/platformio/package/manager/_uninstall.py +++ b/platformio/package/manager/_uninstall.py @@ -19,7 +19,7 @@ import click from platformio import fs from platformio.package.exception import UnknownPackageError -from platformio.package.meta import PackageSourceItem, PackageSpec +from platformio.package.meta import PackageItem, PackageSpec class PackageManagerUninstallMixin(object): @@ -73,7 +73,7 @@ class PackageManagerUninstallMixin(object): return pkg def _uninstall_dependencies(self, pkg, silent=False): - assert isinstance(pkg, PackageSourceItem) + assert isinstance(pkg, PackageItem) manifest = self.load_manifest(pkg) if not manifest.get("dependencies"): return diff --git a/platformio/package/manager/_update.py b/platformio/package/manager/_update.py index d120e030..b0b976de 100644 --- a/platformio/package/manager/_update.py +++ b/platformio/package/manager/_update.py @@ -18,17 +18,13 @@ import click from platformio import util from platformio.package.exception import UnknownPackageError -from platformio.package.meta import ( - PackageOutdatedResult, - PackageSourceItem, - PackageSpec, -) +from platformio.package.meta import PackageItem, PackageOutdatedResult, PackageSpec from platformio.package.vcsclient import VCSBaseException, VCSClientFactory class PackageManagerUpdateMixin(object): def outdated(self, pkg, spec=None): - assert isinstance(pkg, PackageSourceItem) + assert isinstance(pkg, PackageItem) assert not spec or isinstance(spec, PackageSpec) assert os.path.isdir(pkg.path) and pkg.metadata diff --git a/platformio/package/manager/base.py b/platformio/package/manager/base.py index c0e1e23f..dc024edc 100644 --- a/platformio/package/manager/base.py +++ b/platformio/package/manager/base.py @@ -31,8 +31,8 @@ from platformio.package.manager._uninstall import PackageManagerUninstallMixin from platformio.package.manager._update import PackageManagerUpdateMixin from platformio.package.manifest.parser import ManifestParserFactory from platformio.package.meta import ( + PackageItem, PackageMetaData, - PackageSourceItem, PackageSpec, PackageType, ) @@ -144,7 +144,7 @@ class BasePackageManager( # pylint: disable=too-many-public-methods return self.get_manifest_path(pkg_dir) def load_manifest(self, src): - path = src.path if isinstance(src, PackageSourceItem) else src + path = src.path if isinstance(src, PackageItem) else src cache_key = "load_manifest-%s" % path result = self.memcache_get(cache_key) if result: @@ -191,11 +191,11 @@ class BasePackageManager( # pylint: disable=too-many-public-methods def get_installed(self): result = [] - for name in os.listdir(self.package_dir): + for name in sorted(os.listdir(self.package_dir)): pkg_dir = os.path.join(self.package_dir, name) if not os.path.isdir(pkg_dir): continue - pkg = PackageSourceItem(pkg_dir) + pkg = PackageItem(pkg_dir) if not pkg.metadata: try: spec = self.build_legacy_spec(pkg_dir) @@ -216,7 +216,7 @@ class BasePackageManager( # pylint: disable=too-many-public-methods return result def get_package(self, spec): - if isinstance(spec, PackageSourceItem): + if isinstance(spec, PackageItem): return spec spec = self.ensure_spec(spec) best = None @@ -243,8 +243,9 @@ class BasePackageManager( # pylint: disable=too-many-public-methods # external "URL" mismatch if spec.external: # local folder mismatch - if spec.url == pkg.path or ( - spec.url.startswith("file://") and pkg.path == spec.url[7:] + if os.path.realpath(spec.url) == os.path.realpath(pkg.path) or ( + spec.url.startswith("file://") + and os.path.realpath(pkg.path) == os.path.realpath(spec.url[7:]) ): return True if spec.url != pkg.metadata.spec.url: diff --git a/platformio/package/meta.py b/platformio/package/meta.py index af1e0baa..f57f0495 100644 --- a/platformio/package/meta.py +++ b/platformio/package/meta.py @@ -315,7 +315,7 @@ class PackageMetaData(object): def __init__( # pylint: disable=redefined-builtin self, type, name, version, spec=None ): - assert type in PackageType.items().values() + # assert type in PackageType.items().values() if spec: assert isinstance(spec, PackageSpec) self.type = type @@ -395,7 +395,7 @@ class PackageMetaData(object): return PackageMetaData(**data) -class PackageSourceItem(object): +class PackageItem(object): METAFILE_NAME = ".piopm" @@ -406,7 +406,7 @@ class PackageSourceItem(object): self.metadata = self.load_meta() def __repr__(self): - return "PackageSourceItem