# -*- coding: utf-8 -*- import re, os from argparse import Namespace, ArgumentParser from urllib.parse import urlparse from ..Cmd import Cmd from ..lib.util import run_cmd class CmdGetAuthInfo(Cmd): # export def __init__(self) -> None: super().__init__('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', help='Don\'t prefix values by "="', action='store_true', default=False) parser.add_argument('--username', help='Show user name', action='store_true', default=False) parser.add_argument('--password', help='Show password', action='store_true', default=False) def _run(self, args: Namespace) -> None: keys = ['username', 'password'] # --- Milk jw-build repo jw_build_dir = self.app.proj_dir('jw-build') if not os.path.isdir(jw_build_dir + '/.git'): self.app.debug(f'jw-build directory is not a Git repo: {jw_build_dir}') return remotes = run_cmd(['git', '-C', jw_build_dir, 'remote', '-v']) result: dict[str, str] = {} for line in remotes.split('\n'): if re.match(r'^\s*$', line): continue name, url, typ = re.split(r'\s+', line) if name == 'origin' and typ == '(push)': parsed = urlparse(url) for key in keys: result[key] = getattr(parsed, key) 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}"')