Кеширует ли GIT перехватчики перед фиксацией

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

gjslint --strict --disable = 5,6,110,220 приложение / пит / модули / api.js

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

Кеширует ли 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
    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: приложение / ямы / модули / api.js

Ошибка JSLint: приложение / ямы / модули / State.js

Ошибка JSLint: приложение / ямы / модули / 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


person Ben Crowhurst    schedule 24.01.2014    source источник
comment
То, как вы проверяете gjslint ошибки, кажется хакерским. Разве вы не можете просто проверить возвращаемое значение вместо вывода вывода? Вы также можете распечатать вывод, чтобы выполнить некоторую отладку.   -  person pmr    schedule 24.01.2014
comment
Согласен, это было бы ценным улучшением.   -  person Ben Crowhurst    schedule 24.01.2014
comment
Ответ на предмет-вопрос - нет; но ваш хук предварительной фиксации содержит различные незначительные ошибки, помимо проблемы , отмеченной pmr. Подробнее см. проверьте, есть ли у моего коммита «import pdb» в emacs / git?.   -  person torek    schedule 24.01.2014


Ответы (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
person Ben Crowhurst    schedule 24.01.2014