kriti21

Untitled

Jun 10th, 2018
25
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.43 KB | None | 0 0
  1. import os
  2. import shutil
  3. import re
  4.  
  5. from coalib.bears.GlobalBear import GlobalBear
  6. from coalib.results.HiddenResult import HiddenResult
  7. from coalib.results.Result import Result
  8. from coala_utils.ContextManagers import change_directory
  9. from coalib.misc.Shell import run_shell_command
  10. from dependency_management.requirements.PipRequirement import PipRequirement
  11.  
  12.  
  13. class CommitResult(HiddenResult):
  14.     def run(self):
  15.         yield HiddenResult(self, commit_info)
  16.  
  17. class VCSCommitBear(GlobalBear):
  18.     LANGUAGES = {'Git'}
  19.     REQUIREMENTS = {PipRequirement('nltk', '3.2')}
  20.     AUTHORS = {'The coala developers'}
  21.     AUTHORS_EMAILS = {'coala-devel@googlegroups.com'}
  22.     LICENSE = 'AGPL-3.0'
  23.  
  24.     @classmethod
  25.     def check_prerequisites(cls):
  26.         if shutil.which('git') is None:
  27.             return 'git is not installed.'
  28.         else:
  29.             return True
  30.  
  31.     def analyze_git_commit(self, stdout, commit_sha):
  32.         commit_info = dict()
  33.  
  34.         commit_type = []
  35.         if len(stdout) == 0:
  36.             speciacommit_type.append('empty_commit')
  37.  
  38.         stdout = stdout.rstrip('\n')
  39.  
  40.         if stdout.startswith('Revert '):
  41.             commit_type.append('revert_commit')
  42.  
  43.         if 'ci skip' in stdout or 'skip ci' in stdout:
  44.             commit_type.append('ci_skip_commit')
  45.  
  46.         get_parent_commits = 'git log --pretty=%P -n 1 ' + commit_sha
  47.         parent_commits, _ = run_shell_command(get_parent_commits)
  48.         parent_commits_list = parent_commits.split('\n')
  49.  
  50.         if len(parent_commits_list) > 2:
  51.             commit_type.append('merge_commit')
  52.  
  53.         get_modified_files = 'git show --pretty="" --name-only ' + commit_sha
  54.         modified_files, _ = run_shell_command(get_modified_files)
  55.         modified_files_list = modified_files.split('\n')
  56.  
  57.         commit_info['commit_sha'] = commit_sha
  58.         commit_info['commit_type'] = commit_type
  59.         commit_info['modified_files'] = modified_files_list
  60.  
  61.         return commit_info
  62.  
  63.     def run(self):
  64.         with change_directory(self.get_config_dir() or os.getcwd()):
  65.             stdout, stderr = run_shell_command('git log -1 --pretty=%B')
  66.  
  67.         if stderr:
  68.             self.err('git:', repr(stderr))
  69.             return
  70.  
  71.         commit_sha = run_shell_command('git rev-parse HEAD')[0].strip('\n')
  72.         commit_info = self.analyze_git_commit(stdout, commit_sha)
  73.  
  74.         yield CommitResult(self, (commit_info,), "HEAD commit information")
Add Comment
Please, Sign In to add comment