当客户端推送到远程 git 存储库(裸)时,我想要一个钩子,它可以在传入的更改文件上自动运行 JSHint,并在 JSHint 返回错误时拒绝提交。我只关心确保 master 分支符合我们的 JSHint 配置。所以我有这个脚本:
#!/bin/bash
# --- Command line
refname="$1"
oldrev="$2"
newrev="$3"
branch=${refname#refs/heads/}
echo ${refname}
echo ${oldrev}
echo ${newrev}
echo ${branch}
if [ "$branch" == "master" ]
then
echo "Need to JSHint" >&2
exit 1
fi
# Not updating master
exit 0
我想我有两个问题:
- 如何获取推送中已更改的文件列表?
- 如何将这些文件传递给 JSHint?
我不相信这是完成任务的最佳方式。基本上,代码生成存储库中每个 JavaScript 文件的文件,然后分别调用每个 JavaScript 文件。额外的好处是它实际上使用了项目的 .jshintrc 文件(如果存在)。也在要点上 https://gist.github.com/2884935
有什么建议、指示、替代方案吗???
#!/bin/bash
# --- Command line
refname="$1"
oldrev="$2"
newrev="$3"
branch=${refname#refs/heads/}
# Make a temp directory for writing the .jshintrc file
TMP_DIR=`mktemp -d`
EXIT_CODE=0
# If commit was on the master branch
if [ "$branch" == "master" ]
then
# See if the git repo has a .jshintrc file
JSHINTRC=`git ls-tree --full-tree --name-only -r HEAD -- | egrep .jshintrc`
JSHINT="jshint"
if [ -n "$JSHINTRC" ]
then
# Create a path to a temp .jshintrc file
JSHINTRC_FILE="$TMP_DIR/`basename \"$JSHINTRC\"`"
# Write the repo file to the temp location
git cat-file blob HEAD:$JSHINTRC > $JSHINTRC_FILE
# Update the JSHint command to use the configuration file
JSHINT="$JSHINT --config=$JSHINTRC_TMP_DIR/$JSHINTRC"
fi
# Check all of the .js files
for FILE in `git ls-tree --full-tree --name-only -r ${newrev} -- | egrep *.js`; do
FILE_PATH=`dirname ${FILE}`
FULL_PATH=${TMP_DIR}/${FILE_PATH}
mkdir -p ${FULL_PATH}
git cat-file blob ${newrev}:${FILE} > "$TMP_DIR/$FILE"
${JSHINT} ${TMP_DIR}/${FILE} >&2
# Exit status of last command
EXIT_CODE=$((${EXIT_CODE} + $?))
if [[ $EXIT_CODE -ne 0 ]]
then
rm -rf ${TMP_DIR}
exit $EXIT_CODE
fi
done
rm -rf ${TMP_DIR}
fi
# Not updating master
exit 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)