mirror of
https://github.com/platformio/platformio-core.git
synced 2025-07-30 01:57:13 +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.compat import get_object_members, hashlib_encode_data, string_types
|
||||||
from platformio.package.manifest.parser import ManifestFileType
|
from platformio.package.manifest.parser import ManifestFileType
|
||||||
|
from platformio.package.version import cast_version_to_semver
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
@ -89,7 +90,7 @@ class PackageOutdatedResult(object):
|
|||||||
and name in ("current", "latest", "wanted")
|
and name in ("current", "latest", "wanted")
|
||||||
and not isinstance(value, semantic_version.Version)
|
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)
|
return super(PackageOutdatedResult, self).__setattr__(name, value)
|
||||||
|
|
||||||
def is_outdated(self, allow_incompatible=False):
|
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):
|
def test_update_with_metadata(isolated_pio_core, tmpdir_factory):
|
||||||
storage_dir = tmpdir_factory.mktemp("storage")
|
storage_dir = tmpdir_factory.mktemp("storage")
|
||||||
lm = LibraryPackageManager(str(storage_dir))
|
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
|
# tesy latest
|
||||||
outdated = lm.outdated(pkg)
|
outdated = lm.outdated(pkg)
|
||||||
assert str(outdated.current) == "5.10.1"
|
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)
|
new_pkg = lm.update("ArduinoJson@^5", PackageSpec("ArduinoJson@^5"), silent=True)
|
||||||
assert str(new_pkg.metadata.version) == "5.13.4"
|
assert str(new_pkg.metadata.version) == "5.13.4"
|
||||||
# check that old version is removed
|
# check that old version is removed
|
||||||
assert len(lm.get_installed()) == 1
|
assert len(lm.get_installed()) == 2
|
||||||
|
|
||||||
# update to the latest
|
# update to the latest
|
||||||
lm = LibraryPackageManager(str(storage_dir))
|
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):
|
def test_update_without_metadata(isolated_pio_core, tmpdir_factory):
|
||||||
storage_dir = tmpdir_factory.mktemp("storage")
|
storage_dir = tmpdir_factory.mktemp("storage")
|
||||||
storage_dir.join("legacy-package").mkdir().join("library.json").write(
|
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(
|
storage_dir.join("legacy-dep").mkdir().join("library.json").write(
|
||||||
'{"name": "AsyncTCP-esphome", "version": "1.1.1"}'
|
'{"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")
|
pkg = lm.get_package("AsyncMqttClient-esphome")
|
||||||
outdated = lm.outdated(pkg)
|
outdated = lm.outdated(pkg)
|
||||||
assert len(lm.get_installed()) == 2
|
assert len(lm.get_installed()) == 2
|
||||||
assert str(pkg.metadata.version) == "0.8.2"
|
assert str(pkg.metadata.version) == "0.8.0"
|
||||||
assert outdated.latest > semantic_version.Version("0.8.2")
|
assert outdated.latest > semantic_version.Version("0.8.0")
|
||||||
|
|
||||||
# update
|
# update
|
||||||
lm = LibraryPackageManager(str(storage_dir))
|
lm = LibraryPackageManager(str(storage_dir))
|
||||||
|
Reference in New Issue
Block a user