update_manager: add package resolution check to apt backend
Make sure packages within the package list exist prior to installation. Signed-off-by: Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
parent
21a7928ea2
commit
f50fa3c5e7
|
@ -790,6 +790,16 @@ class AptCliProvider(BasePackageProvider):
|
||||||
return [p.split("/", maxsplit=1)[0] for p in pkg_list]
|
return [p.split("/", maxsplit=1)[0] for p in pkg_list]
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
async def resolve_packages(self, package_list: List[str]) -> List[str]:
|
||||||
|
self.cmd_helper.notify_update_response("Resolving packages...")
|
||||||
|
search_regex = "|".join([f"^{pkg}$" for pkg in package_list])
|
||||||
|
cmd = f"apt-cache search --names-only \"{search_regex}\""
|
||||||
|
ret = await self.cmd_helper.run_cmd_with_response(cmd, timeout=600.)
|
||||||
|
resolved = [
|
||||||
|
pkg.strip().split()[0] for pkg in ret.split("\n") if pkg.strip()
|
||||||
|
]
|
||||||
|
return [avail for avail in package_list if avail in resolved]
|
||||||
|
|
||||||
async def install_packages(self,
|
async def install_packages(self,
|
||||||
package_list: List[str],
|
package_list: List[str],
|
||||||
**kwargs
|
**kwargs
|
||||||
|
@ -797,8 +807,13 @@ class AptCliProvider(BasePackageProvider):
|
||||||
timeout: float = kwargs.get('timeout', 300.)
|
timeout: float = kwargs.get('timeout', 300.)
|
||||||
retries: int = kwargs.get('retries', 3)
|
retries: int = kwargs.get('retries', 3)
|
||||||
notify: bool = kwargs.get('notify', False)
|
notify: bool = kwargs.get('notify', False)
|
||||||
pkgs = " ".join(package_list)
|
|
||||||
await self.refresh_packages(notify=notify)
|
await self.refresh_packages(notify=notify)
|
||||||
|
resolved = await self.resolve_packages(package_list)
|
||||||
|
if not resolved:
|
||||||
|
self.cmd_helper.notify_update_response("No packages detected")
|
||||||
|
return
|
||||||
|
logging.debug(f"Resolved packages: {resolved}")
|
||||||
|
pkgs = " ".join(resolved)
|
||||||
await self.cmd_helper.run_cmd(
|
await self.cmd_helper.run_cmd(
|
||||||
f"{self.APT_CMD} install --yes {pkgs}", timeout=timeout,
|
f"{self.APT_CMD} install --yes {pkgs}", timeout=timeout,
|
||||||
retries=retries, notify=notify)
|
retries=retries, notify=notify)
|
||||||
|
|
Loading…
Reference in New Issue