From 47db78adfa5e89f13a1fe9bfd5bc78e5624958f3 Mon Sep 17 00:00:00 2001 From: tabraiz Date: Mon, 25 Mar 2024 05:19:25 +0530 Subject: [PATCH] add a push hook as well Change-Id: Iac0df09d415511b0034245330bf3c29eb18e70b2 --- setup-hooks.sh | 36 +++++++++++++++++--------- tools/git-hooks/pre-push | 56 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 12 deletions(-) create mode 100644 tools/git-hooks/pre-push diff --git a/setup-hooks.sh b/setup-hooks.sh index 1bc68b00a50..152ae6c9fd3 100755 --- a/setup-hooks.sh +++ b/setup-hooks.sh @@ -1,19 +1,31 @@ #!/bin/bash -# Source path of the precommit hook -SOURCE_HOOK="tools/git-hooks/pre-commit" +# Function to install a git hook +install_hook() { + local hook_name=$1 -# Destination path of the pre-commit hook -DEST_HOOK=".git/hooks/pre-commit" + # Source and destination paths + local source_hook="tools/git-hooks/${hook_name}" + local dest_hook=".git/hooks/${hook_name}" -# Copy the precommit hook to .git/hooks directory -cp "$SOURCE_HOOK" "$DEST_HOOK" + # Copy the hook and make it executable + if [[ -e "${source_hook}" ]]; then + cp "${source_hook}" "${dest_hook}" && chmod +x "${dest_hook}" + echo "${hook_name} hook installed successfully." + else + echo "Error: The hook '${source_hook}' does not exist." + exit 1 + fi +} -# Make the pre-commit hook executable -chmod +x "$DEST_HOOK" +# Select the hook to install based on argument or use default (pre-commit) +hook_to_install=${1:-pre-commit} -# Install ESLint and related dependencies -npm install eslint -g +# Install the selected hook +install_hook "${hook_to_install}" -echo "ESLint and related dependencies installed." -echo "Pre-commit hook copied and made executable successfully!" +# Install ESLint and related dependencies globally if pre-commit is the selected hook +if ! npm list -g eslint --depth=0 >/dev/null 2>&1; then + npm install eslint -g + echo "ESLint and related dependencies installed." +fi diff --git a/tools/git-hooks/pre-push b/tools/git-hooks/pre-push new file mode 100644 index 00000000000..78f01327479 --- /dev/null +++ b/tools/git-hooks/pre-push @@ -0,0 +1,56 @@ +#!/bin/bash +# Licensed to Cloudera, Inc. under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. Cloudera, Inc. licenses this file +# to you 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. +# + +set -e +ERRORS=false + +COMMITS=$(git log @{u}..HEAD --pretty=format:%h) + +for COMMIT in $COMMITS; do + FILES_IN_COMMIT=$(git diff-tree --no-commit-id --name-only -r $COMMIT) + for FILE in $FILES_IN_COMMIT; do + if [[ "$FILE" =~ ^.+(py)$ ]]; then + if [ "grep 'distinct()' $FILE" ]; then # HUE-3191: Check if distinct() exists in any Python files + ERRORS=true + echo -e "[WARNING] $FILE: The file contains distinct() which case cause Oracle to fail if the object contains a TextField (CLOB). Ensure that you use defer() on any TextFields in the query or avoid distinct().\n" + fi + + if [ "grep 'pdb.set_trace()' $FILE" ]; then + ERRORS=true + echo -e "[ERROR] $FILE: Found pdb.set_trace() debug statements in file.\n" + fi + elif [[ "$FILE" =~ ^.+(js|jsx|ts|tsx)$ ]]; then + FOLDERS_PATTERN="^(desktop/core/src/desktop/js|tools/sql-docs|tools/jison)/" + echo "Running ESLint for $FILE..." + if [[ "$FILE" =~ $FOLDERS_PATTERN ]]; then # Check if file is inside one of the desired folders + eslint "$FILE" # Run ESLint for JavaScript/JSX files + if [ $? -ne 0 ]; then + ERRORS=true + echo -e "[ERROR] ESLint found issues in $FILE.\n" + fi + fi + fi + done +done + +if $ERRORS; then + echo -e "To ignore these warnings, commit with --no-verify\n" + exit 1 +fi + +exit