def test_default_settings_overridden(self): config = ReviewConfig(sample_ini, defaults_ini) res = config.linter_config('jshint') expected = { 'config': './jshint.json', } eq_(res, expected)
def process_pull_request(user, repo, number, lintrc): """ Starts processing a pull request and running the various lint tools against it. """ log.info('Starting to process lint for %s/%s/%s', user, repo, number) log.debug("lintrc contents '%s'", lintrc) review_config = ReviewConfig(lintrc) if len(review_config.linters()) == 0: log.info('No configured linters, skipping processing.') return gh = github.get_client(config, user, repo) try: log.info('Loading pull request data from github.') pull_request = gh.pull_requests.get(number) head_repo = pull_request.head['repo']['clone_url'] private_repo = pull_request.head['repo']['private'] pr_head = pull_request.head['sha'] # Clone/Update repository target_path = git.get_repo_path(user, repo, number, config) git.clone_or_update(config, head_repo, target_path, pr_head, private_repo) processor = Processor(gh, number, pr_head, target_path, config) processor.load_changes() processor.run_tools(review_config) processor.publish() log.info('Completed lint processing for %s/%s/%s' % ( user, repo, number)) except BaseException, e: log.exception(e)
def test_default_settings(self): config = ReviewConfig(simple_ini, defaults_ini) res = config.linter_config('jshint') expected = { 'config': '/etc/jshint.json', } eq_(res, expected)
def process_pull_request(user, repo, number, lintrc): """ Starts processing a pull request and running the various lint tools against it. """ log.info('Starting to process lint for %s/%s/%s', user, repo, number) log.debug("lintrc contents '%s'", lintrc) review_config = ReviewConfig(lintrc) if len(review_config.linters()) == 0: log.info('No configured linters, skipping processing.') return gh = github.get_client(config, user, repo) try: log.info('Loading pull request data from github.') pull_request = gh.pull_requests.get(number) head_repo = pull_request.head['repo']['git_url'] pr_head = pull_request.head['sha'] # Clone/Update repository target_path = git.get_repo_path(user, repo, number, config) git.clone_or_update(head_repo, target_path, pr_head) processor = Processor(gh, number, pr_head, target_path, config) processor.load_changes() processor.run_tools(review_config) processor.publish() log.info('Completed lint processing for %s/%s/%s' % (user, repo, number)) except BaseException, e: log.exception(e)
def test_linter_config(self): config = ReviewConfig(sample_ini) res = config.linter_config('phpcs') expected = { 'standard': 'test/CodeStandards', 'config': 'test/phpcs.xml' } eq_(res, expected) res = config.linter_config('not there') eq_(res, [])
def test_factory_generates_tools(): gh = Mock(spec=github3.GitHub) config = ReviewConfig(sample_ini) linters = tools.factory(Review(gh, None), config, '') eq_(2, len(linters)) assert isinstance(linters[0], tools.pep8.Pep8) assert isinstance(linters[1], tools.jshint.Jshint)
def process_pull_request(user, repo, number, lintrc): """ Starts processing a pull request and running the various lint tools against it. """ log.info('Starting to process lint for %s/%s/%s', user, repo, number) log.debug("lintrc contents '%s'", lintrc) lintrc_defaults = get_lintrc_defaults(config) review_config = ReviewConfig(lintrc, lintrc_defaults) if len(review_config.linters()) == 0: log.info('No configured linters, skipping processing.') return try: log.info('Loading pull request data from github. user=%s ' 'repo=%s number=%s', user, repo, number) gh = github.get_repository(config, user, repo) pull_request = gh.pull_request(number) pr_dict = pull_request.as_dict() head_repo = pr_dict['head']['repo']['clone_url'] private_repo = pr_dict['head']['repo']['private'] pr_head = pr_dict['head']['sha'] target_branch = pr_dict['base']['ref'] if target_branch in review_config.ignore_branches(): log.info('Pull request into ignored branch %s, skipping processing.' % target_branch) return # Clone/Update repository target_path = git.get_repo_path(user, repo, number, config) git.clone_or_update(config, head_repo, target_path, pr_head, private_repo) processor = Processor(gh, number, pr_head, target_path, config) processor.load_changes() processor.run_tools(review_config) processor.publish() log.info('Completed lint processing for %s/%s/%s' % ( user, repo, number)) except BaseException, e: log.exception(e)
def test_run__filter_files(): config = ReviewConfig(simple_ini) problems = Problems() files = [ './tests/fixtures/pep8/has_errors.py', './tests/fixtures/phpcs/has_errors.php' ] tools.run(config, problems, files, [], '') eq_(6, len(problems))
def test_load_ini__multiple_merges_settings(self): config = ReviewConfig() config.load_ini(defaults_ini) config.load_ini(simple_ini) res = config.linter_config('jshint') expected = { 'config': '/etc/jshint.json', } eq_(res, expected)
def test_load_ini__override(self): config = ReviewConfig() config.load_ini(defaults_ini) config.load_ini(sample_ini) res = config.linter_config('jshint') expected = { 'config': './jshint.json', } eq_(res, expected)
def test_ignore_patterns_missing(self): config = ReviewConfig() res = config.ignore_patterns() self.assertEqual(res, [])
def test_linter_config_bad(self): config = ReviewConfig(bad_ini) res = config.linter_config('phpcs') eq_(res, [])
def test_linter_listing(self): config = ReviewConfig(sample_ini) res = config.linters() expected = ['phpcs', 'pep8', 'jshint'] eq_(res, expected)
def test_factory_raises_error_on_bad_linter(): config = ReviewConfig(bad_ini) tools.factory(Review(None, None), config, '')
def test_ignore_patterns(self): config = ReviewConfig(sample_ini) res = config.ignore_patterns() expected = ['test/CodeStandards/test/**', 'vendor/**'] eq_(res, expected)
def test_linter_listing_bad(self): config = ReviewConfig(bad_ini) res = config.linters() eq_(res, [])
def test_factory_generates_tools(): config = ReviewConfig(sample_ini) linters = tools.factory(Review(None, None), config, '') eq_(2, len(linters)) assert isinstance(linters[0], tools.pep8.Pep8) assert isinstance(linters[1], tools.jshint.Jshint)
def test_ignore_patterns_missing(self): config = ReviewConfig() res = config.ignore_patterns() eq_(res, [])
def test_factory_raises_error_on_bad_linter(self): gh = Mock(spec=github3.GitHub) config = ReviewConfig() config.load_ini(bad_ini) self.assertRaises(ImportError, tools.factory, config, Review(gh, None, config), '')
def test_factory_raises_error_on_bad_linter(): gh = Mock(spec=github3.GitHub) config = build_review_config(bad_ini) config = ReviewConfig() config.load_ini(bad_ini) tools.factory(Review(gh, None), config, '')
def test_ignore_patterns_missing(self): config = ReviewConfig("") res = config.ignore_patterns() eq_(res, [])