Ejemplo n.º 1
0
def check_hooks():
    pre_commit_hook = get_pre_commit_hook_path()
    pre_commit_template = get_pre_commit_hook_template_path()

    template = pre_commit_template.read_text()

    if pre_commit_hook.is_file():
        hook = pre_commit_hook.read_text()
        if hook == template:
            ok('autohooks pre-commit hook is active.')
        else:
            error('autohooks pre-commit hook is not active. But a different '
                  'pre-commit hook has been found at {}.'.format(
                      str(pre_commit_hook)))

    else:
        error('autohooks pre-commit hook not active. Please run \'autohooks '
              'activate\'.')

    pyproject_toml = get_pyproject_toml_path()
    if not pyproject_toml.exists():
        error('Missing {} file. Please add a pyproject.toml file and include '
              'a "{}" section.'.format(str(pyproject_toml), AUTOHOOKS_SECTION))
    else:
        config = load_config_from_pyproject_toml(pyproject_toml)
        if not config.is_autohooks_enabled():
            error('autohooks is not enabled in your {} file. Please add '
                  'a "{}" section.'.format(str(pyproject_toml),
                                           AUTOHOOKS_SECTION))
        else:
            plugins = config.get_pre_commit_script_names()
            if not plugins:
                error('No autohooks plugin is activated in {} for your pre '
                      'commit hook. Please add a '
                      '"pre-commit = [plugin1, plugin2]" '
                      'setting.'.format(str(pyproject_toml)))
            else:
                with autohooks_module_path():
                    for name in plugins:
                        try:
                            plugin = load_plugin(name)
                            if not has_precommit_function(plugin):
                                error('Plugin "{}" has no precommit function. '
                                      'The function is required to run the '
                                      'plugin as git pre commit hook.'.format(
                                          name))
                            elif not has_precommit_parameters(plugin):
                                warning(
                                    'Plugin "{}" uses a deprecated signature '
                                    'for its precommit function. It is missing '
                                    'the **kwargs parameter.'.format(name))
                            else:
                                ok('Plugin "{}" active and loadable'.format(
                                    name))
                        except ImportError as e:
                            error('"{}" is not a valid autohooks '
                                  'plugin. {}'.format(name, e))
Ejemplo n.º 2
0
def check_config(
    term: Terminal,
    pyproject_toml: Path,
    pre_commit_hook: PreCommitHook,
) -> None:
    if not pyproject_toml.exists():
        term.error(
            f'Missing {str(pyproject_toml)} file. Please add a pyproject.toml '
            f'file and include a "{AUTOHOOKS_SECTION}" section.'
        )
    else:
        config = load_config_from_pyproject_toml(pyproject_toml)
        if not config.is_autohooks_enabled():
            term.error(
                f'autohooks is not enabled in your {str(pyproject_toml)} file.'
                f' Please add a "{AUTOHOOKS_SECTION}" section.'
            )
        elif pre_commit_hook.exists():
            config_mode = config.get_mode()
            hook_mode = pre_commit_hook.read_mode()

            if config_mode == Mode.UNDEFINED:
                term.warning(
                    f'autohooks mode is not defined in {str(pyproject_toml)}.'
                )
            elif config_mode == Mode.UNKNOWN:
                term.warning(
                    f'Unknown autohooks mode in {str(pyproject_toml)}.'
                )

            if (
                config_mode.get_effective_mode()
                != hook_mode.get_effective_mode()
            ):
                term.warning(
                    f'autohooks mode "{str(hook_mode)}" in pre-commit '
                    f'hook {str(pre_commit_hook)} differs from '
                    f'mode "{str(config_mode)}" in {str(pyproject_toml)}.'
                )

            term.info(
                f'Using autohooks mode "{str(hook_mode.get_effective_mode())}".'
            )

            plugins = config.get_pre_commit_script_names()
            if not plugins:
                term.error(
                    'No autohooks plugin is activated in '
                    f'{str(pyproject_toml)} for your pre commit hook. Please '
                    'add a "pre-commit = [plugin1, plugin2]" setting.'
                )
            else:
                with autohooks_module_path():
                    for name in plugins:
                        try:
                            plugin = load_plugin(name)
                            if not has_precommit_function(plugin):
                                term.error(
                                    f'Plugin "{name}" has no precommit '
                                    'function. The function is required to run'
                                    ' the plugin as git pre commit hook.'
                                )
                            elif not has_precommit_parameters(plugin):
                                term.warning(
                                    f'Plugin "{name}" uses a deprecated '
                                    'signature for its precommit function. It '
                                    'is missing the **kwargs parameter.'
                                )
                            else:
                                term.ok(f'Plugin "{name}" active and loadable.')
                        except ImportError as e:
                            term.error(
                                f'"{name}" is not a valid autohooks '
                                f'plugin. {e}'
                            )
Ejemplo n.º 3
0
def check_config(
    term: Terminal, pyproject_toml: Path, pre_commit_hook: PreCommitHook,
) -> None:
    if not pyproject_toml.exists():
        term.error(
            'Missing {} file. Please add a pyproject.toml file and include '
            'a "{}" section.'.format(str(pyproject_toml), AUTOHOOKS_SECTION)
        )
    else:
        config = load_config_from_pyproject_toml(pyproject_toml)
        if not config.is_autohooks_enabled():
            term.error(
                'autohooks is not enabled in your {} file. Please add '
                'a "{}" section.'.format(str(pyproject_toml), AUTOHOOKS_SECTION)
            )
        elif pre_commit_hook.exists():
            config_mode = config.get_mode()
            hook_mode = pre_commit_hook.read_mode()

            if config_mode == Mode.UNDEFINED:
                term.warning(
                    'autohooks mode is not defined in {}.'.format(
                        str(pyproject_toml)
                    )
                )
            elif config_mode == Mode.UNKNOWN:
                term.warning(
                    'Unknown autohooks mode in {}.'.format(str(pyproject_toml))
                )

            if (
                config_mode.get_effective_mode()
                != hook_mode.get_effective_mode()
            ):
                term.warning(
                    'autohooks mode "{}" in pre-commit hook {} differs from '
                    'mode "{}" in {}.'.format(
                        str(hook_mode),
                        str(pre_commit_hook),
                        str(config_mode),
                        str(pyproject_toml),
                    )
                )

            term.info(
                'Using autohooks mode "{}".'.format(
                    str(hook_mode.get_effective_mode())
                )
            )

            plugins = config.get_pre_commit_script_names()
            if not plugins:
                term.error(
                    'No autohooks plugin is activated in {} for your pre '
                    'commit hook. Please add a '
                    '"pre-commit = [plugin1, plugin2]" '
                    'setting.'.format(str(pyproject_toml))
                )
            else:
                with autohooks_module_path():
                    for name in plugins:
                        try:
                            plugin = load_plugin(name)
                            if not has_precommit_function(plugin):
                                term.error(
                                    'Plugin "{}" has no precommit function. '
                                    'The function is required to run the '
                                    'plugin as git pre commit hook.'.format(
                                        name
                                    )
                                )
                            elif not has_precommit_parameters(plugin):
                                term.warning(
                                    'Plugin "{}" uses a deprecated signature '
                                    'for its precommit function. It is missing '
                                    'the **kwargs parameter.'.format(name)
                                )
                            else:
                                term.ok(
                                    'Plugin "{}" active and loadable.'.format(
                                        name
                                    )
                                )
                        except ImportError as e:
                            term.error(
                                '"{}" is not a valid autohooks '
                                'plugin. {}'.format(name, e)
                            )