[Downloader] Catch OSErrors from invalid repo names (#3029)

* [Downloader] Ensure repo names only contain the characters stated

* Create 2827.bugfix.rst

* [Downloader] Catch OSErrors from invalid filenames

* Update 2827.bugfix.rst

* Style

* do the thing again

* Update 2827.bugfix.rst
This commit is contained in:
Flame442 2019-10-04 22:19:00 -04:00 committed by Michael H
parent ea77de5d56
commit 9b60816ebd
2 changed files with 14 additions and 1 deletions

View File

@ -0,0 +1 @@
Repo names can now only contain the characters listed in the help text (A-Z, 0-9, underscores, and hyphens).

View File

@ -1,6 +1,7 @@
import asyncio
import contextlib
import os
import re
import shutil
import sys
from pathlib import Path
@ -222,12 +223,17 @@ class Downloader(commands.Cog):
async def _repo_add(self, ctx, name: str, repo_url: str, branch: str = None):
"""Add a new repo.
The name can only contain characters A-z, numbers and underscores.
Repo names can only contain characters A-z, numbers, underscores, and hyphens.
The branch will be the default branch if not specified.
"""
agreed = await do_install_agreement(ctx)
if not agreed:
return
if re.match("^[a-zA-Z0-9_\-]*$", name) is None:
await ctx.send(
_("Repo names can only contain characters A-z, numbers, underscores, and hyphens.")
)
return
try:
# noinspection PyTypeChecker
repo = await self._repo_manager.add_repo(name=name, url=repo_url, branch=branch)
@ -241,6 +247,12 @@ class Downloader(commands.Cog):
branch,
exc_info=err,
)
except OSError:
await ctx.send(
_(
"Something went wrong trying to add that repo. Your repo name might have an invalid character."
)
)
else:
await ctx.send(_("Repo `{name}` successfully added.").format(name=name))
if repo.install_msg is not None: