From a69cd1563a782023fa3d2b0e807640cf160827f8 Mon Sep 17 00:00:00 2001 From: morrison12 Date: Sat, 14 Mar 2026 12:00:01 -0400 Subject: [PATCH] fix: parse packages with "brew version" correctly. --- src/pyinfra/facts/brew.py | 3 ++- src/pyinfra/operations/brew.py | 11 +++++++++-- tests/facts/brew.BrewPackages/no_packages.json | 7 +++++++ .../package_with_multiple_versions.json | 13 +++++++++++++ tests/facts/brew.BrewPackages/packages.json | 2 +- 5 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 tests/facts/brew.BrewPackages/no_packages.json create mode 100644 tests/facts/brew.BrewPackages/package_with_multiple_versions.json diff --git a/src/pyinfra/facts/brew.py b/src/pyinfra/facts/brew.py index 1a3e41e89..af34f4568 100644 --- a/src/pyinfra/facts/brew.py +++ b/src/pyinfra/facts/brew.py @@ -9,7 +9,8 @@ from .util.packaging import parse_packages -BREW_REGEX = r"^([^\s]+)\s([0-9\._+a-z\-]+)" +PKG_VERSION_SEP = "@" +BREW_REGEX = rf"^([^{PKG_VERSION_SEP}]+)(?:{PKG_VERSION_SEP}[0-9\.]+)?\s([0-9\._+a-z\-]+)" def new_cask_cli(version): diff --git a/src/pyinfra/operations/brew.py b/src/pyinfra/operations/brew.py index 9158d05c8..4d497e4c9 100644 --- a/src/pyinfra/operations/brew.py +++ b/src/pyinfra/operations/brew.py @@ -8,7 +8,14 @@ from pyinfra import host from pyinfra.api import operation -from pyinfra.facts.brew import BrewCasks, BrewPackages, BrewTaps, BrewVersion, new_cask_cli +from pyinfra.facts.brew import ( + PKG_VERSION_SEP, + BrewCasks, + BrewPackages, + BrewTaps, + BrewVersion, + new_cask_cli, +) from .util.packaging import ensure_packages @@ -153,7 +160,7 @@ def casks( install_command="brew %sinstall%s" % args, uninstall_command="brew %suninstall%s" % args, upgrade_command="brew %supgrade%s" % args, - version_join="@", + version_join=PKG_VERSION_SEP, latest=latest, ) diff --git a/tests/facts/brew.BrewPackages/no_packages.json b/tests/facts/brew.BrewPackages/no_packages.json new file mode 100644 index 000000000..fc6a00959 --- /dev/null +++ b/tests/facts/brew.BrewPackages/no_packages.json @@ -0,0 +1,7 @@ +{ + "command": "brew list --versions", + "requires_command": "brew", + "output": [], + "fact": { + } +} diff --git a/tests/facts/brew.BrewPackages/package_with_multiple_versions.json b/tests/facts/brew.BrewPackages/package_with_multiple_versions.json new file mode 100644 index 000000000..4c643a0f2 --- /dev/null +++ b/tests/facts/brew.BrewPackages/package_with_multiple_versions.json @@ -0,0 +1,13 @@ +{ + "command": "brew list --versions", + "requires_command": "brew", + "output": [ + "python@3.13 3.13.2", + "python@3.14 3.14.3" + ], + "fact": { + "python": [ + "3.13.2", "3.14.3" + ] + } +} diff --git a/tests/facts/brew.BrewPackages/packages.json b/tests/facts/brew.BrewPackages/packages.json index baa2b34e1..f51c63db5 100644 --- a/tests/facts/brew.BrewPackages/packages.json +++ b/tests/facts/brew.BrewPackages/packages.json @@ -41,7 +41,7 @@ "zlib": [ "1.2.11" ], - "python@3.13": [ + "python": [ "3.13.2" ] }