diff options
author | Gil <mcg@google.com> | 2018-03-07 09:59:38 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-07 09:59:38 -0800 |
commit | b7750b588c1d7ae9ea3891a254a39de5d3b3c572 (patch) | |
tree | f90e211a858839ceb497e55b3edc475bf4b286f1 /scripts | |
parent | 5930ad2feebc6628cbaec89b8f6a6146ed6afe5d (diff) |
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
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/check_copyright.sh | 31 | ||||
-rwxr-xr-x | scripts/check_whitespace.sh | 33 | ||||
-rwxr-xr-x | scripts/lint.sh | 22 | ||||
-rwxr-xr-x | scripts/style.sh | 8 |
4 files changed, 89 insertions, 5 deletions
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 |