[Downloader] Install SHARED_LIBRARY requirements (#2384)

SHARED_LIBRARY Installable types did not have the requirements as
defined in info.json automatically installed. This change updates the
installation of libraries to also install their requirements.

Resolves #2381
This commit is contained in:
Seputaes
2019-02-26 21:07:05 -08:00
committed by Toby Harradine
parent 5a15939f08
commit 16614168a7
5 changed files with 64 additions and 4 deletions

View File

@@ -140,7 +140,9 @@ class Downloader(commands.Cog):
failed = []
for repo in repos:
if not await repo.install_libraries(target_dir=self.SHAREDLIB_PATH):
if not await repo.install_libraries(
target_dir=self.SHAREDLIB_PATH, req_target_dir=self.LIB_PATH
):
failed.extend(repo.available_libraries)
# noinspection PyTypeChecker
@@ -314,7 +316,7 @@ class Downloader(commands.Cog):
await self._add_to_installed(cog)
await repo.install_libraries(self.SHAREDLIB_PATH)
await repo.install_libraries(target_dir=self.SHAREDLIB_PATH, req_target_dir=self.LIB_PATH)
await ctx.send(_("Cog `{cog_name}` successfully installed.").format(cog_name=cog_name))
if cog.install_msg is not None:

View File

@@ -404,7 +404,7 @@ class Repo(RepoJSONMixin):
return await cog.copy_to(target_dir=target_dir)
async def install_libraries(
self, target_dir: Path, libraries: Tuple[Installable] = ()
self, target_dir: Path, req_target_dir: Path, libraries: Tuple[Installable] = ()
) -> bool:
"""Install shared libraries to the target directory.
@@ -415,6 +415,8 @@ class Repo(RepoJSONMixin):
----------
target_dir : pathlib.Path
Directory to install shared libraries to.
req_target_dir : pathlib.Path
Directory to install shared library requirements to.
libraries : `tuple` of `Installable`
A subset of available libraries.
@@ -433,7 +435,11 @@ class Repo(RepoJSONMixin):
if len(libraries) > 0:
ret = True
for lib in libraries:
ret = ret and await lib.copy_to(target_dir=target_dir)
ret = (
ret
and await self.install_requirements(cog=lib, target_dir=req_target_dir)
and await lib.copy_to(target_dir=target_dir)
)
return ret
return True