2

これが私の現在のcheckstyleシェルスクリプトです。ブランチではなくトランクでコミットするとうまくいきます。うまくいかない理由がよくわかりません。誰か助けてくれませんか?

#!/bin/sh

###################################################
#
# Verify Checkstyle
#
###################################################

REPOS="$1"
TXN="$2"

SVNLOOK=/usr/bin/svnlook
JAVA=/opt/ibm/java2-i386-50/bin/java
CHECKSTYLE=/usr/local/checkstyle/checkstyle-all-5.1.jar
TMPDIR=/tmp/$TXN
REPORT=/tmp/$TXN/report
CHECKSTYLE_CONFIG=/usr/local/checkstyle/checkstyle.xml

CHANGED=`$SVNLOOK changed -t "$TXN" "$REPOS" | grep -v "^D" | awk '{print $2}'`
mkdir -p $TMPDIR
for LINE in $CHANGED ; do
    FILE=`echo $LINE | egrep -v Test\\.java$ | egrep -v \\/src\\/test\\/ | egrep -v \\/js\\/ext`
    if [ -n "$FILE" ] ; then
        DIRNAME=`dirname $FILE`
        mkdir -p $TMPDIR/$DIRNAME
        $SVNLOOK cat $REPOS --transaction $TXN $FILE > $TMPDIR/$FILE
    fi
done
$JAVA -jar $CHECKSTYLE -c $CHECKSTYLE_CONFIG -r $TMPDIR > $TMPDIR/tmpfile.checkstyle
X=$?
if [ $X -ne 0 ] ; then
    cat $TMPDIR/tmpfile.checkstyle > /dev/stderr
    rm -Rf $TMPDIR
    exit 1
fi
rm -Rf $TMPDIR

exit 0

ありがとう!

4

2 に答える 2

5

アドバイス: これをコミット前のスクリプトにしないでください。

  • コミット前のスクリプトは、完了するまでコミットを保留します。多数のファイルをチェックインした場合、このスクリプトの実行にはどのくらいの時間がかかりますか? 私が最初にコンピューティングを始めたとき、2 回目の応答時間は許容できると考えられていました。数秒以内に応答がなければ、人々は文句を言います。
  • が問題ではない何かをキャッチした場合、または開発者がそれを書いた方法が実際にそうあるべきだと主張checkstyleするよりも明確で理解しやすい場合はどうなりますか? またはのcheckstyleようなものを使用する場合、いくつかの誤検知が発生することを理解する必要があります。checkstylefindbugs

より良い方法は、Jenkinsのような継続的なビルド エンジンを使用することです。Jenkins は、コミットごとにビルドを自動的に開始するように設定できます。ジェンキンスは次のことができます。

  • ビルドの結果を自動的に保存します。その後、実際にコードを Jenkins から直接リリースして、テスト用およびクライアント用に使用できます。結局のところ、テストしたのと同じ jar/ear/war ファイルが、顧客が受け取るファイルと同じであることがわかっています。
  • 以下を含むさまざまなテストを自動的に実行します。
    • チェックスタイル
    • バグを見つける
    • コルベルトゥーラ
    • PMD
    • ドライ
    • JUnit
    • 構築された警告を確認する
    • そして、他の何十もの
  • Jenkins は、ビルド出力全体、保存されたすべてのアーティファクト、およびすべてのテストを、すべてのユーザーが利用できる見やすく見やすい Web ページに保存します。
  • Jenkins はさまざまな問題追跡ツールに統合できるため、Jenkins ビルドの特定の問題がどのようなものであったかを確認できます。

Jenkins を使用する必要はありません。ハドソンはまだです。CruiseControl も同様で、TeamCity、Bamboo、およびその他の多数の継続的なビルド システムを使用できます。Jenkins が好きなのは、開発が非常に活発で、セットアップが非常に簡単だからです。ダウンロードして最初のジョブを実行するのに約 30 分かかりました。初めて聞いたときです。

checkstyleあなたがpre -commit フックについて尋ねたことは知っています。私はセールスマンのように聞こえたくありません (Jenkins は無料でオープン ソースであり、私はプロジェクトとは何の関係もありません)。-commit フックがトラブルを求めています。継続的なビルド サーバーを使用することは、この問題を処理するためのより良い方法です。

于 2012-04-25T16:57:21.117 に答える
0

ヒント。

一時的に作成したディレクトリ構造を比較してみてください (「rm -Rf $TMPDIR」を削除します)。

おそらく、次のようなトランクとブランチの違いがあります。

トランク: /tmp/12/code/file.java

ブランチ: /tmp/br1/12/code/file.java

于 2012-04-25T12:55:04.530 に答える