Skip to content

Bugfix/lint infrastructure improvements #648

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions scripts/cpplint.py
Original file line number Diff line number Diff line change
Expand Up @@ -1145,6 +1145,7 @@ def RepositoryName(self):
os.path.exists(os.path.join(current_dir, ".hg")) or
os.path.exists(os.path.join(current_dir, ".svn"))):
root_dir = current_dir
break;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How come this break is required?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because we want to find the git repository immediately containing the working directory, not the one closest to root. Otherwise this doesn't match up with the folder used by the git diff.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK that makes sense.

current_dir = os.path.dirname(current_dir)

if (os.path.exists(os.path.join(root_dir, ".git")) or
Expand Down
19 changes: 10 additions & 9 deletions scripts/filter_lint_by_diff.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
print >>sys.stderr, "Usage: filter_lint_by_diff.py diff.patch repository_root_directory < cpplint_warnings.txt"
sys.exit(1)

added_lines = set()
repository_root = sys.argv[2]

diff = unidiff.PatchSet.from_filename(sys.argv[1])
for diff_file in diff:
# Create a set of all the files and the specific lines within that file that are in the diff
added_lines = set()
for diff_file in unidiff.PatchSet.from_filename(sys.argv[1]):
filename = diff_file.target_file
# Skip files deleted in the tip (b side of the diff):
if filename == "/dev/null":
Expand All @@ -25,11 +25,12 @@
if diff_line.line_type == "+":
added_lines.add((filename, diff_line.target_line_no))

for l in sys.stdin:
bits = l.split(":")
if len(bits) < 3:
# Print the lines that are in the set
for line in sys.stdin:
line_parts = line.split(":")
if len(line_parts) < 3:
continue
filename = os.path.join(repository_root, bits[0])
linenum = int(bits[1])
filename = os.path.join(repository_root, line_parts[0])
linenum = int(line_parts[1])
if (filename, linenum) in added_lines:
sys.stdout.write(l)
sys.stdout.write(line)
11 changes: 9 additions & 2 deletions scripts/run_lint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
set -e

script_folder=`dirname $0`
absolute_repository_root=`readlink -f $script_folder/..`
absolute_repository_root=`git rev-parse --show-toplevel`

if [[ "$#" -gt 2 ]]
then
Expand All @@ -20,6 +20,13 @@ then
exit 1
fi

if ! [[ -e $script_folder/filter_lint_by_diff.py ]]
then
echo "Lint filter script could not be found in the $script_folder directory"
echo "Ensure filter_lint_by_diff.py is inside the $script_folder directory then run again"
exit 1
fi

if [[ "$#" -gt 0 ]]
then
git_start=$1
Expand Down Expand Up @@ -62,7 +69,7 @@ for file in $diff_files; do

# Run the linting script and filter:
# The errors from the linter go to STDERR so must be redirected to STDOUT
result=`$script_folder/cpplint.py $file 2>&1 | $script_folder/filter_lint_by_diff.py $diff_file $absolute_repository_root`
result=`$script_folder/cpplint.py $file 2>&1 >/dev/null | $script_folder/filter_lint_by_diff.py $diff_file $absolute_repository_root`

# Providing some errors were relevant we print them out
if [ "$result" ]
Expand Down