# -*- coding: utf-8 -*- import re, os from argparse import Namespace, ArgumentParser from urllib.parse import urlparse from ...lib.log import * from ...lib.util import run_cmd from ..Cmd import Cmd from ..CmdProjects import CmdProjects class CmdGetAuthInfo(Cmd): # export def __init__(self, parent: CmdProjects) -> None: super().__init__(parent, 'get-auth-info', help='Try to retrieve authentication information from the source tree') def add_arguments(self, parser: ArgumentParser) -> None: super().add_arguments(parser) parser.add_argument('--only-values', default=False, action='store_true', help='Don\'t prefix values by "="') parser.add_argument('--username', default=False, action='store_true', help='Show user name') parser.add_argument('--password', default=False, action='store_true', help='Show password') parser.add_argument('--remote-owner-base', default=False, action='store_true', help='Show remote base URL for owner jw-pkg was cloned from') parser.add_argument('--remote-base', default=False, action='store_true', help='Show remote base URL') async def _run(self, args: Namespace) -> None: keys = ['username', 'password'] # --- Milk jw-pkg repo jw_pkg_dir = self.app.find_dir('jw-pkg', pretty=False) if not os.path.isdir(jw_pkg_dir + '/.git'): log(DEBUG, f'jw-pkg directory is not a Git repo: {jw_pkg_dir}') return remotes, stderr, status = await run_cmd(['git', '-C', jw_pkg_dir, 'remote', '-v']) result: dict[str, str] = {} for line in remotes.splitlines(): name, url, typ = re.split(r'\s+', line) if name == 'origin' and typ in ['(pull)', '(fetch)']: # TODO: Use other remotes, too? parsed = urlparse(url) for key in keys: result[key] = getattr(parsed, key) base = parsed.geturl() base = re.sub(r'/jw-pkg', '', base) base = re.sub(r'/proj$', '', base) base = re.sub(r'/proj$', '', base) result['remote_owner_base'] = base result['remote_base'] = os.path.dirname(base) break # --- Print results for key, val in result.items(): if getattr(args, key, None) != True: continue if val is None: continue if args.only_values: print(val) continue print(f'{key}="{val}"')