Minor improvements

This commit is contained in:
Ivan Kravets
2020-08-12 20:09:10 +03:00
parent 893ca1b328
commit d5451756fd
10 changed files with 90 additions and 79 deletions

View File

@ -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:

View File

@ -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:

View File

@ -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(

View File

@ -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,

View File

@ -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

View File

@ -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",
)

View File

@ -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(

View File

@ -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)

View File

@ -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

View File

@ -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