def pre_commit(): """ This hook is invoked by git commit, and can be bypassed with --no-verify option. It takes no parameter, and is invoked before obtaining the proposed commit log message and making a commit. Exiting with non-zero status from this script causes the git commit to abort. """ repository = git.Repo() user_configuration = config.UserConfiguration() logger = output.get_root_logger('pre-commit') logger.setLevel(user_configuration.verbosity) logger.debug('Starting Pre-Commit Hook') logger.debug('Repository Working Dir: %s', repository.working_dir) try: repository_configuration = config.load_repository_configuration(repository.working_dir) except ValueError as e: logger.error(e) raise click.Abort logger.debug('Loaded repository configuration: %s', repository_configuration['CONFIG_FILE']) staging_area = staging.StagingArea(repository) logger.debug('Changed Files: %d', len(staging_area.changes)) failed_checks = checks.run_checks('pre_commit', user_configuration, repository_configuration, staging_area) if failed_checks: s = '' if failed_checks == 1 else 's' logger.error('%d check%s failed', failed_checks, s) sys.exit(failed_checks)
def commit_msg(message_file_path): """ This hook is invoked by git commit, and can be bypassed with --no-verify option. It takes a single parameter, the name of the file that holds the proposed commit log message. Exiting with non-zero status causes the git commit to abort. :param message_file_path: the name of the file that holds the proposed commit log message :type message_file_path: string """ repository = git.Repo() branch = repository.active_branch.name user_configuration = config.UserConfiguration() logger = output.get_root_logger('commit-msg') logger.setLevel(user_configuration.verbosity) logger.debug('Starting Commit-Msg Hook') logger.debug('Path to commit message file: %s', message_file_path) logger.debug('Repository Working Dir: %s', repository.working_dir) logger.debug('Current branch: %s', branch) try: repository_configuration = config.load_repository_configuration( repository.working_dir) except ValueError as e: logger.error(str(e)) raise click.Abort logger.debug('Loaded repository configuration: %s', repository_configuration['CONFIG_FILE']) logger.debug('Opening commit message file') try: with open(message_file_path) as message_file: str_commit_message = message_file.read() except IOError: logger.error('Commit message file (%s) not found', message_file_path) raise click.Abort logger.debug('Commit Message: %s', str_commit_message) commit_message = message.CommitMessage(branch, str_commit_message) failed_checks = checks.run_checks('commit_msg', user_configuration, repository_configuration, commit_message) if failed_checks: s = '' if failed_checks == 1 else 's' logger.error('%d check%s failed', failed_checks, s) sys.exit(failed_checks)
def commit_msg(message_file_path): """ This hook is invoked by git commit, and can be bypassed with --no-verify option. It takes a single parameter, the name of the file that holds the proposed commit log message. Exiting with non-zero status causes the git commit to abort. :param message_file_path: the name of the file that holds the proposed commit log message :type message_file_path: string """ repository = git.Repo() branch = repository.active_branch.name user_configuration = config.UserConfiguration() logger = output.get_root_logger('commit-msg') logger.setLevel(user_configuration.verbosity) logger.debug('Starting Commit-Msg Hook') logger.debug('Path to commit message file: %s', message_file_path) logger.debug('Repository Working Dir: %s', repository.working_dir) logger.debug('Current branch: %s', branch) try: repository_configuration = config.load_repository_configuration(repository.working_dir) except ValueError as e: logger.error(str(e)) raise click.Abort logger.debug('Loaded repository configuration: %s', repository_configuration['CONFIG_FILE']) logger.debug('Opening commit message file') try: with open(message_file_path) as message_file: str_commit_message = message_file.read() except IOError: logger.error('Commit message file (%s) not found', message_file_path) raise click.Abort logger.debug('Commit Message: %s', str_commit_message) commit_message = message.CommitMessage(branch, str_commit_message) failed_checks = checks.run_checks('commit_msg', user_configuration, repository_configuration, commit_message) if failed_checks: s = '' if failed_checks == 1 else 's' logger.error('%d check%s failed', failed_checks, s) sys.exit(failed_checks)
def cmd(verbosity): """ Remove git hooks from repository """ logger = output.get_root_logger('manager-remove') logger.setLevel(verbosity) logger.info('Remove Git Hooks') try: repository = git.Repo() except git.InvalidGitRepositoryError: logger.error('This command must be executed inside a repository.') raise click.Abort hook_dir = pathlib.Path(repository.git_dir) / 'hooks' pre_commit_path = hook_dir / 'pre-commit' commit_msg_path = hook_dir / 'commit-msg' remove_hook('Pre-Commit', pre_commit_path) remove_hook('Commit-Msg', commit_msg_path)
def cmd(verbosity): """ Install git hooks in repository """ logger = output.get_root_logger('manager-install') logger.setLevel(verbosity) logger.info('Installing Git Hooks') try: repository = git.Repo() except git.InvalidGitRepositoryError: logger.error('This command must be executed inside a repository.') raise click.Abort hook_dir = pathlib.Path(repository.git_dir) / 'hooks' pre_commit_path = hook_dir / 'pre-commit' commit_msg_path = hook_dir / 'commit-msg' install_hook('Pre-Commit', pre_commit_path, 'turnstile-pre-commit') install_hook('Commit-Msg', commit_msg_path, 'turnstile-commit-msg $1')
def cmd(verbosity): """ Install git hooks in repository """ logger = output.get_root_logger('manager-install') logger.setLevel(verbosity) logger.info('Installing Git Hooks') try: repository = git.Repo() except git.InvalidGitRepositoryError: logger.error('This command must be executed inside a repository.') raise click.Abort hook_dir = pathlib.Path(repository.git_dir) / 'hooks' pre_commit_path = hook_dir / 'pre-commit' commit_msg_path = hook_dir / 'commit-msg' install_hook('Pre-Commit', pre_commit_path, 'zalando-turnstile-pre-commit') install_hook('Commit-Msg', commit_msg_path, 'zalando-turnstile-commit-msg $1')
def pre_commit(): """ This hook is invoked by git commit, and can be bypassed with --no-verify option. It takes no parameter, and is invoked before obtaining the proposed commit log message and making a commit. Exiting with non-zero status from this script causes the git commit to abort. """ repository = git.Repo() user_configuration = config.UserConfiguration() logger = output.get_root_logger('pre-commit') logger.setLevel(user_configuration.verbosity) logger.debug('Starting Pre-Commit Hook') logger.debug('Repository Working Dir: %s', repository.working_dir) try: repository_configuration = config.load_repository_configuration( repository.working_dir) except ValueError as e: logger.error(e) raise click.Abort logger.debug('Loaded repository configuration: %s', repository_configuration['CONFIG_FILE']) staging_area = staging.StagingArea(repository) logger.debug('Changed Files: %d', len(staging_area.changes)) failed_checks = checks.run_checks('pre_commit', user_configuration, repository_configuration, staging_area) if failed_checks: s = '' if failed_checks == 1 else 's' logger.error('%d check%s failed', failed_checks, s) sys.exit(failed_checks)