mirror of
https://github.com/saltstack/salt.git
synced 2025-04-16 09:40:20 +00:00
parent
c56afbe514
commit
faa7a7ba97
2 changed files with 184 additions and 11 deletions
|
@ -299,7 +299,7 @@ def version(*names, **kwargs):
|
|||
return __salt__["pkg_resource.version"](*names, **kwargs)
|
||||
|
||||
|
||||
def latest_version(*names, **kwargs):
|
||||
def latest_version(*names, options=None, **kwargs):
|
||||
"""
|
||||
Return the latest version of the named package available for upgrade or
|
||||
installation
|
||||
|
@ -307,30 +307,47 @@ def latest_version(*names, **kwargs):
|
|||
Currently chooses stable versions, falling back to devel if that does not
|
||||
exist.
|
||||
|
||||
options
|
||||
Additional options to pass to brew. Useful to remove ambiguous packages
|
||||
that can conflict between formulae and casks.
|
||||
|
||||
CLI Example:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
salt '*' pkg.latest_version <package name>
|
||||
salt '*' pkg.latest_version <package1> <package2> <package3>
|
||||
salt '*' pkg.latest_version <package name> options='["--cask"]'
|
||||
"""
|
||||
refresh = salt.utils.data.is_true(kwargs.pop("refresh", True))
|
||||
if refresh:
|
||||
refresh_db()
|
||||
|
||||
def get_version(pkg_info):
|
||||
# Perhaps this will need an option to pick devel by default
|
||||
version = pkg_info["versions"]["stable"] or pkg_info["versions"]["devel"]
|
||||
if pkg_info["versions"]["bottle"] and pkg_info["revision"] >= 1:
|
||||
version = "{}_{}".format(version, pkg_info["revision"])
|
||||
return version
|
||||
if "versions" in pkg_info.keys():
|
||||
# Typically, formulae uses the 'versions' token
|
||||
# Perhaps this will need an option to pick devel by default
|
||||
pkg_version = (
|
||||
pkg_info["versions"]["stable"] or pkg_info["versions"]["devel"]
|
||||
)
|
||||
if pkg_info["versions"]["bottle"] and pkg_info["revision"] >= 1:
|
||||
pkg_version = f"{pkg_version}_{pkg_info['revision']}"
|
||||
return pkg_version
|
||||
|
||||
versions_dict = {key: get_version(val) for key, val in _info(*names).items()}
|
||||
if "version" in pkg_info.keys():
|
||||
# Typically, casks use the 'version' token
|
||||
return pkg_info["version"]
|
||||
|
||||
return None
|
||||
|
||||
versions_dict = {
|
||||
key: get_version(val) for key, val in _info(*names, options=options).items()
|
||||
}
|
||||
|
||||
if len(names) == 1:
|
||||
return next(iter(versions_dict.values()))
|
||||
else:
|
||||
return versions_dict
|
||||
|
||||
return versions_dict
|
||||
|
||||
|
||||
# available_version is being deprecated
|
||||
|
|
|
@ -644,8 +644,164 @@ def test_version():
|
|||
assert mac_brew.version("foo") == "0.1.5"
|
||||
|
||||
|
||||
# 'latest_version' function tests: 0
|
||||
# It has not been fully implemented
|
||||
# 'latest_version' function tests: 3
|
||||
|
||||
|
||||
def test_latest_version():
|
||||
"""
|
||||
Tests latest version name returned
|
||||
"""
|
||||
mock_refresh_db = MagicMock()
|
||||
mock_call_brew = MagicMock(
|
||||
return_value={
|
||||
"pid": 12345,
|
||||
"retcode": 0,
|
||||
"stderr": "",
|
||||
"stdout": textwrap.dedent(
|
||||
"""\
|
||||
{
|
||||
"formulae": [
|
||||
{
|
||||
"name": "neovim",
|
||||
"full_name": "neovim",
|
||||
"tap": "homebrew/core",
|
||||
"aliases": [
|
||||
"nvim"
|
||||
],
|
||||
"versions": {
|
||||
"stable": "0.10.0",
|
||||
"head": "HEAD",
|
||||
"bottle": true
|
||||
},
|
||||
"revision": 0
|
||||
}
|
||||
],
|
||||
"casks": [
|
||||
]
|
||||
}
|
||||
"""
|
||||
),
|
||||
}
|
||||
)
|
||||
|
||||
with patch("salt.modules.mac_brew_pkg.refresh_db", mock_refresh_db), patch(
|
||||
"salt.modules.mac_brew_pkg._call_brew", mock_call_brew
|
||||
):
|
||||
assert mac_brew.latest_version("neovim") == "0.10.0"
|
||||
mock_refresh_db.assert_called_once()
|
||||
|
||||
|
||||
def test_latest_version_multiple_names():
|
||||
"""
|
||||
Tests latest version name returned
|
||||
"""
|
||||
mock_refresh_db = MagicMock()
|
||||
mock_call_brew = MagicMock(
|
||||
return_value={
|
||||
"pid": 12345,
|
||||
"retcode": 0,
|
||||
"stderr": "",
|
||||
"stdout": textwrap.dedent(
|
||||
"""\
|
||||
{
|
||||
"formulae": [
|
||||
{
|
||||
"name": "salt",
|
||||
"full_name": "cdalvaro/tap/salt",
|
||||
"tap": "cdalvaro/tap",
|
||||
"aliases": [],
|
||||
"versions": {
|
||||
"stable": "3007.1",
|
||||
"head": "HEAD",
|
||||
"bottle": true
|
||||
},
|
||||
"revision": 2
|
||||
},
|
||||
{
|
||||
"name": "neovim",
|
||||
"full_name": "neovim",
|
||||
"tap": "homebrew/core",
|
||||
"aliases": [
|
||||
"nvim"
|
||||
],
|
||||
"versions": {
|
||||
"stable": "0.10.0",
|
||||
"head": "HEAD",
|
||||
"bottle": true
|
||||
},
|
||||
"revision": 0
|
||||
}
|
||||
],
|
||||
"casks": [
|
||||
{
|
||||
"token": "visual-studio-code",
|
||||
"full_token": "visual-studio-code",
|
||||
"tap": "homebrew/cask",
|
||||
"version": "1.89.1",
|
||||
"installed": "1.86.0"
|
||||
}
|
||||
]
|
||||
}
|
||||
"""
|
||||
),
|
||||
}
|
||||
)
|
||||
|
||||
exptected_versions = {
|
||||
"cdalvaro/tap/salt": "3007.1_2",
|
||||
"nvim": "0.10.0",
|
||||
"visual-studio-code": "1.89.1",
|
||||
}
|
||||
|
||||
with patch("salt.modules.mac_brew_pkg.refresh_db", mock_refresh_db), patch(
|
||||
"salt.modules.mac_brew_pkg._call_brew", mock_call_brew
|
||||
):
|
||||
assert (
|
||||
mac_brew.latest_version("cdalvaro/tap/salt", "nvim", "visual-studio-code")
|
||||
== exptected_versions
|
||||
)
|
||||
mock_refresh_db.assert_called_once()
|
||||
|
||||
|
||||
def test_latest_version_with_options():
|
||||
mock_refresh_db = MagicMock()
|
||||
mock_call_brew = MagicMock(
|
||||
return_value={
|
||||
"pid": 12345,
|
||||
"retcode": 0,
|
||||
"stderr": "",
|
||||
"stdout": textwrap.dedent(
|
||||
"""\
|
||||
{
|
||||
"formulae": [
|
||||
|
||||
],
|
||||
"casks": [
|
||||
{
|
||||
"token": "salt",
|
||||
"full_token": "cdalvaro/tap/salt",
|
||||
"tap": "cdalvaro/tap",
|
||||
"version": "3007.1",
|
||||
"installed": "3007.1"
|
||||
}
|
||||
]
|
||||
}
|
||||
"""
|
||||
),
|
||||
}
|
||||
)
|
||||
|
||||
with patch("salt.modules.mac_brew_pkg.refresh_db", mock_refresh_db), patch(
|
||||
"salt.modules.mac_brew_pkg._call_brew", mock_call_brew
|
||||
):
|
||||
assert (
|
||||
mac_brew.latest_version("cdalvaro/tap/salt", options=["--cask"]) == "3007.1"
|
||||
)
|
||||
mock_refresh_db.assert_called_once()
|
||||
mock_call_brew.assert_called_once_with(
|
||||
"info", "--json=v2", "--cask", "cdalvaro/tap/salt"
|
||||
)
|
||||
|
||||
|
||||
# 'remove' function tests: 1
|
||||
# Only tested a few basics
|
||||
|
|
Loading…
Add table
Reference in a new issue