def config(self, context: Dict[str, Resolver]) -> Dict[Any, Any]: """ Return the contents of config.yml. All disabled modules are removed from the configuration dictionary. """ if hasattr(self, '_config'): return self._config # The repository already exists, so it is assumed that the user wants # the repository cloned if not self.directory.is_dir(): clone_repo( user=self.github_user, repository=self.github_repo, modules_directory=self.modules_directory, ) elif self.autoupdate: clone_or_pull_repo( user=self.github_user, repository=self.github_repo, modules_directory=self.modules_directory, ) self._config = filter_config_file( config_file=self.config_file, context=context, enabled_module_name=self.enabled_module_name, prepend=f'github::{self.github_user}/{self.github_repo}::', ) return self._config
def __init__( self, enabling_statement: EnablingStatement, modules_directory: Path, ) -> None: """ Initialize enabled module defined in Github repository. A GitHub module is enabled with the name syntax: github::<github_user>/<github_repo>[::<enabled_module>] If <enabled_module> is skipped, all modules are enabled, i.e. github::<github_user>/<github_repo>::* """ assert self.represented_by( module_name=enabling_statement['name'], ) assert modules_directory.is_absolute() specified_module = enabling_statement['name'] self.autoupdate = enabling_statement.get('autoupdate', False) github_path, *enabled_modules = specified_module[8:].split('::') if len(enabled_modules) > 0: self.enabled_module = enabled_modules[0] else: self.enabled_module = '*' self.github_user, self.github_repo = github_path.split('/') self.prepend = f'github::{self.github_user}/{self.github_repo}::' self.directory = modules_directory \ / self.github_user \ / self.github_repo self.modules_file = self.directory / 'modules.yml' self.context_file = self.directory / 'context.yml' if not self.directory.is_dir(): clone_repo( user=self.github_user, repository=self.github_repo, modules_directory=modules_directory, ) elif self.autoupdate: clone_or_pull_repo( user=self.github_user, repository=self.github_repo, modules_directory=modules_directory, )
def test_cloning_two_repositories(tmpdir): modules_directory = Path(tmpdir.mkdir('modules')) repo_dir = clone_repo( user='******', repository='color-schemes.astrality', modules_directory=modules_directory, ) repo_dir = clone_repo( user='******', repository='solar-desktop.astrality', modules_directory=modules_directory, ) github_user_directory = modules_directory / 'jakobgm' assert len(tuple(github_user_directory.iterdir())) == 2
def test_cloning_non_existent_github_repository(tmpdir): modules_directory = Path(tmpdir.mkdir('modules')) with pytest.raises(GithubModuleError): clone_repo( user='******', repository='i-will-never-create-this-repository', modules_directory=modules_directory, ) github_user_directory = modules_directory / 'jakobgm' assert not github_user_directory.is_dir() repository_directory = github_user_directory / 'i-will-never-create-this-repository' assert not repository_directory.is_dir()
def test_clone_or_pull_repository_by_updating_outdated_repository(tmpdir): modules_directory = Path(tmpdir.mkdir('modules')) repo_dir = clone_repo( user='******', repository='color-schemes.astrality', modules_directory=modules_directory, ) # Move master to first commit in repository result = run_shell( command='git reset --hard 2b8941a', timeout=5, fallback=False, working_directory=repo_dir, ) assert result is not False # The readme does not exist in this commit readme = repo_dir / 'README.rst' assert not readme.is_file() # The following pull should reintroduce the README into the directory updated_repo_dir = clone_or_pull_repo( user='******', repository='color-schemes.astrality', modules_directory=modules_directory, ) assert updated_repo_dir == repo_dir assert readme.is_file()
def test_cloning_one_existent_and_one_non_existent_repo(tmpdir): modules_directory = Path(tmpdir.mkdir('modules')) repo_dir = clone_repo( user='******', repository='color-schemes.astrality', modules_directory=modules_directory, ) with pytest.raises(GithubModuleError): repo_dir = clone_repo( user='******', repository='i-will-never-create-this-repository', modules_directory=modules_directory, ) github_user_directory = modules_directory / 'jakobgm' assert len(tuple(github_user_directory.iterdir())) == 1
def test_cloning_the_same_repo_twice(tmpdir): modules_directory = Path(tmpdir.mkdir('modules')) repo_dir = clone_repo( user='******', repository='color-schemes.astrality', modules_directory=modules_directory, ) config_file = modules_directory / 'jakobgm' / 'color-schemes.astrality' / 'config.yml' config_file.write_text('user edited') repo_dir = clone_repo( user='******', repository='color-schemes.astrality', modules_directory=modules_directory, ) with open(config_file) as file: assert file.read() == 'user edited'
def test_clone_github_repo(tmpdir): modules_directory = Path(tmpdir.mkdir('modules')) repo_dir = clone_repo( user='******', repository='color-schemes.astrality', modules_directory=modules_directory, ) assert repo_dir.is_dir() module_config = repo_dir / 'config.yml' assert module_config.is_file() assert repo_dir.name == 'color-schemes.astrality' assert repo_dir.parent.name == 'jakobgm'