mirror of
https://github.com/platformio/platformio-core.git
synced 2025-07-29 17:47:14 +02:00
Minor improvements
This commit is contained in:
@ -1022,6 +1022,8 @@ def ConfigureProjectLibBuilder(env):
|
||||
pkg = PackageSourceItem(lb.path)
|
||||
if pkg.metadata:
|
||||
title += " %s" % pkg.metadata.version
|
||||
elif lb.version:
|
||||
title += " %s" % lb.version
|
||||
click.echo("%s|-- %s" % (margin, title), nl=False)
|
||||
if int(ARGUMENTS.get("PIOVERBOSE", 0)):
|
||||
if pkg.metadata and pkg.metadata.spec.external:
|
||||
|
@ -139,7 +139,7 @@ def PrintConfiguration(env): # pylint: disable=too-many-statements
|
||||
)
|
||||
|
||||
def _get_plaform_data():
|
||||
data = ["PLATFORM: %s %s" % (platform.title, platform.version)]
|
||||
data = ["PLATFORM: %s (%s)" % (platform.title, platform.version)]
|
||||
if platform.src_version:
|
||||
data.append("#" + platform.src_version)
|
||||
if int(ARGUMENTS.get("PIOVERBOSE", 0)) and platform.src_url:
|
||||
|
@ -283,12 +283,14 @@ def lib_update( # pylint: disable=too-many-arguments
|
||||
json_result[storage_dir] = result
|
||||
else:
|
||||
for library in _libraries:
|
||||
spec = (
|
||||
to_spec = (
|
||||
None
|
||||
if isinstance(library, PackageSourceItem)
|
||||
else PackageSpec(library)
|
||||
)
|
||||
lm.update(library, spec=spec, only_check=only_check, silent=silent)
|
||||
lm.update(
|
||||
library, to_spec=to_spec, only_check=only_check, silent=silent
|
||||
)
|
||||
|
||||
if json_output:
|
||||
return click.echo(
|
||||
|
@ -17,8 +17,6 @@ import os
|
||||
import tempfile
|
||||
import time
|
||||
|
||||
import click
|
||||
|
||||
from platformio import app, compat
|
||||
from platformio.package.download import FileDownloader
|
||||
from platformio.package.lockfile import LockFile
|
||||
@ -77,7 +75,7 @@ class PackageManagerDownloadMixin(object):
|
||||
except IOError:
|
||||
raise_error = True
|
||||
if raise_error:
|
||||
click.secho(
|
||||
self.print_message(
|
||||
"Error: Please read http://bit.ly/package-manager-ioerror",
|
||||
fg="red",
|
||||
err=True,
|
||||
|
@ -20,7 +20,7 @@ import tempfile
|
||||
import click
|
||||
|
||||
from platformio import app, compat, fs, util
|
||||
from platformio.package.exception import MissingPackageManifestError, PackageException
|
||||
from platformio.package.exception import PackageException
|
||||
from platformio.package.meta import PackageSourceItem, PackageSpec
|
||||
from platformio.package.unpack import FileUnpacker
|
||||
from platformio.package.vcsclient import VCSClientFactory
|
||||
@ -71,7 +71,7 @@ class PackageManagerInstallMixin(object):
|
||||
|
||||
if pkg:
|
||||
if not silent:
|
||||
click.secho(
|
||||
self.print_message(
|
||||
"{name} @ {version} is already installed".format(
|
||||
**pkg.metadata.as_dict()
|
||||
),
|
||||
@ -80,8 +80,9 @@ class PackageManagerInstallMixin(object):
|
||||
return pkg
|
||||
|
||||
if not silent:
|
||||
msg = "Installing %s" % click.style(spec.humanize(), fg="cyan")
|
||||
self.print_message(msg)
|
||||
self.print_message(
|
||||
"Installing %s" % click.style(spec.humanize(), fg="cyan")
|
||||
)
|
||||
|
||||
if spec.external:
|
||||
pkg = self.install_from_url(spec.url, spec, silent=silent)
|
||||
@ -96,12 +97,10 @@ class PackageManagerInstallMixin(object):
|
||||
|
||||
if not silent:
|
||||
self.print_message(
|
||||
click.style(
|
||||
"{name} @ {version} has been successfully installed!".format(
|
||||
**pkg.metadata.as_dict()
|
||||
),
|
||||
fg="green",
|
||||
)
|
||||
"{name} @ {version} has been successfully installed!".format(
|
||||
**pkg.metadata.as_dict()
|
||||
),
|
||||
fg="green",
|
||||
)
|
||||
|
||||
self.memcache_reset()
|
||||
@ -115,10 +114,10 @@ class PackageManagerInstallMixin(object):
|
||||
if not manifest.get("dependencies"):
|
||||
return
|
||||
if not silent:
|
||||
self.print_message(click.style("Installing dependencies...", fg="yellow"))
|
||||
self.print_message("Installing dependencies...")
|
||||
for dependency in manifest.get("dependencies"):
|
||||
if not self._install_dependency(dependency, silent) and not silent:
|
||||
click.secho(
|
||||
self.print_message(
|
||||
"Warning! Could not install dependency %s for package '%s'"
|
||||
% (dependency, pkg.metadata.name),
|
||||
fg="yellow",
|
||||
@ -255,20 +254,3 @@ class PackageManagerInstallMixin(object):
|
||||
_cleanup_dir(dst_pkg.path)
|
||||
shutil.move(tmp_pkg.path, dst_pkg.path)
|
||||
return PackageSourceItem(dst_pkg.path)
|
||||
|
||||
def get_installed(self):
|
||||
result = []
|
||||
for name in 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)
|
||||
if not pkg.metadata:
|
||||
try:
|
||||
spec = self.build_legacy_spec(pkg_dir)
|
||||
pkg.metadata = self.build_metadata(pkg_dir, spec)
|
||||
except MissingPackageManifestError:
|
||||
pass
|
||||
if pkg.metadata:
|
||||
result.append(pkg)
|
||||
return result
|
||||
|
@ -108,8 +108,8 @@ class PackageManageRegistryMixin(object):
|
||||
silent=silent,
|
||||
)
|
||||
except Exception as e: # pylint: disable=broad-except
|
||||
click.secho("Warning! Package Mirror: %s" % e, fg="yellow")
|
||||
click.secho("Looking for another mirror...", fg="yellow")
|
||||
self.print_message("Warning! Package Mirror: %s" % e, fg="yellow")
|
||||
self.print_message("Looking for another mirror...", fg="yellow")
|
||||
|
||||
return None
|
||||
|
||||
@ -159,9 +159,8 @@ class PackageManageRegistryMixin(object):
|
||||
click.echo("")
|
||||
return packages[0]["id"]
|
||||
|
||||
@staticmethod
|
||||
def print_multi_package_issue(packages, spec):
|
||||
click.secho(
|
||||
def print_multi_package_issue(self, packages, spec):
|
||||
self.print_message(
|
||||
"Warning! More than one package has been found by ", fg="yellow", nl=False
|
||||
)
|
||||
click.secho(spec.humanize(), fg="cyan", nl=False)
|
||||
@ -174,9 +173,9 @@ class PackageManageRegistryMixin(object):
|
||||
version=item["version"]["name"],
|
||||
)
|
||||
)
|
||||
click.secho(
|
||||
self.print_message(
|
||||
"Please specify detailed REQUIREMENTS using package owner and version "
|
||||
"(showed above) to avoid project compatibility issues.",
|
||||
"(showed above) to avoid name conflicts",
|
||||
fg="yellow",
|
||||
)
|
||||
|
||||
|
@ -23,17 +23,17 @@ from platformio.package.meta import PackageSourceItem, PackageSpec
|
||||
|
||||
|
||||
class PackageManagerUninstallMixin(object):
|
||||
def uninstall(self, pkg, silent=False, skip_dependencies=False):
|
||||
def uninstall(self, spec, silent=False, skip_dependencies=False):
|
||||
try:
|
||||
self.lock()
|
||||
return self._uninstall(pkg, silent, skip_dependencies)
|
||||
return self._uninstall(spec, silent, skip_dependencies)
|
||||
finally:
|
||||
self.unlock()
|
||||
|
||||
def _uninstall(self, pkg, silent=False, skip_dependencies=False):
|
||||
pkg = self.get_package(pkg)
|
||||
def _uninstall(self, spec, silent=False, skip_dependencies=False):
|
||||
pkg = self.get_package(spec)
|
||||
if not pkg or not pkg.metadata:
|
||||
raise UnknownPackageError(pkg)
|
||||
raise UnknownPackageError(spec)
|
||||
|
||||
if not silent:
|
||||
self.print_message(
|
||||
@ -78,7 +78,7 @@ class PackageManagerUninstallMixin(object):
|
||||
if not manifest.get("dependencies"):
|
||||
return
|
||||
if not silent:
|
||||
self.print_message(click.style("Removing dependencies...", fg="yellow"))
|
||||
self.print_message("Removing dependencies...", fg="yellow")
|
||||
for dependency in manifest.get("dependencies"):
|
||||
pkg = self.get_package(
|
||||
PackageSpec(
|
||||
|
@ -78,18 +78,18 @@ class PackageManagerUpdateMixin(object):
|
||||
).version
|
||||
)
|
||||
|
||||
def update(self, pkg, spec=None, only_check=False, silent=False):
|
||||
pkg = self.get_package(pkg)
|
||||
def update(self, from_spec, to_spec=None, only_check=False, silent=False):
|
||||
pkg = self.get_package(from_spec)
|
||||
if not pkg or not pkg.metadata:
|
||||
raise UnknownPackageError(pkg)
|
||||
raise UnknownPackageError(from_spec)
|
||||
|
||||
if not silent:
|
||||
click.echo(
|
||||
"{} {:<45} {:<30}".format(
|
||||
"Checking" if only_check else "Updating",
|
||||
click.style(pkg.metadata.spec.humanize(), fg="cyan"),
|
||||
"%s (%s)" % (pkg.metadata.version, spec.requirements)
|
||||
if spec and spec.requirements
|
||||
"%s (%s)" % (pkg.metadata.version, to_spec.requirements)
|
||||
if to_spec and to_spec.requirements
|
||||
else str(pkg.metadata.version),
|
||||
),
|
||||
nl=False,
|
||||
@ -99,7 +99,7 @@ class PackageManagerUpdateMixin(object):
|
||||
click.echo("[%s]" % (click.style("Off-line", fg="yellow")))
|
||||
return pkg
|
||||
|
||||
outdated = self.outdated(pkg, spec)
|
||||
outdated = self.outdated(pkg, to_spec)
|
||||
if not silent:
|
||||
self.print_outdated_state(outdated)
|
||||
|
||||
|
@ -103,8 +103,11 @@ class BasePackageManager( # pylint: disable=too-many-public-methods
|
||||
def manifest_names(self):
|
||||
raise NotImplementedError
|
||||
|
||||
def print_message(self, message, nl=True):
|
||||
click.echo("%s: %s" % (self.__class__.__name__, message), nl=nl)
|
||||
def print_message(self, message, **kwargs):
|
||||
click.echo(
|
||||
"%s: " % str(self.__class__.__name__).replace("Package", " "), nl=False
|
||||
)
|
||||
click.secho(message, **kwargs)
|
||||
|
||||
def get_download_dir(self):
|
||||
if not self._download_dir:
|
||||
@ -160,7 +163,7 @@ class BasePackageManager( # pylint: disable=too-many-public-methods
|
||||
return result
|
||||
except ManifestException as e:
|
||||
if not PlatformioCLI.in_silence():
|
||||
click.secho(str(e), fg="yellow")
|
||||
self.print_message(str(e), fg="yellow")
|
||||
raise MissingPackageManifestError(", ".join(self.manifest_names))
|
||||
|
||||
@staticmethod
|
||||
@ -186,37 +189,63 @@ class BasePackageManager( # pylint: disable=too-many-public-methods
|
||||
metadata.version = self.generate_rand_version()
|
||||
return metadata
|
||||
|
||||
def get_installed(self):
|
||||
result = []
|
||||
for name in 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)
|
||||
if not pkg.metadata:
|
||||
try:
|
||||
spec = self.build_legacy_spec(pkg_dir)
|
||||
pkg.metadata = self.build_metadata(pkg_dir, spec)
|
||||
except MissingPackageManifestError:
|
||||
pass
|
||||
if pkg.metadata:
|
||||
result.append(pkg)
|
||||
return result
|
||||
|
||||
def get_package(self, spec):
|
||||
if isinstance(spec, PackageSourceItem):
|
||||
return spec
|
||||
|
||||
if not isinstance(spec, PackageSpec) and os.path.isdir(spec):
|
||||
for pkg in self.get_installed():
|
||||
if spec == pkg.path:
|
||||
return pkg
|
||||
return None
|
||||
|
||||
spec = self.ensure_spec(spec)
|
||||
best = None
|
||||
for pkg in self.get_installed():
|
||||
skip_conditions = [
|
||||
spec.owner
|
||||
and not ci_strings_are_equal(spec.owner, pkg.metadata.spec.owner),
|
||||
spec.external and spec.url != pkg.metadata.spec.url,
|
||||
spec.id and spec.id != pkg.metadata.spec.id,
|
||||
not spec.id
|
||||
and not spec.external
|
||||
and not ci_strings_are_equal(spec.name, pkg.metadata.name),
|
||||
]
|
||||
if any(skip_conditions):
|
||||
if not self._test_pkg_with_spec(pkg, spec):
|
||||
continue
|
||||
if self.pkg_type == PackageType.TOOL:
|
||||
# TODO: check "system" for pkg
|
||||
pass
|
||||
|
||||
assert isinstance(pkg.metadata.version, semantic_version.Version)
|
||||
if spec.requirements and pkg.metadata.version not in spec.requirements:
|
||||
continue
|
||||
if not best or (pkg.metadata.version > best.metadata.version):
|
||||
best = pkg
|
||||
return best
|
||||
|
||||
def _test_pkg_with_spec(self, pkg, spec):
|
||||
# "id" mismatch
|
||||
if spec.id and spec.id != pkg.metadata.spec.id:
|
||||
return False
|
||||
|
||||
# "owner" mismatch
|
||||
if spec.owner and not ci_strings_are_equal(spec.owner, pkg.metadata.spec.owner):
|
||||
return False
|
||||
|
||||
# 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:]
|
||||
):
|
||||
return True
|
||||
if spec.url != pkg.metadata.spec.url:
|
||||
return False
|
||||
|
||||
# "name" mismatch
|
||||
elif not spec.id and not ci_strings_are_equal(spec.name, pkg.metadata.name):
|
||||
return False
|
||||
|
||||
if self.pkg_type == PackageType.TOOL:
|
||||
# TODO: check "system" for pkg
|
||||
pass
|
||||
|
||||
return True
|
||||
|
@ -15,7 +15,6 @@
|
||||
import json
|
||||
import re
|
||||
|
||||
from platformio import exception
|
||||
from platformio.commands import PlatformioCLI
|
||||
from platformio.commands.lib.command import cli as cmd_lib
|
||||
from platformio.package.exception import UnknownPackageError
|
||||
|
Reference in New Issue
Block a user