Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-platformio for
openSUSE:Factory checked in at 2026-03-17 19:04:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-platformio (Old)
and /work/SRC/openSUSE:Factory/.python-platformio.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-platformio"
Tue Mar 17 19:04:26 2026 rev:16 rq:1339431 version:6.1.19
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-platformio/python-platformio.changes
2025-05-20 09:35:03.973633807 +0200
+++
/work/SRC/openSUSE:Factory/.python-platformio.new.8177/python-platformio.changes
2026-03-17 19:06:03.392548154 +0100
@@ -1,0 +2,30 @@
+Mon Mar 16 20:42:18 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 6.1.19:
+ * Added support for Python 3.14
+ * Upgraded the Doctest testing framework to version 2.4.12, the
+ GoogleTest to version 1.17.0, and the Unity to version 2.6.1,
+ incorporating the latest features and improvements for
+ enhanced testing capabilities
+ * Enhanced compatibility with the CCLS language server,
+ improving integration with editors like Emacs, Sublime Text,
+ and Vim (issue #5186)
+ * Improved error messages for package installation to make it
+ easier to understand when a package is missing or
+ incompatible (pull #5336).
+ * Fixed a regression issue where custom build flags were not
+ properly reflected in the compile_commands.json file,
+ ensuring accurate compilation database generation
+ * Fixed an issue where fully-qualified serial port URLs (e.g.,
+ ``rfc2217://host:port``) were incorrectly treated as wildcard
+ patterns (issue #5225)
+ * Fixed an issue where the toolchain path in static analysis
+ was not handled correctly if it contained spaces (pull #5351)
+ * Fixed installation failure when the executable path contains
+ spaces for ``postinstall`` scripts and handling both list and
+ string command formats (pull #5366)
+ * Fixed cleanup of the ``.pio/libdeps`` folder so that leftover
+ libraries are properly removed when the lib_deps option is
+ empty (issue #5110)
+
+-------------------------------------------------------------------
Old:
----
platformio-6.1.18.tar.gz
New:
----
platformio-6.1.19.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-platformio.spec ++++++
--- /var/tmp/diff_new_pack.JOLOJ2/_old 2026-03-17 19:06:03.904569372 +0100
+++ /var/tmp/diff_new_pack.JOLOJ2/_new 2026-03-17 19:06:03.908569538 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-platformio
#
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-platformio
-Version: 6.1.18
+Version: 6.1.19
Release: 0
Summary: New Generation Ecosystem for Embedded Development
License: Apache-2.0
++++++ platformio-6.1.18.tar.gz -> platformio-6.1.19.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformio-6.1.18/PKG-INFO
new/platformio-6.1.19/PKG-INFO
--- old/platformio-6.1.18/PKG-INFO 2025-03-11 21:00:28.746680700 +0100
+++ new/platformio-6.1.19/PKG-INFO 2026-02-04 14:40:47.688439000 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 2.2
+Metadata-Version: 2.4
Name: platformio
-Version: 6.1.18
+Version: 6.1.19
Summary: Your Gateway to Embedded Software Development Excellence. Unlock the
true potential of embedded software development with PlatformIO's collaborative
ecosystem, embracing declarative principles, test-driven methodologies, and
modern toolchains for unrivaled success.
Home-page: https://platformio.org
Author: PlatformIO Labs
@@ -21,7 +21,7 @@
Requires-Python: >=3.6
License-File: LICENSE
Requires-Dist: bottle==0.13.*
-Requires-Dist: click<8.1.8,>=8.0.4
+Requires-Dist: click<8.4,>=8.0.4
Requires-Dist: colorama
Requires-Dist: marshmallow==3.*
Requires-Dist: pyelftools<1,>=0.27
@@ -30,8 +30,8 @@
Requires-Dist: semantic_version==2.10.*
Requires-Dist: tabulate==0.*
Requires-Dist: ajsonrpc==1.2.*
-Requires-Dist: starlette<0.47,>=0.19
-Requires-Dist: uvicorn<0.35,>=0.16
+Requires-Dist: starlette<0.53,>=0.19
+Requires-Dist: uvicorn<0.41,>=0.16
Requires-Dist: wsproto==1.*
Requires-Dist: chardet<6,>=3.0.2; platform_system == "Darwin" and "arm" in
platform_machine
Dynamic: author
@@ -41,6 +41,7 @@
Dynamic: home-page
Dynamic: keywords
Dynamic: license
+Dynamic: license-file
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformio-6.1.18/platformio/__init__.py
new/platformio-6.1.19/platformio/__init__.py
--- old/platformio-6.1.18/platformio/__init__.py 2025-03-11
20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/__init__.py 2026-02-04
14:26:43.000000000 +0100
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-VERSION = (6, 1, 18)
+VERSION = (6, 1, 19)
__version__ = ".".join([str(s) for s in VERSION])
__title__ = "platformio"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformio-6.1.18/platformio/assets/system/99-platformio-udev.rules
new/platformio-6.1.19/platformio/assets/system/99-platformio-udev.rules
--- old/platformio-6.1.18/platformio/assets/system/99-platformio-udev.rules
2025-03-11 20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/assets/system/99-platformio-udev.rules
2026-02-04 14:26:43.000000000 +0100
@@ -31,6 +31,9 @@
# FT231XS USB UART
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6015", MODE:="0666",
ENV{ID_MM_DEVICE_IGNORE}="1", ENV{ID_MM_PORT_IGNORE}="1"
+# FX2348N USB UART
+ATTRS{idVendor}=="0843", ATTRS{idProduct}=="5740", MODE:="0666",
ENV{ID_MM_DEVICE_IGNORE}="1", ENV{ID_MM_PORT_IGNORE}="1"
+
# Prolific Technology, Inc. PL2303 Serial Port
ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", MODE:="0666",
ENV{ID_MM_DEVICE_IGNORE}="1", ENV{ID_MM_PORT_IGNORE}="1"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformio-6.1.18/platformio/builder/tools/piobuild.py
new/platformio-6.1.19/platformio/builder/tools/piobuild.py
--- old/platformio-6.1.18/platformio/builder/tools/piobuild.py 2025-03-11
20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/builder/tools/piobuild.py 2026-02-04
14:26:43.000000000 +0100
@@ -58,8 +58,8 @@
def BuildProgram(env):
- env.ProcessCompileDbToolchainOption()
env.ProcessProgramDeps()
+ env.ProcessCompileDbToolchainOption()
env.ProcessProjectDeps()
# append into the beginning a main LD script
@@ -91,26 +91,6 @@
return program
-def ProcessCompileDbToolchainOption(env):
- if "compiledb" not in COMMAND_LINE_TARGETS:
- return
- # Resolve absolute path of toolchain
- for cmd in ("CC", "CXX", "AS"):
- if cmd not in env:
- continue
- if os.path.isabs(env[cmd]) or '"' in env[cmd]:
- continue
- env[cmd] = where_is_program(env.subst("$%s" % cmd),
env.subst("${ENV['PATH']}"))
- if " " in env[cmd]: # issue #4998: Space in compilator path
- env[cmd] = f'"{env[cmd]}"'
-
- if env.get("COMPILATIONDB_INCLUDE_TOOLCHAIN"):
- print("Warning! `COMPILATIONDB_INCLUDE_TOOLCHAIN` is scoping")
- for scope, includes in env.DumpIntegrationIncludes().items():
- if scope in ("toolchain",):
- env.Append(CPPPATH=includes)
-
-
def ProcessProgramDeps(env):
def _append_pio_macros():
core_version = pepver_to_semver(__version__)
@@ -148,6 +128,27 @@
env.ProcessUnFlags(env.get("BUILD_UNFLAGS"))
+def ProcessCompileDbToolchainOption(env):
+ if "compiledb" not in COMMAND_LINE_TARGETS:
+ return
+
+ # Resolve absolute path of toolchain
+ for cmd in ("CC", "CXX", "AS"):
+ if cmd not in env:
+ continue
+ if os.path.isabs(env[cmd]) or '"' in env[cmd]:
+ continue
+ env[cmd] = where_is_program(env.subst("$%s" % cmd),
env.subst("${ENV['PATH']}"))
+ if " " in env[cmd]: # issue #4998: Space in compilator path
+ env[cmd] = f'"{env[cmd]}"'
+
+ if env.get("COMPILATIONDB_INCLUDE_TOOLCHAIN"):
+ print("Warning! `COMPILATIONDB_INCLUDE_TOOLCHAIN` is scoping")
+ for scope, includes in env.DumpIntegrationIncludes().items():
+ if scope in ("toolchain",):
+ env.Append(CPPPATH=includes)
+
+
def ProcessProjectDeps(env):
plb = env.ConfigureProjectLibBuilder()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformio-6.1.18/platformio/builder/tools/piomisc.py
new/platformio-6.1.19/platformio/builder/tools/piomisc.py
--- old/platformio-6.1.18/platformio/builder/tools/piomisc.py 2025-03-11
20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/builder/tools/piomisc.py 2026-02-04
14:26:43.000000000 +0100
@@ -145,7 +145,7 @@
env.AddMethod(GetActualLDScript)
env.AddMethod(ConfigureDebugTarget)
env.AddMethod(GetExtraScripts)
- # bakward-compatibility with Zephyr build script
+ # backward-compatibility with Zephyr build script
env.AddMethod(ConfigureDebugTarget, "ConfigureDebugFlags")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformio-6.1.18/platformio/cache.py
new/platformio-6.1.19/platformio/cache.py
--- old/platformio-6.1.18/platformio/cache.py 2025-03-11 20:48:05.000000000
+0100
+++ new/platformio-6.1.19/platformio/cache.py 2026-02-04 14:26:43.000000000
+0100
@@ -12,7 +12,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-import codecs
import hashlib
import os
from time import time
@@ -57,7 +56,7 @@
cache_path = self.get_cache_path(key)
if not os.path.isfile(cache_path):
return None
- with codecs.open(cache_path, "rb", encoding="utf8") as fp:
+ with open(cache_path, "r", encoding="utf8") as fp:
return fp.read()
def set(self, key, data, valid):
@@ -78,7 +77,7 @@
if not os.path.isdir(os.path.dirname(cache_path)):
os.makedirs(os.path.dirname(cache_path))
try:
- with codecs.open(cache_path, mode="wb", encoding="utf8") as fp:
+ with open(cache_path, mode="w", encoding="utf8") as fp:
fp.write(data)
with open(self._db_path, mode="a", encoding="utf8") as fp:
fp.write("%s=%s\n" % (str(expire_time),
os.path.basename(cache_path)))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformio-6.1.18/platformio/check/tools/base.py
new/platformio-6.1.19/platformio/check/tools/base.py
--- old/platformio-6.1.18/platformio/check/tools/base.py 2025-03-11
20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/check/tools/base.py 2026-02-04
14:26:43.000000000 +0100
@@ -90,7 +90,7 @@
def _extract_defines(language, includes_file):
build_flags = self.cxx_flags if language == "c++" else
self.cc_flags
defines = []
- cmd = "echo | %s -x %s %s %s -dM -E -" % (
+ cmd = 'echo | "%s" -x %s %s %s -dM -E -' % (
self.cc_path,
language,
" ".join(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformio-6.1.18/platformio/check/tools/pvsstudio.py
new/platformio-6.1.19/platformio/check/tools/pvsstudio.py
--- old/platformio-6.1.18/platformio/check/tools/pvsstudio.py 2025-03-11
20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/check/tools/pvsstudio.py 2026-02-04
14:26:43.000000000 +0100
@@ -192,7 +192,7 @@
compiler = self.cc_path
cmd = [
- compiler,
+ '"%s"' % compiler,
'"%s"' % src_file,
"-E",
"-o",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformio-6.1.18/platformio/cli.py
new/platformio-6.1.19/platformio/cli.py
--- old/platformio-6.1.18/platformio/cli.py 2025-03-11 20:48:05.000000000
+0100
+++ new/platformio-6.1.19/platformio/cli.py 2026-02-04 14:26:43.000000000
+0100
@@ -18,7 +18,7 @@
import click
-class PlatformioCLI(click.MultiCommand):
+class PlatformioCLI(click.Group):
leftover_args = []
def __init__(self, *args, **kwargs):
@@ -84,7 +84,7 @@
PlatformioCLI.leftover_args = ctx.protected_args + ctx.args
return super().invoke(ctx)
- def list_commands(self, ctx):
+ def list_commands(self, ctx): # pylint: disable=unused-argument
return sorted(list(self._find_pio_commands()))
def get_command(self, ctx, cmd_name):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformio-6.1.18/platformio/compat.py
new/platformio-6.1.19/platformio/compat.py
--- old/platformio-6.1.18/platformio/compat.py 2025-03-11 20:48:05.000000000
+0100
+++ new/platformio-6.1.19/platformio/compat.py 2026-02-04 14:26:43.000000000
+0100
@@ -146,3 +146,84 @@
continue
return True
return False
+
+
+def click_launch(url, wait=False, locate=False) -> int:
+ return _click_open_url(url, wait=wait, locate=locate)
+
+
+def _click_open_url( # pylint: disable=too-many-branches,
too-many-return-statements, consider-using-with, import-outside-toplevel,
unspecified-encoding
+ url, wait=False, locate=False
+):
+ """
+ Issue https://github.com/pallets/click/issues/2868
+ Keep in sync with
https://github.com/pallets/click/blob/main/src/click/_termui_impl.py
+ """
+ import subprocess
+
+ def _unquote_file(url) -> str:
+ from urllib.parse import unquote
+
+ if url.startswith("file://"):
+ url = unquote(url[7:])
+
+ return url
+
+ if IS_MACOS:
+ args = ["open"]
+ if wait:
+ args.append("-W")
+ if locate:
+ args.append("-R")
+ args.append(_unquote_file(url))
+ null = open("/dev/null", "w")
+ try:
+ return subprocess.Popen(args, stderr=null).wait()
+ finally:
+ null.close()
+ elif IS_WINDOWS:
+ if locate:
+ url = _unquote_file(url)
+ args = ["explorer", f"/select,{url}"]
+ else:
+ args = ["start"]
+ if wait:
+ args.append("/WAIT")
+ args.append("")
+ args.append(url)
+ try:
+ return subprocess.call(args, shell=True)
+ except OSError:
+ # Command not found
+ return 127
+ elif IS_CYGWIN:
+ if locate:
+ url = _unquote_file(url)
+ args = ["cygstart", os.path.dirname(url)]
+ else:
+ args = ["cygstart"]
+ if wait:
+ args.append("-w")
+ args.append(url)
+ try:
+ return subprocess.call(args)
+ except OSError:
+ # Command not found
+ return 127
+
+ try:
+ if locate:
+ url = os.path.dirname(_unquote_file(url)) or "."
+ else:
+ url = _unquote_file(url)
+ c = subprocess.Popen(["xdg-open", url])
+ if wait:
+ return c.wait()
+ return 0
+ except OSError:
+ if url.startswith(("http://", "https://")) and not locate and not wait:
+ import webbrowser
+
+ webbrowser.open(url)
+ return 0
+ return 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformio-6.1.18/platformio/debug/cli.py
new/platformio-6.1.19/platformio/debug/cli.py
--- old/platformio-6.1.18/platformio/debug/cli.py 2025-03-11
20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/debug/cli.py 2026-02-04
14:26:43.000000000 +0100
@@ -167,7 +167,10 @@
def _run(project_dir, debug_config, client_extra_args):
- loop = asyncio.ProactorEventLoop() if IS_WINDOWS else
asyncio.get_event_loop()
+ try:
+ loop = asyncio.ProactorEventLoop() if IS_WINDOWS else
asyncio.get_event_loop()
+ except RuntimeError:
+ loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
client = GDBClientProcess(project_dir, debug_config)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformio-6.1.18/platformio/debug/config/native.py
new/platformio-6.1.19/platformio/debug/config/native.py
--- old/platformio-6.1.18/platformio/debug/config/native.py 2025-03-11
20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/debug/config/native.py 2026-02-04
14:26:43.000000000 +0100
@@ -28,6 +28,4 @@
end
$INIT_BREAK
-""" + (
- "set startup-with-shell off" if not IS_WINDOWS else ""
- )
+""" + ("set startup-with-shell off" if not IS_WINDOWS else "")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformio-6.1.18/platformio/dependencies.py
new/platformio-6.1.19/platformio/dependencies.py
--- old/platformio-6.1.18/platformio/dependencies.py 2025-03-11
20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/dependencies.py 2026-02-04
14:26:43.000000000 +0100
@@ -29,7 +29,7 @@
def get_pip_dependencies():
core = [
"bottle == 0.13.*",
- "click >=8.0.4, <8.1.8",
+ "click >=8.0.4, <8.4", # click 9.0 removes 'protected_args' attribute
"colorama",
"marshmallow == 3.*",
"pyelftools >=0.27, <1",
@@ -42,8 +42,8 @@
home = [
# PIO Home requirements
"ajsonrpc == 1.2.*",
- "starlette >=0.19, <0.47",
- "uvicorn >=0.16, <0.35",
+ "starlette >=0.19, <0.53",
+ "uvicorn >=0.16, <0.41",
"wsproto == 1.*",
]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformio-6.1.18/platformio/device/finder.py
new/platformio-6.1.19/platformio/device/finder.py
--- old/platformio-6.1.18/platformio/device/finder.py 2025-03-11
20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/device/finder.py 2026-02-04
14:26:43.000000000 +0100
@@ -133,6 +133,10 @@
def find(self, initial_port=None):
if initial_port:
+ # Treat any URL (contains '://') as a literal port
+ if "://" in initial_port:
+ return initial_port
+ # Otherwise fall back to existing wildcard logic
if not is_pattern_port(initial_port):
return initial_port
return self.match_serial_port(initial_port)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformio-6.1.18/platformio/device/monitor/filters/base.py
new/platformio-6.1.19/platformio/device/monitor/filters/base.py
--- old/platformio-6.1.18/platformio/device/monitor/filters/base.py
2025-03-11 20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/device/monitor/filters/base.py
2026-02-04 14:26:43.000000000 +0100
@@ -56,6 +56,9 @@
def register_filters(platform=None, options=None):
+ # issue #4556: remove default colorize filter
+ miniterm.TRANSFORMATIONS.pop("colorize", None)
+
# project filters
load_monitor_filters(
ProjectConfig.get_instance().get("platformio", "monitor_dir"),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformio-6.1.18/platformio/home/cli.py
new/platformio-6.1.19/platformio/home/cli.py
--- old/platformio-6.1.18/platformio/home/cli.py 2025-03-11
20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/home/cli.py 2026-02-04
14:26:43.000000000 +0100
@@ -17,7 +17,7 @@
import click
-from platformio.compat import IS_WINDOWS
+from platformio.compat import IS_WINDOWS, click_launch
from platformio.home.run import run_server
from platformio.package.manager.core import get_core_package_dir
@@ -86,7 +86,7 @@
"PlatformIO Home server is already started in another process.",
fg="yellow"
)
if not no_open:
- click.launch(home_url)
+ click_launch(home_url)
return
run_server(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformio-6.1.18/platformio/home/rpc/handlers/os.py
new/platformio-6.1.19/platformio/home/rpc/handlers/os.py
--- old/platformio-6.1.18/platformio/home/rpc/handlers/os.py 2025-03-11
20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/home/rpc/handlers/os.py 2026-02-04
14:26:43.000000000 +0100
@@ -18,11 +18,9 @@
import shutil
from functools import cmp_to_key
-import click
-
from platformio import fs
from platformio.cache import ContentCache
-from platformio.compat import aio_to_thread
+from platformio.compat import aio_to_thread, click_launch
from platformio.device.list.util import list_logical_devices
from platformio.home.rpc.handlers.base import BaseRPCHandler
from platformio.http import HTTPSession, ensure_internet_on
@@ -84,15 +82,15 @@
@staticmethod
def open_url(url):
- return click.launch(url)
+ return click_launch(url)
@staticmethod
def reveal_file(path):
- return click.launch(path, locate=True)
+ return click_launch(path, locate=True)
@staticmethod
def open_file(path):
- return click.launch(path)
+ return click_launch(path)
@staticmethod
def call_path_module_func(name, args, **kwargs):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformio-6.1.18/platformio/package/commands/install.py
new/platformio-6.1.19/platformio/package/commands/install.py
--- old/platformio-6.1.18/platformio/package/commands/install.py
2025-03-11 20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/package/commands/install.py
2026-02-04 14:26:43.000000000 +0100
@@ -204,7 +204,6 @@
def _install_project_env_libraries(project_env, options):
- _uninstall_project_unused_libdeps(project_env, options)
already_up_to_date = not options.get("force")
config = ProjectConfig.get_instance()
@@ -242,6 +241,8 @@
)
lib_deps.extend(test_runner.EXTRA_LIB_DEPS or [])
+ _uninstall_project_unused_libdeps(env_lm, lib_deps)
+
for library in lib_deps:
spec = PackageSpec(library)
# skip built-in dependencies
@@ -262,12 +263,13 @@
return not already_up_to_date
-def _uninstall_project_unused_libdeps(project_env, options):
- config = ProjectConfig.get_instance()
- lib_deps = set(config.get(f"env:{project_env}", "lib_deps"))
+def _uninstall_project_unused_libdeps(lm, lib_deps):
+ lib_deps = set(lib_deps)
+ storage_dir = Path(lm.package_dir)
if not lib_deps:
+ if storage_dir.exists():
+ fs.rmtree(str(storage_dir))
return
- storage_dir = Path(config.get("platformio", "libdeps_dir"), project_env)
integrity_dat = storage_dir / "integrity.dat"
if integrity_dat.is_file():
prev_lib_deps = set(
@@ -275,10 +277,7 @@
)
if lib_deps == prev_lib_deps:
return
- lm = LibraryPackageManager(str(storage_dir))
- if options.get("silent"):
- lm.set_log_level(logging.WARN)
- else:
+ if lm.log.getEffectiveLevel() < logging.WARN:
click.secho("Removing unused dependencies...")
for spec in set(prev_lib_deps) - set(lib_deps):
try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformio-6.1.18/platformio/package/exception.py
new/platformio-6.1.19/platformio/package/exception.py
--- old/platformio-6.1.18/platformio/package/exception.py 2025-03-11
20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/package/exception.py 2026-02-04
14:26:43.000000000 +0100
@@ -12,7 +12,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from platformio import util
from platformio.exception import UserSideException
@@ -52,9 +51,13 @@
class UnknownPackageError(PackageException):
+ MESSAGE = "Could not find the package with '{0}' requirements"
+
+
+class IncompatiblePackageError(UnknownPackageError):
MESSAGE = (
- "Could not find the package with '{0}' requirements for your system
'%s'"
- % util.get_systype()
+ "Could not find a version of the package with '{0}' requirements "
+ "compatible with the '{1}' system"
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformio-6.1.18/platformio/package/manager/_registry.py
new/platformio-6.1.19/platformio/package/manager/_registry.py
--- old/platformio-6.1.18/platformio/package/manager/_registry.py
2025-03-11 20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/package/manager/_registry.py
2026-02-04 14:26:43.000000000 +0100
@@ -16,8 +16,9 @@
import click
-from platformio.package.exception import UnknownPackageError
-from platformio.package.meta import PackageSpec
+from platformio import util
+from platformio.package.exception import IncompatiblePackageError,
UnknownPackageError
+from platformio.package.meta import PackageSpec, PackageType
from platformio.package.version import cast_version_to_semver
from platformio.registry.client import RegistryClient
from platformio.registry.mirror import RegistryFileMirrorIterator
@@ -44,6 +45,8 @@
pkgfile = self.pick_compatible_pkg_file(version["files"]) if version
else None
if not pkgfile:
+ if self.pkg_type == PackageType.TOOL:
+ raise IncompatiblePackageError(spec.humanize(),
util.get_systype())
raise UnknownPackageError(spec.humanize())
for url, checksum in
RegistryFileMirrorIterator(pkgfile["download_url"]):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformio-6.1.18/platformio/package/manager/base.py
new/platformio-6.1.19/platformio/package/manager/base.py
--- old/platformio-6.1.18/platformio/package/manager/base.py 2025-03-11
20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/package/manager/base.py 2026-02-04
14:26:43.000000000 +0100
@@ -330,7 +330,9 @@
return
shell = False
if not isinstance(cmd, list):
- shell = True
+ # issue #5366: workaround when command passed as string without
spaces
+ if " " in cmd:
+ shell = True
cmd = [cmd]
os.environ["PIO_PYTHON_EXE"] = get_pythonexe_path()
with fs.cd(pkg.path):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformio-6.1.18/platformio/package/manifest/schema.py
new/platformio-6.1.19/platformio/package/manifest/schema.py
--- old/platformio-6.1.18/platformio/package/manifest/schema.py 2025-03-11
20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/package/manifest/schema.py 2026-02-04
14:26:43.000000000 +0100
@@ -276,7 +276,7 @@
@staticmethod
@memoized(expire="1h")
def load_spdx_licenses():
- version = "3.26.0"
+ version = "3.27.0"
spdx_data_url = (
"https://raw.githubusercontent.com/spdx/license-list-data/"
f"v{version}/json/licenses.json"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformio-6.1.18/platformio/package/pack.py
new/platformio-6.1.19/platformio/package/pack.py
--- old/platformio-6.1.18/platformio/package/pack.py 2025-03-11
20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/package/pack.py 2026-02-04
14:26:43.000000000 +0100
@@ -49,6 +49,7 @@
"__*",
".DS_Store",
".vscode",
+ "**/.vscode/",
".cache",
"**/.cache",
"**/__pycache__",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformio-6.1.18/platformio/project/integration/generator.py
new/platformio-6.1.19/platformio/project/integration/generator.py
--- old/platformio-6.1.18/platformio/project/integration/generator.py
2025-03-11 20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/project/integration/generator.py
2026-02-04 14:26:43.000000000 +0100
@@ -12,7 +12,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-import codecs
import os
import sys
@@ -167,12 +166,12 @@
@staticmethod
def _render_tpl(tpl_path, tpl_vars):
- with codecs.open(tpl_path, "r", encoding="utf8") as fp:
+ with open(tpl_path, "r", encoding="utf8") as fp:
return bottle.template(fp.read(), **tpl_vars)
@staticmethod
def _merge_contents(dst_path, contents):
if os.path.basename(dst_path) == ".gitignore" and
os.path.isfile(dst_path):
return
- with codecs.open(dst_path, "w", encoding="utf8") as fp:
+ with open(dst_path, "w", encoding="utf8") as fp:
fp.write(contents)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformio-6.1.18/platformio/project/integration/tpls/emacs/.ccls.tpl
new/platformio-6.1.19/platformio/project/integration/tpls/emacs/.ccls.tpl
--- old/platformio-6.1.18/platformio/project/integration/tpls/emacs/.ccls.tpl
2025-03-11 20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/project/integration/tpls/emacs/.ccls.tpl
2026-02-04 14:26:43.000000000 +0100
@@ -1,6 +1,6 @@
% from platformio.compat import shlex_join
%
-clang
+{{ cc_path }}
{{"%c"}} {{ shlex_join(cc_flags) }}
{{"%cpp"}} {{ shlex_join(cxx_flags) }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformio-6.1.18/platformio/project/integration/tpls/sublimetext/.ccls.tpl
new/platformio-6.1.19/platformio/project/integration/tpls/sublimetext/.ccls.tpl
---
old/platformio-6.1.18/platformio/project/integration/tpls/sublimetext/.ccls.tpl
2025-03-11 20:48:05.000000000 +0100
+++
new/platformio-6.1.19/platformio/project/integration/tpls/sublimetext/.ccls.tpl
2026-02-04 14:26:43.000000000 +0100
@@ -1,6 +1,6 @@
% from platformio.compat import shlex_join
%
-clang
+{{ cc_path }}
{{"%c"}} {{ shlex_join(cc_flags) }}
{{"%cpp"}} {{ shlex_join(cxx_flags) }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformio-6.1.18/platformio/project/integration/tpls/vim/.ccls.tpl
new/platformio-6.1.19/platformio/project/integration/tpls/vim/.ccls.tpl
--- old/platformio-6.1.18/platformio/project/integration/tpls/vim/.ccls.tpl
2025-03-11 20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/project/integration/tpls/vim/.ccls.tpl
2026-02-04 14:26:43.000000000 +0100
@@ -1,6 +1,6 @@
% from platformio.compat import shlex_join
%
-clang
+{{ cc_path }}
{{"%c"}} {{ shlex_join(cc_flags) }}
{{"%cpp"}} {{ shlex_join(cxx_flags) }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformio-6.1.18/platformio/remote/client/device_list.py
new/platformio-6.1.19/platformio/remote/client/device_list.py
--- old/platformio-6.1.18/platformio/remote/client/device_list.py
2025-03-11 20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/remote/client/device_list.py
2026-02-04 14:26:43.000000000 +0100
@@ -36,7 +36,7 @@
if not success:
click.secho(value, fg="red", err=True)
continue
- (agent_name, devlist) = value
+ agent_name, devlist = value
data[agent_name] = devlist
if self.json_output:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformio-6.1.18/platformio/remote/client/device_monitor.py
new/platformio-6.1.19/platformio/remote/client/device_monitor.py
--- old/platformio-6.1.18/platformio/remote/client/device_monitor.py
2025-03-11 20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/remote/client/device_monitor.py
2026-02-04 14:26:43.000000000 +0100
@@ -99,7 +99,7 @@
if not success:
click.secho(value, fg="red", err=True)
continue
- (agent_name, ports) = value
+ agent_name, ports = value
for item in ports:
if "VID:PID" in item["hwid"]:
hwid_devindexes.append(len(devices))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformio-6.1.18/platformio/remote/projectsync.py
new/platformio-6.1.19/platformio/remote/projectsync.py
--- old/platformio-6.1.18/platformio/remote/projectsync.py 2025-03-11
20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/remote/projectsync.py 2026-02-04
14:26:43.000000000 +0100
@@ -17,7 +17,11 @@
from binascii import crc32
from os.path import getmtime, getsize, isdir, isfile, join
-from twisted.python import constants # pylint: disable=import-error
+try:
+ from twisted.python import constants # pylint: disable=import-error
+except ImportError:
+ # https://docs.twisted.org/en/twisted-16.5.0/core/howto/constants.html
+ import constantly as constants # pylint: disable=import-error
from platformio.compat import hashlib_encode_data
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformio-6.1.18/platformio/test/runners/doctest.py
new/platformio-6.1.19/platformio/test/runners/doctest.py
--- old/platformio-6.1.18/platformio/test/runners/doctest.py 2025-03-11
20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/test/runners/doctest.py 2026-02-04
14:26:43.000000000 +0100
@@ -101,7 +101,7 @@
class DoctestTestRunner(TestRunnerBase):
- EXTRA_LIB_DEPS = ["doctest/doctest@^2.4.11"]
+ EXTRA_LIB_DEPS = ["doctest/doctest@^2.4.12"]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/platformio-6.1.18/platformio/test/runners/googletest.py
new/platformio-6.1.19/platformio/test/runners/googletest.py
--- old/platformio-6.1.18/platformio/test/runners/googletest.py 2025-03-11
20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/test/runners/googletest.py 2026-02-04
14:26:43.000000000 +0100
@@ -88,7 +88,7 @@
class GoogletestTestRunner(TestRunnerBase):
- EXTRA_LIB_DEPS = ["google/googletest@^1.15.2"]
+ EXTRA_LIB_DEPS = ["google/googletest@^1.17.0"]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformio-6.1.18/platformio/test/runners/unity.py
new/platformio-6.1.19/platformio/test/runners/unity.py
--- old/platformio-6.1.18/platformio/test/runners/unity.py 2025-03-11
20:48:05.000000000 +0100
+++ new/platformio-6.1.19/platformio/test/runners/unity.py 2026-02-04
14:26:43.000000000 +0100
@@ -26,7 +26,7 @@
class UnityTestRunner(TestRunnerBase):
- EXTRA_LIB_DEPS = ["throwtheswitch/Unity@^2.6.0"]
+ EXTRA_LIB_DEPS = ["throwtheswitch/Unity@^2.6.1"]
# Examples:
# test/test_foo.cpp:44:test_function_foo:FAIL: Expected 32 Was 33
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformio-6.1.18/platformio.egg-info/PKG-INFO
new/platformio-6.1.19/platformio.egg-info/PKG-INFO
--- old/platformio-6.1.18/platformio.egg-info/PKG-INFO 2025-03-11
21:00:28.000000000 +0100
+++ new/platformio-6.1.19/platformio.egg-info/PKG-INFO 2026-02-04
14:40:47.000000000 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 2.2
+Metadata-Version: 2.4
Name: platformio
-Version: 6.1.18
+Version: 6.1.19
Summary: Your Gateway to Embedded Software Development Excellence. Unlock the
true potential of embedded software development with PlatformIO's collaborative
ecosystem, embracing declarative principles, test-driven methodologies, and
modern toolchains for unrivaled success.
Home-page: https://platformio.org
Author: PlatformIO Labs
@@ -21,7 +21,7 @@
Requires-Python: >=3.6
License-File: LICENSE
Requires-Dist: bottle==0.13.*
-Requires-Dist: click<8.1.8,>=8.0.4
+Requires-Dist: click<8.4,>=8.0.4
Requires-Dist: colorama
Requires-Dist: marshmallow==3.*
Requires-Dist: pyelftools<1,>=0.27
@@ -30,8 +30,8 @@
Requires-Dist: semantic_version==2.10.*
Requires-Dist: tabulate==0.*
Requires-Dist: ajsonrpc==1.2.*
-Requires-Dist: starlette<0.47,>=0.19
-Requires-Dist: uvicorn<0.35,>=0.16
+Requires-Dist: starlette<0.53,>=0.19
+Requires-Dist: uvicorn<0.41,>=0.16
Requires-Dist: wsproto==1.*
Requires-Dist: chardet<6,>=3.0.2; platform_system == "Darwin" and "arm" in
platform_machine
Dynamic: author
@@ -41,6 +41,7 @@
Dynamic: home-page
Dynamic: keywords
Dynamic: license
+Dynamic: license-file
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/platformio-6.1.18/platformio.egg-info/requires.txt
new/platformio-6.1.19/platformio.egg-info/requires.txt
--- old/platformio-6.1.18/platformio.egg-info/requires.txt 2025-03-11
21:00:28.000000000 +0100
+++ new/platformio-6.1.19/platformio.egg-info/requires.txt 2026-02-04
14:40:47.000000000 +0100
@@ -1,5 +1,5 @@
bottle==0.13.*
-click<8.1.8,>=8.0.4
+click<8.4,>=8.0.4
colorama
marshmallow==3.*
pyelftools<1,>=0.27
@@ -8,8 +8,8 @@
semantic_version==2.10.*
tabulate==0.*
ajsonrpc==1.2.*
-starlette<0.47,>=0.19
-uvicorn<0.35,>=0.16
+starlette<0.53,>=0.19
+uvicorn<0.41,>=0.16
wsproto==1.*
[:platform_system == "Darwin" and "arm" in platform_machine]