Fixed a "ValueError: Invalid simple block" when uninstalling a package with a custom name and external source // Resolve #3816

This commit is contained in:
Ivan Kravets
2021-01-26 16:15:11 +02:00
parent dd4fff3a79
commit 4012a86cac
5 changed files with 31 additions and 21 deletions

View File

@ -27,6 +27,7 @@ PlatformIO Core 5
- Added new `check_prune_system_threshold <https://docs.platformio.org/page/core/userguide/cmd_settings.html#check-prune-system-threshold>`__ setting
- Disabled automatic removal of unnecessary development platform packages (`issue #3708 <https://github.com/platformio/platformio-core/issues/3708>`_, `issue #3770 <https://github.com/platformio/platformio-core/issues/3770>`_)
- Fixed an issue when unnecessary packages were removed in ``update --dry-run`` mode (`issue #3809 <https://github.com/platformio/platformio-core/issues/3809>`_)
- Fixed a "ValueError: Invalid simple block" when uninstalling a package with a custom name and external source (`issue #3816 <https://github.com/platformio/platformio-core/issues/3816>`_)
* **PlatformIO Home**

View File

@ -112,16 +112,11 @@ class LibraryPackageManager(BasePackageManager): # pylint: disable=too-many-anc
)
def _install_dependency(self, dependency, silent=False):
if set(["name", "version"]) <= set(dependency.keys()) and any(
c in dependency["version"] for c in (":", "/", "@")
):
spec = PackageSpec("%s=%s" % (dependency["name"], dependency["version"]))
else:
spec = PackageSpec(
owner=dependency.get("owner"),
name=dependency.get("name"),
requirements=dependency.get("version"),
)
spec = PackageSpec(
owner=dependency.get("owner"),
name=dependency.get("name"),
requirements=dependency.get("version"),
)
search_filters = {
key: value
for key, value in dependency.items()
@ -143,11 +138,12 @@ class LibraryPackageManager(BasePackageManager): # pylint: disable=too-many-anc
if not silent:
self.print_message("Removing dependencies...", fg="yellow")
for dependency in manifest.get("dependencies"):
pkg = self.get_package(
PackageSpec(
name=dependency.get("name"), requirements=dependency.get("version")
)
spec = PackageSpec(
owner=dependency.get("owner"),
name=dependency.get("name"),
requirements=dependency.get("version"),
)
pkg = self.get_package(spec)
if not pkg:
continue
self._uninstall(pkg, silent=silent)

View File

@ -107,16 +107,21 @@ class PackageSpec(object): # pylint: disable=too-many-instance-attributes
def __init__( # pylint: disable=redefined-builtin,too-many-arguments
self, raw=None, owner=None, id=None, name=None, requirements=None, url=None
):
self._requirements = None
self.owner = owner
self.id = id
self.name = name
self._requirements = None
self.url = url
self.raw = raw
if requirements:
self.requirements = requirements
try:
self.requirements = requirements
except ValueError as exc:
if not self.name or self.url or self.raw:
raise exc
self.raw = "%s=%s" % (self.name, requirements)
self._name_is_custom = False
self._parse(raw)
self._parse(self.raw)
def __eq__(self, other):
return all(

View File

@ -18,11 +18,10 @@ from platformio.package.meta import PackageSpec
class PlatformPackagesMixin(object):
def get_package_spec(self, name, version=None):
version = version or self.packages[name].get("version")
if version and any(c in version for c in (":", "/", "@")):
return PackageSpec("%s=%s" % (name, version))
return PackageSpec(
owner=self.packages[name].get("owner"), name=name, requirements=version
owner=self.packages[name].get("owner"),
name=name,
requirements=version or self.packages[name].get("version"),
)
def get_package(self, name, spec=None):

View File

@ -169,6 +169,15 @@ def test_spec_vcs_urls():
url="git+git@github.com:platformio/platformio-core.git",
requirements="^1.2.3,!=5",
)
assert PackageSpec(
owner="platformio",
name="external-repo",
requirements="https://github.com/platformio/platformio-core",
) == PackageSpec(
owner="platformio",
name="external-repo",
url="git+https://github.com/platformio/platformio-core",
)
def test_spec_as_dict():