mirror of
https://github.com/arcan1s/ahriman.git
synced 2026-03-16 14:53:38 +00:00
fix: preserve hold status on status updates
This commit is contained in:
@@ -168,9 +168,9 @@ class Watcher(LazyLogging):
|
||||
package_base(str): package base to update
|
||||
status(BuildStatusEnum): new build status
|
||||
"""
|
||||
package, _ = self.package_get(package_base)
|
||||
package, current_status = self.package_get(package_base)
|
||||
with self._lock:
|
||||
self._known[package_base] = (package, BuildStatus(status))
|
||||
self._known[package_base] = (package, BuildStatus(status, is_held=current_status.is_held))
|
||||
self.client.package_status_update(package_base, status)
|
||||
|
||||
def package_update(self, package: Package, status: BuildStatusEnum) -> None:
|
||||
@@ -182,7 +182,8 @@ class Watcher(LazyLogging):
|
||||
status(BuildStatusEnum): new build status
|
||||
"""
|
||||
with self._lock:
|
||||
self._known[package.base] = (package, BuildStatus(status))
|
||||
_, current_status = self._known.get(package.base, (package, BuildStatus()))
|
||||
self._known[package.base] = (package, BuildStatus(status, is_held=current_status.is_held))
|
||||
self.client.package_update(package, status)
|
||||
|
||||
def status_update(self, status: BuildStatusEnum) -> None:
|
||||
|
||||
@@ -131,6 +131,19 @@ def test_package_status_update(watcher: Watcher, package_ahriman: Package, mocke
|
||||
assert status.status == BuildStatusEnum.Success
|
||||
|
||||
|
||||
def test_package_status_update_preserves_hold(watcher: Watcher, package_ahriman: Package,
|
||||
mocker: MockerFixture) -> None:
|
||||
"""
|
||||
must preserve hold status on package status update
|
||||
"""
|
||||
mocker.patch("ahriman.core.status.local_client.LocalClient.package_status_update")
|
||||
watcher._known = {package_ahriman.base: (package_ahriman, BuildStatus(is_held=True))}
|
||||
|
||||
watcher.package_status_update(package_ahriman.base, BuildStatusEnum.Success)
|
||||
_, status = watcher._known[package_ahriman.base]
|
||||
assert status.is_held is True
|
||||
|
||||
|
||||
def test_package_status_update_unknown(watcher: Watcher, package_ahriman: Package) -> None:
|
||||
"""
|
||||
must fail on unknown package status update only
|
||||
@@ -150,6 +163,18 @@ def test_package_update(watcher: Watcher, package_ahriman: Package, mocker: Mock
|
||||
cache_mock.assert_called_once_with(package_ahriman, pytest.helpers.anyvar(int))
|
||||
|
||||
|
||||
def test_package_update_preserves_hold(watcher: Watcher, package_ahriman: Package, mocker: MockerFixture) -> None:
|
||||
"""
|
||||
must preserve hold status on package update
|
||||
"""
|
||||
mocker.patch("ahriman.core.status.local_client.LocalClient.package_update")
|
||||
watcher._known = {package_ahriman.base: (package_ahriman, BuildStatus(is_held=True))}
|
||||
|
||||
watcher.package_update(package_ahriman, BuildStatusEnum.Success)
|
||||
_, status = watcher._known[package_ahriman.base]
|
||||
assert status.is_held is True
|
||||
|
||||
|
||||
def test_status_update(watcher: Watcher) -> None:
|
||||
"""
|
||||
must update service status
|
||||
|
||||
Reference in New Issue
Block a user