簡體   English   中英

SVN預提交鈎子檢查樣式

[英]Svn pre-commit hook for checkstyle

這是我當前的checkstyle shell腳本。 如果我在TRUNK上提交但不在分支上提交,則可以正常工作。 我真的不明白為什么它不起作用。 有人可以幫幫我嗎?

#!/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

謝謝!

忠告:不要將此作為預先提交的腳本。

  • 任何預提交腳本都將阻止提交,直到完成為止。 如果我簽入了十幾個文件,此腳本運行需要多長時間? 當我第一次進入計算時,第二秒的響應時間被認為是可以接受的。 現在,如果您在幾秒鍾內沒有得到答復,人們會抱怨。
  • 如果checkstyle捕獲了一些不是問題的東西,或者開發人員寫的方式實際上比checkstyle堅持的應該更清楚,更容易理解,該怎么辦? 當您使用諸如checkstylefindbugs類的東西時,您必須了解您會得到一些誤報。

更好的方法是使用像Jenkins這樣的連續構建引擎。 可以將Jenkins設置為在每次提交時自動啟動構建。 詹金斯可以:

  • 自動存儲生成結果。 然后,您實際上可以直接從Jenkins釋放代碼以進行測試和為客戶服務。 畢竟,您知道您測試過的jar / ear / war文件與客戶將獲得的文件相同。
  • 自動運行各種測試,包括:
    • Checkstyle的
    • FindBugs的
    • Corbertura
    • PMD
    • JUnit的
    • 檢查內置警告
    • 還有幾十個
  • Jenkins將整個構建輸出,所有保存的工件以及所有測試保存在一個易於使用的易於使用的網頁中,任何用戶都可以使用。
  • Jenkins可以集成到各種問題跟蹤工具中,因此您可以看到Jenkins構建特定問題所涉及的內容。

您不必使用詹金斯。 哈德森仍然在那里。 CruiseControl也是如此,您可以在那里使用TeamCity,Bamboo和許多其他連續構建系統。 我喜歡Jenkins,因為開發非常活躍,而且設置非常簡單。 我花了30分鍾左右的時間下載並開始我的第一份工作。

我知道您問過您的預提交鈎子,但我不想聽起來像個推銷員(詹金斯是自由開放的源代碼,並且我與項目沒有任何聯系),但是像檢查checkstyle一樣復雜。提交前的鈎子正在請求麻煩。 使用連續構建服務器只是解決此問題的更好方法。

一個提示。

嘗試比較目錄結構,然后創建臨時目錄(刪除“ rm -Rf $ TMPDIR”)。

也許您在主干和分支之間有區別,例如:

中繼線:/tmp/12/code/file.java

分支:/tmp/br1/12/code/file.java

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM