From 98532d2dc3d21caf07c0151eab5b7fb8878b938a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 25 Jul 2026 08:34:57 +0000 Subject: [PATCH 1/2] Initial plan From 95974db9fbfeba7dd4b8419717b7a90991be53c1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 25 Jul 2026 08:38:34 +0000 Subject: [PATCH 2/2] fix: correct Linux PyInstaller onedir spec --- .../pyinstaller/playlistforge.linux.spec | 3 +- tests/test_packaging_specs.py | 35 +++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 tests/test_packaging_specs.py diff --git a/packaging/pyinstaller/playlistforge.linux.spec b/packaging/pyinstaller/playlistforge.linux.spec index 1888065..5dc7ef2 100644 --- a/packaging/pyinstaller/playlistforge.linux.spec +++ b/packaging/pyinstaller/playlistforge.linux.spec @@ -35,9 +35,8 @@ pyz = PYZ(a.pure) exe = EXE( pyz, a.scripts, - a.binaries, - a.datas, [], + exclude_binaries=True, name="PlaylistForge", debug=False, bootloader_ignore_signals=False, diff --git a/tests/test_packaging_specs.py b/tests/test_packaging_specs.py new file mode 100644 index 0000000..0a9e531 --- /dev/null +++ b/tests/test_packaging_specs.py @@ -0,0 +1,35 @@ +"""Tests for packaging spec regressions.""" + +from __future__ import annotations + +import ast +from pathlib import Path + + +def test_linux_pyinstaller_spec_uses_exclude_binaries_for_onedir_build() -> None: + spec_path = ( + Path(__file__).resolve().parents[1] + / "packaging" + / "pyinstaller" + / "playlistforge.linux.spec" + ) + + module = ast.parse(spec_path.read_text(encoding="utf-8")) + + exe_call = None + for node in module.body: + if isinstance(node, ast.Assign) and any( + isinstance(target, ast.Name) and target.id == "exe" for target in node.targets + ): + exe_call = node.value + break + + assert isinstance(exe_call, ast.Call) + assert isinstance(exe_call.func, ast.Name) + assert exe_call.func.id == "EXE" + + exclude_binaries = { + keyword.arg: keyword.value for keyword in exe_call.keywords if keyword.arg is not None + }["exclude_binaries"] + assert isinstance(exclude_binaries, ast.Constant) + assert exclude_binaries.value is True