mercurial-server 運作流程

執行新版 1.1  後, 在 push 時會出現以下的錯誤訊息:
remote: error: changegroup.aaaaa_servelog hook raised an exception: 'str' object has no attribute 'format'
弄清楚 mercurial-server 執行過程後, 發現這是因為 1.1 版用 python 2.6 的語法 (str.format) 造成的,  我是用 python 2.5。修改 /usr/local/share/mercurial-server/mercurialserver/servelog.py 去掉 format 和 json 相關的程式就好了。若不修正的話, /var/lib/mercurial-server/repos/REPO/.hg/mercurial-server.log 不會存有操作記錄。

解決問題後, 順便記一下 mercurial-server 的運作流程:
  1. ssh -> /var/lib/mercurial-server/.ssh/authorized_keys
  2. authorized_keys 裡記錄:
    no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding,command="/usr/local/share/mercurial-server/hg-ssh KEY_FILE SSH_PUBLIC_KEY"
    藉由這裡的設定會啟動 hg-ssh 處理透過 ssh 來的指令。 
  3. hg-ssh 是個 python script, 會載入 package /usr/local/share/mercurial-server/mercurialserver/ 下的 modules 來完成指令
  4. mercurialserver.config 載入 /var/lib/mercurial-server/.mercurial-server
  5. /var/lib/mercurial-server/.mercurial-server 讀入權限設定、hg hooks 等
從 hg hooks 設定 (/etc/mercurial-server/remote-hgrc.d/logging.rc) 找到這行
changegroup.aaaaa_servelog = python:mercurialserver.servelog.hook
再由此配合 hg-ssh 找到 /usr/local/share/mercurial-server/mercurialserver/servelog.py, 就解決問題啦。

留言

這個網誌中的熱門文章

(C/C++ ) 如何在 Linux 上使用自行編譯的第三方函式庫

熟悉系統工具好處多多

virtualbox 使用 USB 裝置