mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-10 02:36:29 +00:00
Don't remove add-on repos if add-on is installed (#3364)
This commit is contained in:
parent
eadc629cd9
commit
5503f93a75
@ -4,7 +4,7 @@ import logging
|
||||
|
||||
from ..const import URL_HASSIO_ADDONS
|
||||
from ..coresys import CoreSys, CoreSysAttributes
|
||||
from ..exceptions import StoreGitError, StoreJobError, StoreNotFound
|
||||
from ..exceptions import StoreError, StoreGitError, StoreJobError, StoreNotFound
|
||||
from ..jobs.decorator import Job, JobCondition
|
||||
from ..resolution.const import ContextType, IssueType, SuggestionType
|
||||
from .addon import AddonStore
|
||||
@ -115,6 +115,13 @@ class StoreManager(CoreSysAttributes):
|
||||
# Delete stale repositories
|
||||
for url in old_rep - new_rep - BUILTIN_REPOSITORIES:
|
||||
repository = self.get_from_url(url)
|
||||
if repository.slug in (
|
||||
addon.repository for addon in self.sys_addons.installed
|
||||
):
|
||||
raise StoreError(
|
||||
f"Can't remove '{repository.source}'. It's used by installed add-ons",
|
||||
logger=_LOGGER.error,
|
||||
)
|
||||
await self.repositories.pop(repository.slug).remove()
|
||||
self.sys_config.drop_addon_repository(url)
|
||||
|
||||
|
7
tests/fixtures/add-on.json
vendored
7
tests/fixtures/add-on.json
vendored
@ -1,10 +1,13 @@
|
||||
{
|
||||
"advanced": false,
|
||||
"arch": ["amd64"],
|
||||
"arch": [
|
||||
"amd64"
|
||||
],
|
||||
"slug": "test",
|
||||
"description": "Test add-on",
|
||||
"location": "tmp_path",
|
||||
"name": "Test Add-on",
|
||||
"repository": "https://github.com/awesome-developer/awesome-repo",
|
||||
"repository": "a474bbd1",
|
||||
"stage": "stable",
|
||||
"version": "1.0.0"
|
||||
}
|
@ -4,6 +4,8 @@ from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
|
||||
from supervisor.addons.addon import Addon
|
||||
from supervisor.exceptions import StoreError
|
||||
from supervisor.resolution.const import SuggestionType
|
||||
from supervisor.store import BUILTIN_REPOSITORIES
|
||||
|
||||
@ -72,3 +74,17 @@ async def test_preinstall_valid_repository(coresys, store_manager):
|
||||
await store_manager.update_repositories(BUILTIN_REPOSITORIES)
|
||||
assert store_manager.get("core").validate()
|
||||
assert store_manager.get("local").validate()
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_remove_used_repository(coresys, store_manager, store_addon):
|
||||
"""Test removing used custom repository."""
|
||||
coresys.addons.data.install(store_addon)
|
||||
addon = Addon(coresys, store_addon.slug)
|
||||
coresys.addons.local[addon.slug] = addon
|
||||
|
||||
with pytest.raises(
|
||||
StoreError,
|
||||
match="Can't remove 'https://github.com/awesome-developer/awesome-repo'. It's used by installed add-ons",
|
||||
):
|
||||
await store_manager.update_repositories([])
|
||||
|
Loading…
x
Reference in New Issue
Block a user