GIT кеширует pre-commit хуки

Из-за gJSLint извергает ошибки из-за отсутствия документации участника. Мы обновили наш хук pre-commit, поставленный перед долгим JavaScript. Редактирование включало в себя правило 220 gJSLint (игнорируйте отсутствующую документацию участника). Однако при выполнении коммита GIT по-прежнему жалуется, что JavaScript недействителен. Запуск gJSLint сам по себе не приводит к ошибкам.

gjslint --strict --disable = 5,6,110,220 app / pits / modules / api.js

Мы удалили подготовленные файлы, а затем безуспешно добавили их обратно в постановку.

GIT кеширует pre-commit ловушки?

Pre-Commit Hook

#!/bin/sh

files=$(git diff --cached --name-only --diff-filter=ACM | grep ".js$") if [ "$files" = "" ]; then 
    exit 0  fi

pass=true

echo "\nValidating JavaScript:\n"

for file in ${files}; do
    result=$(gjslint --strict --disable=5,6,110,220 ${file} | grep "${file} is OK")
    if [ "$result" != "" ]; then
        echo "\t\033[32mJSLint Passed: ${file}\033[0m"
    else
        echo "\t\033[31mJSLint Failed: ${file}\033[0m"
        pass=false
    fi done

echo "\nJavaScript validation complete\n"

if ! $pass; then
    echo "\033[41mCOMMIT FAILED:\033[0m Your commit contains files that should pass JSLint but do not. Please fix the JSLint errors and try again.\n          try: gjslint --strict --disable=5,6,110,220 file.js\n"
    exit 1 else
    echo "\033[42mCOMMIT SUCCEEDED\033[0m\n" fi

Результат git commit -m"...."

Проверка JavaScript:

Ошибка JSLint: app/pits/modules/api.js

Ошибка JSLint: app/pits/modules/State.js

Ошибка JSLint: app/pits/modules/table.js

Проверка JavaScript завершена

COMMIT FAILED: ваш коммит содержит файлы, которые должны пройти JSLint, но

              do not. Please fix the JSLint errors and try again.

              try: gjslint --strict --disable=5,6,110,220 file.js

Среда

Git версия 1.8.1.2

gjslint версия 2.3.13

версия lubuntu 13.04

1 ответ

Решение

Эта проблема не имела никакого отношения к GIT и была вызвана плохо написанным хуком предварительной фиксации.

#!/bin/sh

files=$(git diff --cached --name-only --diff-filter=ACM | grep ".js$")
if [ "$files" = "" ]; then
    exit 0
fi

pass=true

echo "\nValidating JavaScript:\n"

for file in ${files}; do
    eval "gjslint --strict --disable=5,6,110,220 ${file}"

    if [ $? -eq 0 ]; then
        echo "\t\033[32mJSLint Passed: ${file}\033[0m"
    else
        echo "\t\033[31mJSLint Failed: ${file}\033[0m"
        pass=false
    fi
done

echo "\nJavaScript validation complete\n"

if ! $pass; then
    echo "\033[41mCOMMIT FAILED:\033[0m Your commit contains files that should pass JSLint but do not. Please fix the JSLint errors and try again.\n          try: gjslint --strict --disable=5,6,110,220 file.js\n"
    exit 1
else
    echo "\033[42mCOMMIT SUCCEEDED\033[0m\n"
fi
Другие вопросы по тегам