Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Unified Diff: tools/checkdeps/checkdeps.py

Issue 334743002: Revert of Revert of Remove now obsolete checkdeps copy (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/checkdeps/builddeps.py ('k') | tools/checkdeps/checkdeps_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/checkdeps/checkdeps.py
diff --git a/tools/checkdeps/checkdeps.py b/tools/checkdeps/checkdeps.py
deleted file mode 100755
index 5bf79076063b98d5293616292d4b9157b7044196..0000000000000000000000000000000000000000
--- a/tools/checkdeps/checkdeps.py
+++ /dev/null
@@ -1,237 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2012 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Makes sure that files include headers from allowed directories.
-
-Checks DEPS files in the source tree for rules, and applies those rules to
-"#include" and "import" directives in the .cpp and .java source files.
-Any source file including something not permitted by the DEPS files will fail.
-
-See builddeps.py for a detailed description of the DEPS format.
-"""
-
-import os
-import optparse
-import re
-import sys
-
-import cpp_checker
-import java_checker
-import results
-
-from builddeps import DepsBuilder
-from rules import Rule, Rules
-
-
-def _IsTestFile(filename):
- """Does a rudimentary check to try to skip test files; this could be
- improved but is good enough for now.
- """
- return re.match('(test|mock|dummy)_.*|.*_[a-z]*test\.(cc|mm|java)', filename)
-
-
-class DepsChecker(DepsBuilder):
- """Parses include_rules from DEPS files and verifies files in the
- source tree against them.
- """
-
- def __init__(self,
- base_directory=None,
- verbose=False,
- being_tested=False,
- ignore_temp_rules=False,
- skip_tests=False):
- """Creates a new DepsChecker.
-
- Args:
- base_directory: OS-compatible path to root of checkout, e.g. C:\chr\src.
- verbose: Set to true for debug output.
- being_tested: Set to true to ignore the DEPS file at tools/checkdeps/DEPS.
- ignore_temp_rules: Ignore rules that start with Rule.TEMP_ALLOW ("!").
- """
- DepsBuilder.__init__(
- self, base_directory, verbose, being_tested, ignore_temp_rules)
-
- self._skip_tests = skip_tests
- self.results_formatter = results.NormalResultsFormatter(verbose)
-
- def Report(self):
- """Prints a report of results, and returns an exit code for the process."""
- if self.results_formatter.GetResults():
- self.results_formatter.PrintResults()
- return 1
- print '\nSUCCESS\n'
- return 0
-
- def CheckDirectory(self, start_dir):
- """Checks all relevant source files in the specified directory and
- its subdirectories for compliance with DEPS rules throughout the
- tree (starting at |self.base_directory|). |start_dir| must be a
- subdirectory of |self.base_directory|.
-
- On completion, self.results_formatter has the results of
- processing, and calling Report() will print a report of results.
- """
- java = java_checker.JavaChecker(self.base_directory, self.verbose)
- cpp = cpp_checker.CppChecker(self.verbose)
- checkers = dict(
- (extension, checker)
- for checker in [java, cpp] for extension in checker.EXTENSIONS)
- self._CheckDirectoryImpl(checkers, start_dir)
-
- def _CheckDirectoryImpl(self, checkers, dir_name):
- rules = self.GetDirectoryRules(dir_name)
- if rules is None:
- return
-
- # Collect a list of all files and directories to check.
- files_to_check = []
- dirs_to_check = []
- contents = sorted(os.listdir(dir_name))
- for cur in contents:
- full_name = os.path.join(dir_name, cur)
- if os.path.isdir(full_name):
- dirs_to_check.append(full_name)
- elif os.path.splitext(full_name)[1] in checkers:
- if not self._skip_tests or not _IsTestFile(cur):
- files_to_check.append(full_name)
-
- # First check all files in this directory.
- for cur in files_to_check:
- checker = checkers[os.path.splitext(cur)[1]]
- file_status = checker.CheckFile(rules, cur)
- if file_status.HasViolations():
- self.results_formatter.AddError(file_status)
-
- # Next recurse into the subdirectories.
- for cur in dirs_to_check:
- self._CheckDirectoryImpl(checkers, cur)
-
- def CheckAddedCppIncludes(self, added_includes):
- """This is used from PRESUBMIT.py to check new #include statements added in
- the change being presubmit checked.
-
- Args:
- added_includes: ((file_path, (include_line, include_line, ...), ...)
-
- Return:
- A list of tuples, (bad_file_path, rule_type, rule_description)
- where rule_type is one of Rule.DISALLOW or Rule.TEMP_ALLOW and
- rule_description is human-readable. Empty if no problems.
- """
- cpp = cpp_checker.CppChecker(self.verbose)
- problems = []
- for file_path, include_lines in added_includes:
- if not cpp.IsCppFile(file_path):
- continue
- rules_for_file = self.GetDirectoryRules(os.path.dirname(file_path))
- if not rules_for_file:
- continue
- for line in include_lines:
- is_include, violation = cpp.CheckLine(
- rules_for_file, line, file_path, True)
- if not violation:
- continue
- rule_type = violation.violated_rule.allow
- if rule_type == Rule.ALLOW:
- continue
- violation_text = results.NormalResultsFormatter.FormatViolation(
- violation, self.verbose)
- problems.append((file_path, rule_type, violation_text))
- return problems
-
-
-def PrintUsage():
- print """Usage: python checkdeps.py [--root <root>] [tocheck]
-
- --root ROOT Specifies the repository root. This defaults to "../../.."
- relative to the script file. This will be correct given the
- normal location of the script in "<root>/tools/checkdeps".
-
- --(others) There are a few lesser-used options; run with --help to show them.
-
- tocheck Specifies the directory, relative to root, to check. This defaults
- to "." so it checks everything.
-
-Examples:
- python checkdeps.py
- python checkdeps.py --root c:\\source chrome"""
-
-
-def main():
- option_parser = optparse.OptionParser()
- option_parser.add_option(
- '', '--root',
- default='', dest='base_directory',
- help='Specifies the repository root. This defaults '
- 'to "../../.." relative to the script file, which '
- 'will normally be the repository root.')
- option_parser.add_option(
- '', '--ignore-temp-rules',
- action='store_true', dest='ignore_temp_rules', default=False,
- help='Ignore !-prefixed (temporary) rules.')
- option_parser.add_option(
- '', '--generate-temp-rules',
- action='store_true', dest='generate_temp_rules', default=False,
- help='Print rules to temporarily allow files that fail '
- 'dependency checking.')
- option_parser.add_option(
- '', '--count-violations',
- action='store_true', dest='count_violations', default=False,
- help='Count #includes in violation of intended rules.')
- option_parser.add_option(
- '', '--skip-tests',
- action='store_true', dest='skip_tests', default=False,
- help='Skip checking test files (best effort).')
- option_parser.add_option(
- '-v', '--verbose',
- action='store_true', default=False,
- help='Print debug logging')
- option_parser.add_option(
- '', '--json',
- help='Path to JSON output file')
- options, args = option_parser.parse_args()
-
- deps_checker = DepsChecker(options.base_directory,
- verbose=options.verbose,
- ignore_temp_rules=options.ignore_temp_rules,
- skip_tests=options.skip_tests)
- base_directory = deps_checker.base_directory # Default if needed, normalized
-
- # Figure out which directory we have to check.
- start_dir = base_directory
- if len(args) == 1:
- # Directory specified. Start here. It's supposed to be relative to the
- # base directory.
- start_dir = os.path.abspath(os.path.join(base_directory, args[0]))
- elif len(args) >= 2 or (options.generate_temp_rules and
- options.count_violations):
- # More than one argument, or incompatible flags, we don't handle this.
- PrintUsage()
- return 1
-
- if not start_dir.startswith(deps_checker.base_directory):
- print 'Directory to check must be a subdirectory of the base directory,'
- print 'but %s is not a subdirectory of %s' % (start_dir, base_directory)
- return 1
-
- print 'Using base directory:', base_directory
- print 'Checking:', start_dir
-
- if options.generate_temp_rules:
- deps_checker.results_formatter = results.TemporaryRulesFormatter()
- elif options.count_violations:
- deps_checker.results_formatter = results.CountViolationsFormatter()
-
- if options.json:
- deps_checker.results_formatter = results.JSONResultsFormatter(
- options.json, deps_checker.results_formatter)
-
- deps_checker.CheckDirectory(start_dir)
- return deps_checker.Report()
-
-
-if '__main__' == __name__:
- sys.exit(main())
« no previous file with comments | « tools/checkdeps/builddeps.py ('k') | tools/checkdeps/checkdeps_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698