# Path: sumatra/core.py
# def component_type(cls):
#     """Class decorator to define base types for components.
# 
#     Use this decorator to register a base type of a Sumatra component. Concrete components
#     should subclass from this component type to then be registered as a Sumatra component.
# 
#     Not to be used when writing Sumatra plug-ins! For that, please use the `component`
#     decorator.
# 
#     Example:
#     @component_type
#     class MyComponentBase(object):
#         pass
# 
#     @component
#     class MyConcreteComponent(MyComponentBase):
#         pass
#     """
#     for base_type in _Registry().components:
#         if issubclass(cls, base_type):
#             msg = "{cls} is a subclass of already registered component type {base} and " \
#                   "hence could not be registered as component type." \
#                   .format(**{'cls': cls, 'base': base_type})
#             raise TypeError(msg)
#     _Registry().add_component_type(cls)
#     return cls


from builtins import object
from sumatra.core import component_type
import os.path
        Switch the working copy to the most recent version.

        Any uncommitted changes are retained/merged in.
        """
        raise NotImplementedError

    def status(self):
        """
        Return a dict containing the sets of files that have been modified,
        added, removed, are missing, not under version control ('unknown'),
        are being ignored, or are unchanged ('clean').
        """
        raise NotImplementedError

    def has_changed(self):
        """Are there any uncommitted changes to the working copy?"""
        raise NotImplementedError

    def diff(self):
        """Return the difference between working copy and repository."""
        raise NotImplementedError

    def reset(self):
        """Resets all uncommitted changes since the commit. Destructive, be
        careful with use"""
        raise NotImplementedError

    def patch(self, diff):
        """Applies the diff patch onto the repository files. Only works on a
        clean working copy"""

# Path: sumatra/core.py
# def component_type(cls):
#     """Class decorator to define base types for components.
# 
#     Use this decorator to register a base type of a Sumatra component. Concrete components
#     should subclass from this component type to then be registered as a Sumatra component.
# 
#     Not to be used when writing Sumatra plug-ins! For that, please use the `component`
#     decorator.
# 
#     Example:
#     @component_type
#     class MyComponentBase(object):
#         pass
# 
#     @component
#     class MyConcreteComponent(MyComponentBase):
#         pass
#     """
#     for base_type in _Registry().components:
#         if issubclass(cls, base_type):
#             msg = "{cls} is a subclass of already registered component type {base} and " \
#                   "hence could not be registered as component type." \
#                   .format(**{'cls': cls, 'base': base_type})
#             raise TypeError(msg)
#     _Registry().add_component_type(cls)
#     return cls


# Path: sumatra/versioncontrol/base.py
from builtins import object
from sumatra.core import component_type
import os.path

        Switch the working copy to the most recent version.

        Any uncommitted changes are retained/merged in.
        """
        raise NotImplementedError

    def status(self):
        """
        Return a dict containing the sets of files that have been modified,
        added, removed, are missing, not under version control ('unknown'),
        are being ignored, or are unchanged ('clean').
        """
        raise NotImplementedError

    def has_changed(self):
        """Are there any uncommitted changes to the working copy?"""
        raise NotImplementedError

    def diff(self):
        """Return the difference between working copy and repository."""
        raise NotImplementedError

    def reset(self):
        """Resets all uncommitted changes since the commit. Destructive, be
        careful with use"""
        raise NotImplementedError

    def patch(self, diff):
        """Applies the diff patch onto the repository files. Only works on a
        clean working copy"""

        raise NotImplementedError