2

クライアントがリモートのgitリポジトリ(ベア)にプッシュするときに、着信する変更されたファイルに対してJSHintを自動的に実行し、JSHintがエラーを返した場合にコミットを拒否するフックが必要です。マスターブランチが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

私は2つの質問があると思います:

  1. プッシュで変更されたファイルのリストを取得するにはどうすればよいですか?
  2. これらのファイルをJSHintに渡すにはどうすればよいですか?
4

1 に答える 1

4

私はこれがタスクを達成するための最良の方法であるとは確信していません。基本的に、コードはリポジトリ内の各JavaScriptファイルのファイルを生成し、それぞれに対してJSHintを個別に呼び出します。ボーナスとして、プロジェクトの.jshintrcファイルが存在する場合は実際に使用します。要旨にも

任意の提案、ポインタ、代替案???

#!/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
于 2012-06-06T22:16:37.953 に答える