mirror of
https://github.com/platformio/platformio-core.git
synced 2025-07-30 01:57:13 +02:00
Fix "RuntimeError: maximum recursion depth exceeded" for library manager // Resolve #1528
This commit is contained in:
@ -365,6 +365,15 @@ class LibraryManager(BasePkgManager):
|
|||||||
|
|
||||||
for filters in self.normalize_dependencies(manifest['dependencies']):
|
for filters in self.normalize_dependencies(manifest['dependencies']):
|
||||||
assert "name" in filters
|
assert "name" in filters
|
||||||
|
|
||||||
|
# avoid circle dependencies
|
||||||
|
if not self.INSTALL_HISTORY:
|
||||||
|
self.INSTALL_HISTORY = []
|
||||||
|
history_key = str(filters)
|
||||||
|
if history_key in self.INSTALL_HISTORY:
|
||||||
|
continue
|
||||||
|
self.INSTALL_HISTORY.append(history_key)
|
||||||
|
|
||||||
if any(s in filters.get("version", "") for s in ("\\", "/")):
|
if any(s in filters.get("version", "") for s in ("\\", "/")):
|
||||||
self.install(
|
self.install(
|
||||||
"{name}={version}".format(**filters),
|
"{name}={version}".format(**filters),
|
||||||
|
@ -667,7 +667,7 @@ class BasePkgManager(PkgRepoMixin, PkgInstallerMixin):
|
|||||||
self.INSTALL_HISTORY = []
|
self.INSTALL_HISTORY = []
|
||||||
history_key = "%s-%s-%s" % (name, requirements or "", url or "")
|
history_key = "%s-%s-%s" % (name, requirements or "", url or "")
|
||||||
if history_key in self.INSTALL_HISTORY:
|
if history_key in self.INSTALL_HISTORY:
|
||||||
return None
|
return package_dir
|
||||||
self.INSTALL_HISTORY.append(history_key)
|
self.INSTALL_HISTORY.append(history_key)
|
||||||
|
|
||||||
if package_dir and force:
|
if package_dir and force:
|
||||||
|
@ -62,7 +62,7 @@ def test_global_install_archive(clirunner, validate_cliresult,
|
|||||||
"https://github.com/bblanchon/ArduinoJson/archive/v5.8.2.zip",
|
"https://github.com/bblanchon/ArduinoJson/archive/v5.8.2.zip",
|
||||||
"https://github.com/bblanchon/ArduinoJson/archive/v5.8.2.zip@5.8.2",
|
"https://github.com/bblanchon/ArduinoJson/archive/v5.8.2.zip@5.8.2",
|
||||||
"http://dl.platformio.org/libraries/archives/0/9540.tar.gz",
|
"http://dl.platformio.org/libraries/archives/0/9540.tar.gz",
|
||||||
"https://github.com/adafruit/Adafruit-ST7735-Library/archive/master.zip"
|
"https://github.com/Pedroalbuquerque/ESP32WebServer/archive/master.zip"
|
||||||
])
|
])
|
||||||
validate_cliresult(result)
|
validate_cliresult(result)
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ def test_global_install_archive(clirunner, validate_cliresult,
|
|||||||
items1 = [d.basename for d in isolated_pio_home.join("lib").listdir()]
|
items1 = [d.basename for d in isolated_pio_home.join("lib").listdir()]
|
||||||
items2 = [
|
items2 = [
|
||||||
"RadioHead-1.62", "ArduinoJson", "DallasTemperature_ID54",
|
"RadioHead-1.62", "ArduinoJson", "DallasTemperature_ID54",
|
||||||
"OneWire_ID1", "Adafruit ST7735 Library"
|
"OneWire_ID1", "ESP32WebServer"
|
||||||
]
|
]
|
||||||
assert set(items1) >= set(items2)
|
assert set(items1) >= set(items2)
|
||||||
|
|
||||||
@ -142,7 +142,7 @@ def test_global_lib_list(clirunner, validate_cliresult):
|
|||||||
validate_cliresult(result)
|
validate_cliresult(result)
|
||||||
assert all([
|
assert all([
|
||||||
n in result.output for n in
|
n in result.output for n in
|
||||||
("Source: https://github.com/adafruit/Adafruit-ST7735-Library/archive/master.zip",
|
("Source: https://github.com/Pedroalbuquerque/ESP32WebServer/archive/master.zip",
|
||||||
"Version: 5.10.1",
|
"Version: 5.10.1",
|
||||||
"Source: git+https://github.com/gioblu/PJON.git#3.0",
|
"Source: git+https://github.com/gioblu/PJON.git#3.0",
|
||||||
"Version: 1fb26fd", "RadioHead-1.62")
|
"Version: 1fb26fd", "RadioHead-1.62")
|
||||||
@ -157,7 +157,7 @@ def test_global_lib_list(clirunner, validate_cliresult):
|
|||||||
])
|
])
|
||||||
items1 = [i['name'] for i in json.loads(result.output)]
|
items1 = [i['name'] for i in json.loads(result.output)]
|
||||||
items2 = [
|
items2 = [
|
||||||
"Adafruit ST7735 Library", "ArduinoJson", "ArduinoJson", "ArduinoJson",
|
"ESP32WebServer", "ArduinoJson", "ArduinoJson", "ArduinoJson",
|
||||||
"ArduinoJson", "AsyncMqttClient", "AsyncTCP", "DallasTemperature",
|
"ArduinoJson", "AsyncMqttClient", "AsyncTCP", "DallasTemperature",
|
||||||
"ESPAsyncTCP", "NeoPixelBus", "OneWire", "PJON", "PJON",
|
"ESPAsyncTCP", "NeoPixelBus", "OneWire", "PJON", "PJON",
|
||||||
"PubSubClient", "RFcontrol", "RadioHead-1.62", "platformio-libmirror",
|
"PubSubClient", "RFcontrol", "RadioHead-1.62", "platformio-libmirror",
|
||||||
@ -221,9 +221,9 @@ def test_global_lib_uninstall(clirunner, validate_cliresult,
|
|||||||
validate_cliresult(result)
|
validate_cliresult(result)
|
||||||
items = json.loads(result.output)
|
items = json.loads(result.output)
|
||||||
result = clirunner.invoke(cmd_lib,
|
result = clirunner.invoke(cmd_lib,
|
||||||
["-g", "uninstall", items[0]['__pkg_dir']])
|
["-g", "uninstall", items[5]['__pkg_dir']])
|
||||||
validate_cliresult(result)
|
validate_cliresult(result)
|
||||||
assert "Uninstalling Adafruit ST7735 Library" in result.output
|
assert "Uninstalling AsyncTCP" in result.output
|
||||||
|
|
||||||
# uninstall the rest libraries
|
# uninstall the rest libraries
|
||||||
result = clirunner.invoke(cmd_lib, [
|
result = clirunner.invoke(cmd_lib, [
|
||||||
@ -238,7 +238,7 @@ def test_global_lib_uninstall(clirunner, validate_cliresult,
|
|||||||
"PubSubClient", "ArduinoJson@src-69ebddd821f771debe7ee734d3c7fa81",
|
"PubSubClient", "ArduinoJson@src-69ebddd821f771debe7ee734d3c7fa81",
|
||||||
"ESPAsyncTCP_ID305", "DallasTemperature_ID54", "NeoPixelBus_ID547",
|
"ESPAsyncTCP_ID305", "DallasTemperature_ID54", "NeoPixelBus_ID547",
|
||||||
"PJON", "AsyncMqttClient_ID346", "ArduinoJson_ID64",
|
"PJON", "AsyncMqttClient_ID346", "ArduinoJson_ID64",
|
||||||
"PJON@src-79de467ebe19de18287becff0a1fb42d", "AsyncTCP_ID1826"
|
"PJON@src-79de467ebe19de18287becff0a1fb42d", "ESP32WebServer"
|
||||||
]
|
]
|
||||||
assert set(items1) == set(items2)
|
assert set(items1) == set(items2)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user