Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import shutil
- import re
- from coalib.bears.GlobalBear import GlobalBear
- from coalib.results.HiddenResult import HiddenResult
- from coalib.results.Result import Result
- from coala_utils.ContextManagers import change_directory
- from coalib.misc.Shell import run_shell_command
- from dependency_management.requirements.PipRequirement import PipRequirement
- class CommitResult(HiddenResult):
- def run(self):
- yield HiddenResult(self, commit_info)
- class VCSCommitBear(GlobalBear):
- LANGUAGES = {'All'}
- REQUIREMENTS = {PipRequirement('nltk', '3.2')}
- AUTHORS = {'The coala developers'}
- AUTHORS_EMAILS = {'coala-devel@googlegroups.com'}
- LICENSE = 'AGPL-3.0'
- @classmethod
- def check_prerequisites(cls):
- if shutil.which('git') is None:
- return 'git is not installed.'
- else:
- return True
- def analyze_commit(self, stdout, commit_sha):
- commit_info = dict()
- commit_type = []
- if len(stdout) == 0:
- speciacommit_type.append('empty_commit')
- stdout = stdout.rstrip('\n')
- if stdout.startswith('Revert '):
- commit_type.append('revert_commit')
- if 'ci skip' in stdout or 'skip ci' in stdout:
- commit_type.append('ci_skip_commit')
- get_parent_commits = 'git log --pretty=%P -n 1 ' + commit_sha
- parent_commits, _ = run_shell_command(get_parent_commits)
- parent_commits_list = parent_commits.split('\n')
- if len(parent_commits_list) > 2:
- commit_type.append('merge_commit')
- get_modified_files = 'git show --pretty="" --name-only ' + commit_sha
- modified_files, _ = run_shell_command(get_modified_files)
- modified_files_list = modified_files.split('\n')
- commit_info['commit_sha'] = commit_sha
- commit_info['commit_type'] = commit_type
- commit_info['modified_files'] = modified_files_list
- return commit_info
- def run(self):
- with change_directory(self.get_config_dir() or os.getcwd()):
- stdout, stderr = run_shell_command('git log -1 --pretty=%B')
- if stderr:
- self.err('git:', repr(stderr))
- return
- commit_sha = run_shell_command('git rev-parse HEAD')[0].strip('\n')
- commit_info = self.analyze_commit(stdout, commit_sha)
- yield CommitResult(self, (commit_info,), "HEAD commit information")
Add Comment
Please, Sign In to add comment