From b7750b588c1d7ae9ea3891a254a39de5d3b3c572 Mon Sep 17 00:00:00 2001 From: Gil Date: Wed, 7 Mar 2018 09:59:38 -0800 Subject: Speed up source checks in Travis (#885) * Factor out a whitespace checking script * Factor out a copyright checking script * Rewrite lint.sh to honor revision ranges * Only restyle files that are part of the PR * Run C++ lint before builds to fail faster * Git grep doesn't operate on revision ranges * style.sh accepts clang-format 6 or 7 --- scripts/check_copyright.sh | 31 +++++++++++++++++++++++++++++++ scripts/check_whitespace.sh | 33 +++++++++++++++++++++++++++++++++ scripts/lint.sh | 22 +++++++++++++++++++--- scripts/style.sh | 8 ++++++-- 4 files changed, 89 insertions(+), 5 deletions(-) create mode 100755 scripts/check_copyright.sh create mode 100755 scripts/check_whitespace.sh (limited to 'scripts') diff --git a/scripts/check_copyright.sh b/scripts/check_copyright.sh new file mode 100755 index 0000000..14857d3 --- /dev/null +++ b/scripts/check_copyright.sh @@ -0,0 +1,31 @@ +# Copyright 2018 Google +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Check source files for copyright notices + +options=( + -E # Use extended regexps + -I # Exclude binary files + -L # Show files that don't have a match + 'Copyright [0-9]{4}.*Google' +) + +git grep "${options[@]}" \ + -- '*.'{c,cc,h,m,mm,sh,swift} \ + ':(exclude)**/third_party/**' +if [[ $? == 0 ]]; then + echo "ERROR: Missing copyright notices in the files above. Please fix." + exit 1 +fi + diff --git a/scripts/check_whitespace.sh b/scripts/check_whitespace.sh new file mode 100755 index 0000000..a38d4ce --- /dev/null +++ b/scripts/check_whitespace.sh @@ -0,0 +1,33 @@ +# Copyright 2018 Google +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Fail on an trailing whitespace characters, excluding +# * binary files (-I) +# * nanopb-generated files +# +# Note: specifying revisions we care about makes this go slower than just +# grepping through the whole repo. +options=( + -n # show line numbers + -I # exclude binary files + ' $' +) + +git grep "${options[@]}" \ + -- ':(exclude)Firestore/Protos/nanopb' +if [[ $? == 0 ]]; then + echo "ERROR: Trailing whitespace found in the files above. Please fix." + exit 1 +fi + diff --git a/scripts/lint.sh b/scripts/lint.sh index 442f7f8..d0f82b1 100755 --- a/scripts/lint.sh +++ b/scripts/lint.sh @@ -12,7 +12,23 @@ # See the License for the specific language governing permissions and # limitations under the License. -find Firestore/core \( \ - -name \*.h -o \ - -name \*.cc \) -print0 \ +# Lints C++ files for conformance with the Google C++ style guide + +options=( + -z # \0 terminate output +) + +if [[ $# -gt 0 ]]; then + # Interpret any command-line argument as a revision range + command=(git diff --name-only) + options+=("$@") + +else + # Default to operating on all files that match the pattern + command=(git ls-files) +fi + + +"${command[@]}" "${options[@]}" \ + -- 'Firestore/core/**/*.'{h,cc} \ | xargs -0 python scripts/cpplint.py --quiet diff --git a/scripts/style.sh b/scripts/style.sh index e2f8207..317c8c6 100755 --- a/scripts/style.sh +++ b/scripts/style.sh @@ -23,8 +23,12 @@ system=$(uname -s) -if [[ $(clang-format --version) != *"version 6"* ]]; then - echo "Please upgrade to clang-format version 6." +version=$(clang-format --version) +version="${version/*version /}" +version="${version/.*/}" +if [[ "$version" != 6 && "$version" != 7 ]]; then + # Allow an older clang-format to accommodate Travis version skew. + echo "Please upgrade to clang-format version 7." echo "If it's installed via homebrew you can run: brew upgrade clang-format" exit 1 fi -- cgit v1.2.3