from __future__ import annotations from typing import TYPE_CHECKING from ...lib.util import copy from .Cmd import Cmd if TYPE_CHECKING: from argparse import ArgumentParser, Namespace from ..CmdPosix import CmdPosix class CmdCopy(Cmd): # export def __init__(self, parent: CmdPosix) -> None: super().__init__(parent, 'copy', help = 'Copy files') def add_arguments(self, parser: ArgumentParser) -> None: super().add_arguments(parser) parser.add_argument('src', help = 'Source file URI') parser.add_argument('dst', help = 'Destination file URI') parser.add_argument( '-o', '--owner', default = None, help = 'Destination file owner' ) parser.add_argument( '-g', '--group', default = None, help = 'Destination file group' ) parser.add_argument( '-m', '--mode', default = None, help = 'Destination file mode' ) parser.add_argument( '-F', '--fixed-strings', action = 'store_true', help = "Don't expand platform.expand_macros macros in and ", ) async def _run(self, args: Namespace) -> None: def __expand(url: str) -> str: if args.fixed_strings: return url ret = self.app.distro.expand_macros(url) if not isinstance(ret, str): raise Exception( f'Expanding macros in "{url}" returned unexpected ret "{ret}"' ) return ret await copy( __expand(args.src), __expand(args.dst), owner = args.owner, group = args.group, mode = int(args.mode, 0), )