From 9fa2776bda5c5268ec761aaf9784ffcf39d71965 Mon Sep 17 00:00:00 2001 From: Twentysix Date: Sat, 26 Nov 2016 17:53:48 +0100 Subject: [PATCH] [Downloader] `[p]cog repo add` error handling, invalid repos cleanup --- cogs/downloader.py | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/cogs/downloader.py b/cogs/downloader.py index 4d7365097..1ae2339a1 100644 --- a/cogs/downloader.py +++ b/cogs/downloader.py @@ -23,6 +23,10 @@ class UpdateError(Exception): pass +class CloningError(UpdateError): + pass + + class Downloader: """Cog downloader/installer.""" @@ -79,7 +83,13 @@ class Downloader: return self.repos[repo_name] = {} self.repos[repo_name]['url'] = repo_url - self.update_repo(repo_name) + try: + self.update_repo(repo_name) + except CloningError: + await self.bot.say("That repository link doesn't seem to be " + "valid.") + del self.repos[repo_name] + return self.populate_list(repo_name) self.save_repos() data = self.get_info_data(repo_name) @@ -431,13 +441,26 @@ class Downloader: return git_name[:-4] def _do_first_run(self): + invalid = [] save = False + for repo in self.repos: broken = 'url' in self.repos[repo] and len(self.repos[repo]) == 1 if broken: - self.update_repo(repo) - self.populate_list(repo) save = True + try: + self.update_repo(repo) + self.populate_list(repo) + except CloningError: + invalid.append(repo) + continue + except Exception as e: + print(e) # TODO: Proper logging + continue + + for repo in invalid: + del self.repos[repo] + if save: self.save_repos() @@ -469,7 +492,7 @@ class Downloader: raise UpdateError("Need to clone but no URL set") p = run(["git", "clone", url, dd + name]) if p.returncode != 0: - raise UpdateError("Error cloning") + raise CloningError() self.populate_list(name) return name, REPO_CLONE, None else: @@ -510,6 +533,8 @@ class Downloader: ret[status] = [] ret[status].append(cogname) return name, ret, oldhash + except CloningError as e: + raise CloningError(name, *e.args) from None except UpdateError as e: raise UpdateError(name, *e.args) from None