Files
clan-core/pkgs/clan-cli/clan_lib/flash/automount.py
2025-07-16 15:29:18 +07:00

64 lines
1.7 KiB
Python

import logging
import shutil
from collections.abc import Generator
from contextlib import contextmanager
from pathlib import Path
from clan_lib.cmd import Log, RunOpts, run
from clan_lib.errors import ClanError
from clan_lib.machines.machines import Machine
log = logging.getLogger(__name__)
@contextmanager
def pause_automounting(
devices: list[Path], machine: Machine, request_graphical: bool = False
) -> Generator[None]:
"""
Pause automounting on the device for the duration of this context
manager
"""
if shutil.which("udevadm") is None:
msg = "udev is required to disable automounting"
log.warning(msg)
yield None
return
inhibit_path = Path(__file__).parent / "inhibit.sh"
if not inhibit_path.exists():
msg = f"{inhibit_path} not found"
raise ClanError(msg)
str_devs = [str(dev) for dev in devices]
cmd = [str(inhibit_path), "enable", *str_devs]
result = run(
cmd,
RunOpts(
log=Log.BOTH,
check=False,
needs_user_terminal=True,
prefix=machine.name,
requires_root_perm=True,
graphical_perm=request_graphical,
),
)
if result.returncode != 0:
machine.error("Failed to inhibit automounting")
yield None
cmd = [str(inhibit_path), "disable", *str_devs]
result = run(
cmd,
RunOpts(
log=Log.BOTH,
check=False,
prefix=machine.name,
requires_root_perm=True,
graphical_perm=request_graphical,
),
)
if result.returncode != 0:
machine.error("Failed to re-enable automounting")