mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 03:08:55 -05:00
156 lines
2.7 KiB
Python
156 lines
2.7 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import List, TYPE_CHECKING
|
|
|
|
if TYPE_CHECKING:
|
|
from .repo_manager import Candidate
|
|
|
|
|
|
__all__ = [
|
|
"DownloaderException",
|
|
"GitException",
|
|
"InvalidRepoName",
|
|
"CopyingError",
|
|
"ExistingGitRepo",
|
|
"MissingGitRepo",
|
|
"CloningError",
|
|
"CurrentHashError",
|
|
"HardResetError",
|
|
"UpdateError",
|
|
"GitDiffError",
|
|
"NoRemoteURL",
|
|
"UnknownRevision",
|
|
"AmbiguousRevision",
|
|
"PipError",
|
|
]
|
|
|
|
|
|
class DownloaderException(Exception):
|
|
"""
|
|
Base class for Downloader exceptions.
|
|
"""
|
|
|
|
pass
|
|
|
|
|
|
class GitException(DownloaderException):
|
|
"""
|
|
Generic class for git exceptions.
|
|
"""
|
|
|
|
def __init__(self, message: str, git_command: str) -> None:
|
|
self.git_command = git_command
|
|
super().__init__(f"Git command failed: {git_command}\nError message: {message}")
|
|
|
|
|
|
class InvalidRepoName(DownloaderException):
|
|
"""
|
|
Throw when a repo name is invalid. Check
|
|
the message for a more detailed reason.
|
|
"""
|
|
|
|
pass
|
|
|
|
|
|
class CopyingError(DownloaderException):
|
|
"""
|
|
Throw when there was an issue
|
|
during copying of module's files.
|
|
"""
|
|
|
|
pass
|
|
|
|
|
|
class ExistingGitRepo(DownloaderException):
|
|
"""
|
|
Thrown when trying to clone into a folder where a
|
|
git repo already exists.
|
|
"""
|
|
|
|
pass
|
|
|
|
|
|
class MissingGitRepo(DownloaderException):
|
|
"""
|
|
Thrown when a git repo is expected to exist but
|
|
does not.
|
|
"""
|
|
|
|
pass
|
|
|
|
|
|
class CloningError(GitException):
|
|
"""
|
|
Thrown when git clone returns a non zero exit code.
|
|
"""
|
|
|
|
pass
|
|
|
|
|
|
class CurrentHashError(GitException):
|
|
"""
|
|
Thrown when git returns a non zero exit code attempting
|
|
to determine the current commit hash.
|
|
"""
|
|
|
|
pass
|
|
|
|
|
|
class HardResetError(GitException):
|
|
"""
|
|
Thrown when there is an issue trying to execute a hard reset
|
|
(usually prior to a repo update).
|
|
"""
|
|
|
|
pass
|
|
|
|
|
|
class UpdateError(GitException):
|
|
"""
|
|
Thrown when git pull returns a non zero error code.
|
|
"""
|
|
|
|
pass
|
|
|
|
|
|
class GitDiffError(GitException):
|
|
"""
|
|
Thrown when a git diff fails.
|
|
"""
|
|
|
|
pass
|
|
|
|
|
|
class NoRemoteURL(GitException):
|
|
"""
|
|
Thrown when no remote URL exists for a repo.
|
|
"""
|
|
|
|
pass
|
|
|
|
|
|
class UnknownRevision(GitException):
|
|
"""
|
|
Thrown when specified revision cannot be found.
|
|
"""
|
|
|
|
pass
|
|
|
|
|
|
class AmbiguousRevision(GitException):
|
|
"""
|
|
Thrown when specified revision is ambiguous.
|
|
"""
|
|
|
|
def __init__(self, message: str, git_command: str, candidates: List[Candidate]) -> None:
|
|
super().__init__(message, git_command)
|
|
self.candidates = candidates
|
|
|
|
|
|
class PipError(DownloaderException):
|
|
"""
|
|
Thrown when pip returns a non-zero return code.
|
|
"""
|
|
|
|
pass
|