Skip to content

Commit

Permalink
Started refactoring exceptions -- *somebody* should've done it while ago
Browse files Browse the repository at this point in the history
  • Loading branch information
superbobry committed Aug 30, 2011
1 parent 1e67be9 commit 56b5488
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 36 deletions.
34 changes: 34 additions & 0 deletions gitosis/exceptions.py
@@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
"""
gitosis.exceptions
~~~~~~~~~~~~~~~~~~
This module defines a couple of exceptions raised in different
parts of :mod:`gitosis`.
:license: GPL
"""

from __future__ import unicode_literals


class GitosisError(Exception):
"""Base class for all :mod:`gitosis` exceptions."""


class ImproperlyConfigured(GitosisError):
"""Exception raised when something is wrong with :mod:`gitosis`
configuration. For example when the config file is missing or
doesn't contain required configuration variable.
"""


class GitError(GitosisError):
"""Exception raised when ``git`` comand failed to execute."""
def __init__(self, command, *args):
self.command = command
super(GitosisError, self).__init__(*args)

def __str__(self):
return "git {0} failed: {1}".format(self.command,
": ".join(self.args))
40 changes: 7 additions & 33 deletions gitosis/repository.py
Expand Up @@ -7,15 +7,8 @@
import sys

from gitosis import util
from gitosis.exceptions import GitosisError, GitError

class GitError(Exception):
"""git failed"""

def __str__(self):
return '%s: %s' % (self.__doc__, ': '.join(self.args))

class GitInitError(Exception):
"""git init failed"""

def init(
path,
Expand Down Expand Up @@ -58,12 +51,8 @@ def init(
close_fds=True,
)
if returncode != 0: #pragma: no cover
raise GitInitError('exit status %d' % returncode)

raise GitError("init", 'exit status %d' % returncode)

class GitFastImportError(GitError):
"""git fast-import failed"""
pass

def fast_import(
git_dir,
Expand Down Expand Up @@ -121,18 +110,8 @@ def fast_import(
child.stdin.close()
returncode = child.wait()
if returncode != 0: #pragma: no cover
raise GitFastImportError(
'git fast-import failed', 'exit status %d' % returncode)
raise GitError("fast-import", 'exit status %d' % returncode)

class GitExportError(GitError):
"""Export failed"""
pass

class GitReadTreeError(GitExportError):
"""git read-tree failed"""

class GitCheckoutIndexError(GitExportError):
"""git checkout-index failed"""

def export(git_dir, path):
"""Export a Git repository to a given path."""
Expand All @@ -147,7 +126,7 @@ def export(git_dir, path):
close_fds=True,
)
if returncode != 0: #pragma: no cover
raise GitReadTreeError('exit status %d' % returncode)
raise GitError("read-tree", 'exit status %d' % returncode)
# jumping through hoops to be compatible with git versions
# that don't have --work-tree=
env = {}
Expand All @@ -166,13 +145,8 @@ def export(git_dir, path):
env=env,
)
if returncode != 0: #pragma: no cover
raise GitCheckoutIndexError('exit status %d' % returncode)

class GitHasInitialCommitError(GitError):
"""Check for initial commit failed"""
raise GitError("checkout-index", 'exit status %d' % returncode)

class GitRevParseError(GitError):
"""rev-parse failed"""

def has_initial_commit(git_dir):
"""Check if a Git repo contains at least one commit linked by HEAD."""
Expand All @@ -190,10 +164,10 @@ def has_initial_commit(git_dir):
got = child.stdout.read()
returncode = child.wait()
if returncode != 0:
raise GitRevParseError('exit status %d' % returncode)
raise GitError("rev-parse", 'exit status %d' % returncode)
if got == 'HEAD\n':
return False
elif re.match('^[0-9a-f]{40}\n$', got):
return True
else: #pragma: no cover
raise GitHasInitialCommitError('Unknown git HEAD: %r' % got)
raise GitosisError('Unknown git HEAD: %r' % got)
7 changes: 4 additions & 3 deletions gitosis/test/test_repository.py
Expand Up @@ -5,6 +5,8 @@
import random

from gitosis import repository
from gitosis.exceptions import GitError


from gitosis.test.util import (
mkdir,
Expand Down Expand Up @@ -263,11 +265,10 @@ def test_export_environment():

def test_has_initial_commit_fail_notAGitDir():
tmp = maketemp()
e = assert_raises(
repository.GitRevParseError,
e = assert_raises(GitError,
repository.has_initial_commit,
git_dir=tmp)
eq(str(e), 'rev-parse failed: exit status 128')
eq(str(e), 'git rev-parse failed: exit status 128')

def test_has_initial_commit_no():
tmp = maketemp()
Expand Down

0 comments on commit 56b5488

Please sign in to comment.