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