From b144511a92a97473079217b142ec7cd3156692d5 Mon Sep 17 00:00:00 2001 From: Qian Sun Date: Fri, 6 Jan 2017 15:55:19 -0800 Subject: [PATCH 1/2] Add pre-commit script. --- script/pre-commit | 81 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100755 script/pre-commit diff --git a/script/pre-commit b/script/pre-commit new file mode 100755 index 00000000000..3a03e1870c6 --- /dev/null +++ b/script/pre-commit @@ -0,0 +1,81 @@ +#!/bin/bash +# +# Copyright (C) Extensible Service Proxy Authors +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +################################################################################ +# + +ROOT="$(git rev-parse --show-toplevel)" +SKIP="$(git config --bool hooks.clang-format.skip)" + +if [[ "${SKIP}" == "true" ]]; then + echo "Skipping clang-format since it's disabled." + exit 0 +fi + +CLANG_DIRECTORY="${HOME}/clang" +CLANG_FORMAT="${CLANG_DIRECTORY}/bin/clang-format" +if [[ ! -x "${CLANG_FORMAT}" ]]; then + CLANG_FORMAT="$(command -v clang-format)" +fi + +if [[ ! -x "${CLANG_FORMAT}" ]]; then + echo "Skipping clang-format: " \ + "\"${CLANG_FORMAT}\" doesn't exists or not executable" + exit 0 +fi + +CLANG_FORMAT_VERSION="$(${CLANG_FORMAT} -version | cut -d ' ' -f 3)" +CLANG_FORMAT_VERSION_REQUIRED="3.8.0" +if ! [[ "${CLANG_FORMAT_VERSION}" =~ "${CLANG_FORMAT_VERSION_REQUIRED}" ]]; then + echo "Skipping: clang-format ${CLANG_FORMAT_VERSION_REQUIRED} required." + exit 0 +fi + +DIRTY_FILES=($(git diff --name-only | grep -E '\.(h|c|cc|proto)$')) +if [[ "${#DIRTY_FILES}" -ne 0 ]]; then + echo "Found dirty files: ${DIRTY_FILES[@]}" + echo "stash or add them before commit." + exit 1 +fi + +SOURCE_FILES=($(git ls-files | grep -E '\.(h|c|cc|proto)$')) + +if [[ "${#SOURCE_FILES}" -ne 0 ]]; then + pushd "${ROOT}" > /dev/null + "${CLANG_FORMAT}" -style=Google -i "${SOURCE_FILES[@]}" + git add "${SOURCE_FILES[@]}" + echo "Formatted all source codes" + popd > /dev/null +else + echo "No source files." +fi + +BUILDIFIER="$(which buildifier)" +if [[ -x "${BUILDIFIER}" ]]; then + ${BUILDIFIER} -showlog -mode=check $(find . -iname BUILD -type f) +else + echo "Buildifier does not exist" +fi From de0297b18438a4750ad081919dedd1358f06f66c Mon Sep 17 00:00:00 2001 From: Qian Sun Date: Fri, 6 Jan 2017 16:01:08 -0800 Subject: [PATCH 2/2] Update copyright header. --- script/pre-commit | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/script/pre-commit b/script/pre-commit index 3a03e1870c6..e66cb361797 100755 --- a/script/pre-commit +++ b/script/pre-commit @@ -1,28 +1,18 @@ #!/bin/bash # -# Copyright (C) Extensible Service Proxy Authors -# All rights reserved. +# Copyright 2016 Google Inc. All Rights Reserved. # -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. +# 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 # -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -# SUCH DAMAGE. +# 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. # ################################################################################ #