[英]PHP codesniffer (phpcs) - how to allow override when using as part of a svn pre-commit hook?
我們有一個PHP 5 Web應用程序,我們目前正在評估PHP CodeSniffer ,以便確定強制代碼標准是否可以提高代碼質量。
我們將subversion用於代碼存儲庫和部署基礎,並且我添加了SVN pre-commit鈎子,以確保所有提交的文件都沒有編碼標准的氣味。 該掛鈎在技術上是可行的,但會導致太多麻煩而無法實際使用:
鑒於我們今天無法重構整個代碼庫-有人知道我如何使用svn commit參數,該參數將告訴svn pre-commit鈎子不運行phpcs嗎?
也許還有另一種方法可以消除上述頭痛?
為什么要在預提交時運行它? 我已經使用PHPUnderControl和Hudson來自動化php“構建” ...基本上,他們運行一個ant / phing構建腳本,該腳本在每次提交(自動檢測到)后運行自動化測試(PHPUnit)和代碼質量掃描程序(包括PHPCS)。 。 因此它不會拒絕提交,但會向您希望構建失敗的任何人發送一封不錯的電子郵件,並列出原因(有問題的代碼的特定行)...
我們發現以下工作效果很好,平衡了獲取代碼而無需大驚小怪的需求,但是可以防止發布與我們的標准不一致的版本。
首先,我們對提交有一個“開放武器”政策:
然后,我們在暫存/發行版本上采取“緊握拳頭”政策:
所有這些都是通過使用phpcs(當然還有phpunit,phpdocumentor等)通過phing自動化的。
我認為ircmaxell
有一個很好的觀點-這種標准檢查應該在提交前的鈎子之外進行,例如在連續集成環境中或在緊要關頭,提交后的鈎子應該基於提供的信息而不是阻塞承諾!
考慮到這一點,我暫時決定使用選擇加入方法。 我配置了svn pre-commit鈎子,以在提交消息中查找關鍵字,如果找到則運行phpcs
。
在預提交的鈎子腳本中,例如/var/www/svn/repos/<reponame>/hooks/
;
#!/bin/sh
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
PHPCS=/usr/bin/scripts/phpcs-svn-pre-commit
if [[ `$SVNLOOK log -t $TXN $REPOS | tr "[:upper:]" "[:lower:]"` =~ "\[?standardcode\]?" ]]; then
# Run the PHP code sniffer
PHPCS_STRICT=`$PHPCS "$REPOS" -t "$TXN"`
if [[ $? -ne 0 ]]; then
echo "$PHPCS_STRICT" >>/dev/stderr
echo "*** Commit blocked - Please fix coding standard errors." >>/dev/stderr
exit 1
fi
fi
exit 0
筆記:
[standardcode]
,並且日志消息已轉換為小寫,以使關鍵字匹配不區分大小寫。 phpcs
提交鈎子( /usr/bin/scripts/phpcs-svn-pre-commit
)與phpcs
一起打包(至少在CentOS 5.5中)。 這個想法是,開發人員可以選擇將關鍵字作為一種榮譽徽章放入其提交消息中,但是如果不適合自己的提交,則不必強迫他們檢查其代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.