Writing plugins

Starting with version 0.10.0, rebase-helper is extensible through plugins.

You can implement your own build tool, checker, output tool, SPEC hook or versioneer. All you have to do is to derive your plugin from corresponding base class, implement all necessary methods and register it using one of the following entry points:

Plugin type Entry point Base class
build tool rebasehelper.build_tools rebasehelper.build_helper.BuildToolBase
checker rebasehelper.checkers rebasehelper.checker.BaseChecker
output tool rebasehelper.output_tools rebasehelper.output_tool.BaseOutputTool
SPEC hook rebasehelper.spec_hooks rebasehelper.specfile.BaseSpecHook
versioneer rebasehelper.versioneers rebasehelper.versioneer.BaseVersioneer

Example

my_spec_hook/__init__.py
from rebasehelper.specfile import BaseSpecHook


class MySpecHook(BaseSpecHook):

    NAME = 'MySpecHook'

    @classmethod
    def get_name(cls):
        return cls.NAME

    @classmethod
    def run(cls, spec_file, rebase_spec_file):
        """
        This method is called after original SPEC file is processed

        :param spec_file: SpecFile object representing original SPEC file
        :param rebase_spec_file: SpecFile object representing rebased SPEC file
        """
        rebase_spec_file.spec_content.insert(0, '# processed by %s\n' % cls.NAME)
        rebase_spec_file.save()
setup.py
from setuptools import setup


setup(
    name='MySpecHook',
    version='0.1',
    description='Custom SPEC hook for rebase-helper',
    author='John Doe',
    install_requires=['rebasehelper>=0.10.0'],
    packages=['my_spec_hook'],
    entry_points={
        'rebasehelper.spec_hooks': ['my_spec_hook = my_spec_hook:MySpecHook']
    }
)