我要运行JSLint之前提交到一个善变的,或者混帐回购协议完成。

我想要这个作为自动步骤设置的,而不是依靠开发人员(主要是我)记住跑JSLint之前。我正常运行JSLint同时发展,但是要指定一个合同JS文件,他们通过JSLint前正在致力于回购。

为刺客, 这页 阐明了precommit法,但唯一的变量,似乎可用的parent1和parent2集Id参与的承诺。我真正想要的是一个列表的文件名是涉及与提交,以便使我可以那么选择的.js文件和运行jslint过他们。

类似的问题需导, 默认的信息可作为一部分的precommit脚本似乎限制。

什么可能的工作是打电话汞状态过去状态的一部分precommit脚本,分析这一输出到发现JS文件,然后做的工作的方式。我是希望的东西更容易不过,我不知道如果呼叫状态的一部分precommit钩反映正确信息。例如在Git如果变化的文件没有被加入,但从初犯使用,将该文件显示,在正确的部分内地位输出的承诺?

更新:我得到了什么工作,也是可见的,在这里: http://github.com/jrburke/dvcs_jslint/

有帮助吗?

解决方案

有关GIT中,有在的.git /钩目录的例子。如果你只需要为JSLint的文件名,你可以使用git diff --name-only,这在我的例子中会列出文件,从目前HEAD不同的名字。

其他提示

以下是一个变化的@Bitbieger文件解决方案,适用 Node.js 和一个当地复制的 节点-jslint (即你需要 npm install jslint 在根库目录)。

此外,该脚本:

  • 运行jslint。html。json文件以及作为。js
  • 只运行jslint过的文件已经加入,复制或修改。这可以防止jslint从错的文件已经重新命名或删除。
  • 复制任何jslint错误的用户看到
  • 使用 --indent 4 --white true jslint选项,以确保源代码的一致性

得到它的工作复制下来 .git/hooks/pre-commit 不要忘记 chmod +x .git/hooks/pre-commit

# Pre-commit hook passing files through jslint
#
# This ensures that all js, html and json files are valid and conform
# to expectations.

ROOT_DIR=$(git rev-parse --show-toplevel)
JSLINT="${ROOT_DIR}/node_modules/.bin/jslint --indent 4 --white true"

for file in $(git diff-index --name-only --diff-filter=ACM --cached HEAD -- | grep -P '\.((js)|(html)|(json))$'); do
    if node $JSLINT $file 2>&1 | grep 'No errors found' ; then
        echo "jslint passed ${file}"
        exit 0
    else
        node $JSLINT $file
        exit 1
    fi  
done

的JSLint用的SpiderMonkey

for js in $(git diff-index --name-only --cached HEAD -- | grep '\.js$'); do
    if jslint.sh $js 2>&1 | grep 'Lint at line' ; then
        echo $js
        exit 1
    else
        echo "js files validated"
        exit 0
    fi  
done
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top