SVN hook scripts如何debug

最近準備調整一些舊程式,於是在Subversion上新增四個版本庫(repository),並設定了post-commit這個hook。當commit程式時,自動做到以下動作
  1. 程式update到 /codepath 這目錄
  2. 將目錄 /codepath ,同步到另一台主機
這四個版本庫的hook設定可說是完全一樣(程式路徑當然不同)。沒想到,居然遇到一個奇怪的狀況。這四個版本庫中,兩個hook完全如預期的正常運作。另外兩個,雖然會做第二步驟的同步,第一步驟的update卻沒執行。

重新查看一遍所有設定,確認除了目錄不同,其他設定都一樣。增加了SVN的log來追查問題,看來hook也有執行。到底發生了什麼問題?真是令人百思不得其解。

最後,同事使用了一種語法去取得錯誤的資訊來debug,終於找到了問題。特別記錄一下…

他於hook中,使用 2>&1 。將shell script的執行結果,無論是成功、或失敗的訊息,都導向指定的log中。範例如下…
/usr/local/bin/svn update /codepath > /tmp/hook_test.log 2>&1
/path/synccode.sh
看到錯誤的log,就知道問題所在。原來,有問題的那兩個版本庫,裡面含有中文檔名、或中文目錄名。這些檔案是採用big5編碼。因此,調整如下就恢復正常了。
export LC_CTYPE="zh_TW.Big5"
/usr/local/bin/svn update /codepath > /tmp/hook_test.log 2>&1
/path/synccode.sh

留言