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 的運作流程:
- ssh -> /var/lib/mercurial-server/.ssh/authorized_keys
- 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 來的指令。 - hg-ssh 是個 python script, 會載入 package /usr/local/share/mercurial-server/mercurialserver/ 下的 modules 來完成指令
- mercurialserver.config 載入 /var/lib/mercurial-server/.mercurial-server
- /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, 就解決問題啦。
沒有留言:
張貼留言