forked from platformio/platformio-core
Fixed a "ValueError: Invalid simple block" when uninstalling a package with a custom name and external source // Resolve #3816
This commit is contained in:
@ -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
|
- 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>`_)
|
- 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 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**
|
* **PlatformIO Home**
|
||||||
|
|
||||||
|
@ -112,16 +112,11 @@ class LibraryPackageManager(BasePackageManager): # pylint: disable=too-many-anc
|
|||||||
)
|
)
|
||||||
|
|
||||||
def _install_dependency(self, dependency, silent=False):
|
def _install_dependency(self, dependency, silent=False):
|
||||||
if set(["name", "version"]) <= set(dependency.keys()) and any(
|
spec = PackageSpec(
|
||||||
c in dependency["version"] for c in (":", "/", "@")
|
owner=dependency.get("owner"),
|
||||||
):
|
name=dependency.get("name"),
|
||||||
spec = PackageSpec("%s=%s" % (dependency["name"], dependency["version"]))
|
requirements=dependency.get("version"),
|
||||||
else:
|
)
|
||||||
spec = PackageSpec(
|
|
||||||
owner=dependency.get("owner"),
|
|
||||||
name=dependency.get("name"),
|
|
||||||
requirements=dependency.get("version"),
|
|
||||||
)
|
|
||||||
search_filters = {
|
search_filters = {
|
||||||
key: value
|
key: value
|
||||||
for key, value in dependency.items()
|
for key, value in dependency.items()
|
||||||
@ -143,11 +138,12 @@ class LibraryPackageManager(BasePackageManager): # pylint: disable=too-many-anc
|
|||||||
if not silent:
|
if not silent:
|
||||||
self.print_message("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(
|
spec = PackageSpec(
|
||||||
PackageSpec(
|
owner=dependency.get("owner"),
|
||||||
name=dependency.get("name"), requirements=dependency.get("version")
|
name=dependency.get("name"),
|
||||||
)
|
requirements=dependency.get("version"),
|
||||||
)
|
)
|
||||||
|
pkg = self.get_package(spec)
|
||||||
if not pkg:
|
if not pkg:
|
||||||
continue
|
continue
|
||||||
self._uninstall(pkg, silent=silent)
|
self._uninstall(pkg, silent=silent)
|
||||||
|
@ -107,16 +107,21 @@ class PackageSpec(object): # pylint: disable=too-many-instance-attributes
|
|||||||
def __init__( # pylint: disable=redefined-builtin,too-many-arguments
|
def __init__( # pylint: disable=redefined-builtin,too-many-arguments
|
||||||
self, raw=None, owner=None, id=None, name=None, requirements=None, url=None
|
self, raw=None, owner=None, id=None, name=None, requirements=None, url=None
|
||||||
):
|
):
|
||||||
|
self._requirements = None
|
||||||
self.owner = owner
|
self.owner = owner
|
||||||
self.id = id
|
self.id = id
|
||||||
self.name = name
|
self.name = name
|
||||||
self._requirements = None
|
|
||||||
self.url = url
|
self.url = url
|
||||||
self.raw = raw
|
self.raw = raw
|
||||||
if requirements:
|
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._name_is_custom = False
|
||||||
self._parse(raw)
|
self._parse(self.raw)
|
||||||
|
|
||||||
def __eq__(self, other):
|
def __eq__(self, other):
|
||||||
return all(
|
return all(
|
||||||
|
@ -18,11 +18,10 @@ from platformio.package.meta import PackageSpec
|
|||||||
|
|
||||||
class PlatformPackagesMixin(object):
|
class PlatformPackagesMixin(object):
|
||||||
def get_package_spec(self, name, version=None):
|
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(
|
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):
|
def get_package(self, name, spec=None):
|
||||||
|
@ -169,6 +169,15 @@ def test_spec_vcs_urls():
|
|||||||
url="git+git@github.com:platformio/platformio-core.git",
|
url="git+git@github.com:platformio/platformio-core.git",
|
||||||
requirements="^1.2.3,!=5",
|
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():
|
def test_spec_as_dict():
|
||||||
|
Reference in New Issue
Block a user