mirror of
https://github.com/platformio/platformio-core.git
synced 2025-07-29 17:47:14 +02:00
Fix a bug with package updating when version is not in SemVer format // Resolve #3635
This commit is contained in:
@ -22,6 +22,7 @@ import semantic_version
|
||||
|
||||
from platformio.compat import get_object_members, hashlib_encode_data, string_types
|
||||
from platformio.package.manifest.parser import ManifestFileType
|
||||
from platformio.package.version import cast_version_to_semver
|
||||
|
||||
try:
|
||||
from urllib.parse import urlparse
|
||||
@ -89,7 +90,7 @@ class PackageOutdatedResult(object):
|
||||
and name in ("current", "latest", "wanted")
|
||||
and not isinstance(value, semantic_version.Version)
|
||||
):
|
||||
value = semantic_version.Version(str(value))
|
||||
value = cast_version_to_semver(str(value))
|
||||
return super(PackageOutdatedResult, self).__setattr__(name, value)
|
||||
|
||||
def is_outdated(self, allow_incompatible=False):
|
||||
|
@ -392,8 +392,14 @@ def test_registry(isolated_pio_core):
|
||||
def test_update_with_metadata(isolated_pio_core, tmpdir_factory):
|
||||
storage_dir = tmpdir_factory.mktemp("storage")
|
||||
lm = LibraryPackageManager(str(storage_dir))
|
||||
pkg = lm.install("ArduinoJson @ 5.10.1", silent=True)
|
||||
|
||||
# test non SemVer in registry
|
||||
pkg = lm.install("RadioHead @ <1.90", silent=True)
|
||||
outdated = lm.outdated(pkg)
|
||||
assert str(outdated.current) == "1.89.0"
|
||||
assert outdated.latest > semantic_version.Version("1.100.0")
|
||||
|
||||
pkg = lm.install("ArduinoJson @ 5.10.1", silent=True)
|
||||
# tesy latest
|
||||
outdated = lm.outdated(pkg)
|
||||
assert str(outdated.current) == "5.10.1"
|
||||
@ -411,7 +417,7 @@ def test_update_with_metadata(isolated_pio_core, tmpdir_factory):
|
||||
new_pkg = lm.update("ArduinoJson@^5", PackageSpec("ArduinoJson@^5"), silent=True)
|
||||
assert str(new_pkg.metadata.version) == "5.13.4"
|
||||
# check that old version is removed
|
||||
assert len(lm.get_installed()) == 1
|
||||
assert len(lm.get_installed()) == 2
|
||||
|
||||
# update to the latest
|
||||
lm = LibraryPackageManager(str(storage_dir))
|
||||
@ -422,7 +428,7 @@ def test_update_with_metadata(isolated_pio_core, tmpdir_factory):
|
||||
def test_update_without_metadata(isolated_pio_core, tmpdir_factory):
|
||||
storage_dir = tmpdir_factory.mktemp("storage")
|
||||
storage_dir.join("legacy-package").mkdir().join("library.json").write(
|
||||
'{"name": "AsyncMqttClient-esphome", "version": "0.8.2"}'
|
||||
'{"name": "AsyncMqttClient-esphome", "version": "0.8"}'
|
||||
)
|
||||
storage_dir.join("legacy-dep").mkdir().join("library.json").write(
|
||||
'{"name": "AsyncTCP-esphome", "version": "1.1.1"}'
|
||||
@ -431,8 +437,8 @@ def test_update_without_metadata(isolated_pio_core, tmpdir_factory):
|
||||
pkg = lm.get_package("AsyncMqttClient-esphome")
|
||||
outdated = lm.outdated(pkg)
|
||||
assert len(lm.get_installed()) == 2
|
||||
assert str(pkg.metadata.version) == "0.8.2"
|
||||
assert outdated.latest > semantic_version.Version("0.8.2")
|
||||
assert str(pkg.metadata.version) == "0.8.0"
|
||||
assert outdated.latest > semantic_version.Version("0.8.0")
|
||||
|
||||
# update
|
||||
lm = LibraryPackageManager(str(storage_dir))
|
||||
|
Reference in New Issue
Block a user