lib.distros.redhat.Distro: Add missing file #62
1 changed files with 79 additions and 0 deletions
79
src/python/jw/pkg/lib/distros/redhat/Distro.py
Normal file
79
src/python/jw/pkg/lib/distros/redhat/Distro.py
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING, override
|
||||
|
||||
from ...Distro import Distro as Base
|
||||
from ...pm.rpm import list_files, query_packages, run_rpm
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Any, Collection, Iterable
|
||||
|
||||
from ...base import Result
|
||||
from ...ExecContext import ExecContext
|
||||
from ...Package import Package
|
||||
|
||||
class Distro(Base):
|
||||
|
||||
async def yum(
|
||||
self, args: list[str], verbose: bool = True, sudo: bool = True
|
||||
) -> Result:
|
||||
cmd = ['/usr/bin/yum']
|
||||
cmd.extend(args)
|
||||
if sudo:
|
||||
return await self.sudo(cmd, verbose = verbose)
|
||||
return await self.run(cmd, verbose = verbose)
|
||||
|
||||
async def rpm(
|
||||
self,
|
||||
*args: Any,
|
||||
ec: ExecContext | None = None,
|
||||
**kwargs: Any,
|
||||
) -> str:
|
||||
if ec is None:
|
||||
ec = self.ctx
|
||||
kwargs['ec'] = ec
|
||||
return await run_rpm(*args, **kwargs)
|
||||
|
||||
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
@override
|
||||
async def _ref(self) -> None:
|
||||
await self.yum(['clean', 'expire-cache'])
|
||||
await self.yum(['makecache'])
|
||||
|
||||
@override
|
||||
async def _dup(self, download_only: bool) -> None:
|
||||
args: list[str] = ['update']
|
||||
if download_only:
|
||||
args.append('--downloadonly')
|
||||
await self.yum(args)
|
||||
|
||||
@override
|
||||
async def _reboot_required(self, verbose: bool) -> bool:
|
||||
raise NotImplementedError()
|
||||
|
||||
@override
|
||||
async def _select_by_name(self, names: Collection[str]) -> Iterable[Package]:
|
||||
return await query_packages(names, ec = self.ctx)
|
||||
|
||||
@override
|
||||
async def _install(self, names: Iterable[str], only_update: bool) -> None:
|
||||
args = ['update' if only_update else 'install']
|
||||
if not self.interactive:
|
||||
args.append('-y')
|
||||
args.extend(names)
|
||||
await self.yum(args)
|
||||
|
||||
@override
|
||||
async def _delete(self, names: Iterable[str]) -> None:
|
||||
await self.rpm(['-e', *names], sudo = True)
|
||||
|
||||
@override
|
||||
async def _pkg_files(self, name: str) -> Iterable[str]:
|
||||
return await list_files(name, ec = self.ctx)
|
||||
|
||||
async def _download(self, name: str, tmp_dir: str) -> str:
|
||||
raise NotImplementedError(
|
||||
'distro pkg download is not yet implemented for RedHat distributions'
|
||||
)
|
||||
Loading…
Reference in a new issue