view wikked/scm/base.py @ 225:ebb12ff21cb2

Updated unit tests to be able to run.
author Ludovic Chabant <ludovic@chabant.com>
date Wed, 12 Mar 2014 23:02:40 -0700
parents fba20c625fb3
children 163ba52e7b84
line wrap: on
line source

import re


STATE_COMMITTED = 0
STATE_MODIFIED = 1
STATE_NEW = 2
STATE_NAMES = ['committed', 'modified', 'new']

ACTION_ADD = 0
ACTION_DELETE = 1
ACTION_EDIT = 2
ACTION_NAMES = ['add', 'delete', 'edit']


class SourceControl(object):
    def __init__(self):
        pass

    def start(self, wiki):
        pass

    def init(self, wiki):
        pass

    def postInit(self):
        pass

    def getSpecialFilenames(self):
        raise NotImplementedError()

    def getHistory(self, path=None, limit=10):
        raise NotImplementedError()

    def getState(self, path):
        raise NotImplementedError()

    def getRevision(self, path, rev):
        raise NotImplementedError()

    def diff(self, path, rev1, rev2):
        raise NotImplementedError()

    def commit(self, paths, op_meta):
        pass

    def revert(self, paths=None):
        pass


class Author(object):
    def __init__(self, name=None, email=None):
        self.name = name
        self.email = email
        if name is not None and email is None:
            m = re.match(r'(?P<name>.+)\s+\<(?P<email>.+@.+\.\w+)\>', name)
            if m is not None:
                self.name = str(m.group('name'))
                self.email = str(m.group('email'))

    def __str__(self):
        return '%s <%s>' % (self.name, self.email)


class Revision(object):
    def __init__(self, rev_id=-1):
        self.rev_id = rev_id
        self.rev_name = rev_id
        self.author = None
        self.timestamp = 0
        self.description = None
        self.files = []

    @property
    def is_local(self):
        return self.rev_id == -1

    @property
    def is_committed(self):
        return self.rev_id != -1


class SourceControlError(Exception):
    def __init__(self, operation, message, command, output, *args):
        Exception.__init__(self, *args)
        self.operation = operation
        self.message = message
        self.command = command
        self.output = output

    def __str__(self):
        return "Error running '%s': %s\nCommand: %s\nOutput: %s" % (
                self.operation, self.message, self.command, self.output)