示例#1
0
def pearl(sys_args: list, pearl_home_dir: Path = None):
    verify_runtime_deps()

    args = parse_args(sys_args)
    if args.verbose:
        messenger.enable_debug()

    messenger.debug(args)

    try:
        pearl_env = PearlEnvironment(
            home=pearl_home_dir,
            config_filename=args.config_file,
            update_repos=args.update_repos,
            verbose=args.verbose,
            env_initialized=False if args.command == 'init' else True)

        _pearl(pearl_env, args)
    except PearlError as ex:
        message = ex.args[0] if ex.args else None
        if args.verbose:
            messenger.exception(f'Pearl error: {message}')
        else:
            messenger.error(message)
        exit(ex.exit_status)
示例#2
0
 def load_packages(self, update_repos=False, verbose: int = 0):
     packages = OrderedDict()
     config_filenames = [self.config_filename]
     while config_filenames:
         config_filename = config_filenames.pop(0)
         messenger.debug(
             f"Loading Pearl configuration: {config_filename}...")
         pearl_conf = self._load_conf(config_filename)
         packages.update({pearl_conf.repo_name: pearl_conf.packages})
         messenger.debug(
             f"Loaded Pearl configuration: {config_filename}. Repo name: {pearl_conf.repo_name}, number of packages: {len(pearl_conf.packages)}"
         )
         repo_conf_filenames = self._load_repos(self.home, pearl_conf.repos,
                                                update_repos, verbose)
         config_filenames.extend(repo_conf_filenames)
     return packages
示例#3
0
    def _get_home(home: Path = None, env_initialized: bool = True) -> Path:
        if home is None:
            xdg_data_home = os.environ.get(
                'XDG_DATA_HOME', f"{os.environ['HOME']}/.local/share")
            default_home = f'{xdg_data_home}/pearl'
            home = Path(default_home)

        messenger.debug(f"Found Pearl home: {home}")

        if env_initialized:
            if home.exists() and not home.is_dir():
                msg = f'Error: The value in environment variable PEARL_HOME is not a directory: {home}.'
                messenger.warn(msg)
                raise ValueError(msg)
            elif not home.exists():
                msg = 'Pearl environment has not been initialized. Run "pearl init" first.'
                messenger.warn(msg)
                raise ValueError(msg)

        return home