也許有人發現, 中譯 svnbook 所在的 svn.ntcu.net 早就不見了. 沒關係, 還有 freebsd.sinica.edu.tw 這一台, 雖然早就沒有權限可以編輯. 但是... 為什麼前兩個月它也不見了...
昨天有人發現 (?) 了, 跑來問我, 就在某頻道講, 結果獲得廣大的回應 (感謝各位), 所以現在又有機器可以放了. 新的位址在 http://svn.stu.edu.tw/svnbook/.
這樣就會有點力氣想要更新它了.
其實以前 svn.ntcu.net 不見時就唉過了, 不過沒人理我. 反正當初也是某長輩無償提供擺放的機器, 有就有, 沒有就算了.
至於 freebsd.sinica.edu.tw, 嗯... 那台很久很久很久以前, 很神祕地我的目錄通通變成 owned by root, 完全沒辦法編輯自己目錄下的檔案. XD
所以... 再來照這篇文章來發願更新它吧. XDDDD
好久沒動這個模組了. 其實我只是想 mirror Ingy 的 repository, 只想用其中的 Sporx 而已啊.
Anyway, 昨天改了一下, 今天跑了一下, 今天再改一下, 已經可以直接 mirror Ingy's 回來. 目前還在跑 subversion's. 不過有將近 20k revisions, 還要很久.
S::M 本身的 test 不過, 問題很類似, 都是預期有 n 個 revision, 但是結果有 n+1 個.
我用手邊已經 mirror 的 svn, 跟用來測試的 svn_test, 發現了:
/svn/ svk log -v -r11085:11095 /svn/depot 11091 - 11586 ---------------------------------------------------------------------- r11091 (orig r11586): breser | 2004-10-23 08:13:43 +0800 已修改路徑: A /depot/tags/1.1.1 (來自 /depot/branches/1.1.x:11086) M /depot/tags/1.1.1/subversion M /depot/tags/1.1.1/subversion/include MM /depot/tags/1.1.1/subversion/include/svn_version.hTagging release 1.1.1 with svn_version.h matching tarball.
----------------------------------------------------------------------r236 (orig r235)
r237 (orig r237)/svn_test/
svk log -v -r11580:11590 /svn_test/depot
11587 - 11586
----------------------------------------------------------------------
r11587 (orig r11586): breser | 2004-10-23 08:13:43 +0800
已修改路徑:
A /depot/tags/1.1.1 (來自 /depot/branches/1.1.x:11582)
M /depot/tags/1.1.1/subversion
M /depot/tags/1.1.1/subversion/include
MM /depot/tags/1.1.1/subversion/include/svn_version.hTagging release 1.1.1 with svn_version.h matching tarball.
----------------------------------------------------------------------
然後我找了一個 rev 來對:
from /svn_test/ ---------------------------------------------------------------------- r237 (orig r236): xela | 2001-10-15 01:54:55 +0800 已修改路徑: M /depotfirst draft of native class implementation
----------------------------------------------------------------------plasma@plasmanb:~(0)> svk diff -r236:237 /svn_test/depot
Prototype mismatch: sub SVK::Util::resolve_alias: none vs ($) at /usr/local/lib/perl5/5.8.8/autouse.pm line 57.的屬性更動:
___________________________________________________________________
名稱:svm
from svn's
------------------------------------------------------------------------
r236 | xela | 2001-10-15 01:54:55 +0800 (一, 15 10 2001) | 1 linefirst draft of native class implementation
------------------------------------------------------------------------
嗯... 先記下來.
(看不懂? 我本來就只打算寫給自己看而已. XD)
前一篇 今天升級 Subverison 1.1.3 忘了寫上後續了.
為什麼會有
subversion/libsvn_wc/entries.c:669: (apr_err=130003) svn: XML 剖析器無法處理 'apsfilter' subversion/libsvn_subr/xml.c:364: (apr_err=130003) svn: Malformed XML: not well-formed (invalid token) at line 32
的問題呢? 原因很簡單, 在 /etc/apsfilter 這個目錄裡, 有一個目錄的檔名是 epsonp710. 但是它並不像表面上看起來那麼簡單, 因為它實際上是 epsonph^H710. 沒錯, 裡面夾雜了一個倒退鍵 ^H, 於是在 .svn/entries 這個檔案裡, 在檔名的部份就多了一個 XML parser 不認得的控制字元.
據 sussman 表示, 檔名中是不可以有控制字元的, 所以它本來就不應該出現在那裡. Subversion 目前沒有對它作檢查, 未來會把這個東西加進去. 也就是說, 包含控制字元的檔名會讓 Subversion 汪汪叫.
我怎麼解決這個問題? 因為我在 import /etc 的時候, 把目標路徑打錯了. 如果它是一個獨立的目錄的話, 直接丟 URL 讓 Subversion 進行檔案庫動作, 把它砍掉得了. 但是匯入進去的目錄裡面已經有檔案存在, 本來打算進行相反的合併, 把該修訂版所作的動作中和回來. 在這些動作都沒辦法進行的情況下, 只能把檔案庫 dump 出來, 把匯入的修訂版丟掉, 再重新建一個檔案庫 load 回來.
今天心血來潮, 要來作一件已經想了很久的事, 就是把 /etc 整個丟進 Subversion 裡.
svn import
跑完之後, 發現檔案庫路徑弄錯了, 打算把它取消掉. 先 checkout 成工作複本, 然後再 merge 回去, 結果得到以下的錯誤訊息:
subversion/libsvn_wc/entries.c:669: (apr_err=130003) svn: XML 剖析器無法處理 'apsfilter' subversion/libsvn_subr/xml.c:364: (apr_err=130003) svn: Malformed XML: not well-formed (invalid token) at line 32
我想, 大概是 1.1.1 太舊了吧. 1.1.3 都出來了, 只是 FreeBSD ports 一直都沒有更新. 好吧, 手動改一下 ports, 更新成 1.1.3. 不過在開始編之前, 先把 ldconfig -r 裡看到的舊的, 還存在 /usr/local/lib 下的 libaprutil 給砍掉.
砍掉之後, ldconfig -R 讓它重新掃一次. 開始編... 咦? 遇到這個錯誤:
cc: /usr/local/lib/libaprutil-0.so: No such file or directory
會不會是 Apache 2 也要跟著重編呢? 重編吧. 結果還是一樣.
會不會有舊的 apr-config 還存在著? find /usr/local -name apr-config -print
找一下, 發現 /usr/local/apr, 砍掉. 再編一次, 結果還是一樣.
奇怪? 為什麼呢?
努力尋找 ldconfig 的 manpage, ldconfig -r 怎麼看, 裡面的連結都是對的. 後來執行 ls -la /usr/local/lib/*apu* 一看, 還有幾個餘孽在裡面... 而且 symbolic link 還不對. 砍掉之後, 重編就沒問題了.
我推測 ldconfig 去掃瞄時, 只會紀錄 +x 的 .so 檔, 但是這幾個並沒有 +x, 所以 ldconfig 不會紀錄下來. 但是 cc 去連結時, 還是會認得, 於是就出問題了.
編好之後, 再執行 svn, 那個 XML 的問題還是在... 得再來想要怎麼去解決這個問題.
Subversion 0.35.1 is released. And this is the tarball of my private port for subversion:
http://freebsd.sinica.edu.tw/~plasma/subversion-ports.0.35.1.tar.gz
The main difference between FreeBSD's and mine is perl binding. Pass 'WITH_PERL=yes' to enable it.
And I'm building this port with www/apache2. If you have any problem compiling with devel/apr, please try to solve any problem yourself. And remember to send me a patch. :)
Subversion 0.35.0 已釋出. 小弟自行維護的 svn port tarball 的位置在
http://freebsd.sinica.edu.tw/~plasma/subversion-ports.0.35.0.tar.gz
請慢用.
Subversion 0.35.0 is released. And this is the tarball of my private port for subversion:
http://freebsd.sinica.edu.tw/~plasma/subversion-ports.0.35.0.tar.gz
The main difference between FreeBSD's and mine is perl binding. Pass 'WITH_PERL=yes' to enable it.
Subversion 0.34.0 已釋出. 小弟自行維護的 svn port tarball 的位置在
http://freebsd.sinica.edu.tw/~plasma/subversion-ports.0.34.0.tar.gz
請慢用.
Subversion 0.34.0 is released. And this is the tarball of my private port for subversion:
http://freebsd.sinica.edu.tw/~plasma/subversion-ports.0.34.0.tar.gz
The main difference between FreeBSD's and mine is perl binding. Pass 'WITH_PERL=yes' to enable it.
今天繼續與 svn 奮鬥.
由於架上 mod_dav_svn 後, repos 就不只自己的 svn 會存取, 所以要處理一下 repos 的檔案權限. 我的作法, 是先建立 svn 用戶與群組, 並且把 svn 用戶設為不可登入. 把 www 與我自己加入 svn 群組, SVN_ROOT 目錄裡的檔案目錄群組設為 svn, 並將檔案權限設為664, 目錄權限設為 775.
接下來要防止不當的 umask 重設 repos 的檔案. 首先先改 /usr/local/etc/rc.d/apache2.sh, 在執行其它程式前, 先設定 umask:
umask 002
接下來在 /etc/csh.cshrc 裡加上兩個 alias:
alias svn "umask 002; /usr/local/bin/svn" alias svnadmin "umask 002; /usr/local/bin/svnadmin"
大功告成.
下午都在把 apache1 換成 apache2, 花了不少時間, 其實最主要就是要裝上 svn 的網路伺服器, 這樣我可以從公司別台機器連回自己的 nb, 省去作成 tarball 再 co 過去的麻煩.
不過 apache2 裝起來, 再裝上 Subversion 遇到了一個問題:
/usr/libexec/ld-elf.so.1: /usr/local/lib/libaprutil-0.so.9: Undefined symbol "libiconv_open"
很明顯地, 與 Subversion 的中文紀錄送交訊息 是一樣的問題. 在 /usr/ports/www/apache2/Makefile 裡的 CONFIGURE_ARGS 裡再加上一行:
--with-iconv=${LOCALBASE}
然後重編 apache2 與 Subversion 就好了.
前幾天 Subversion 0.24.0 放出來, 結果我無法執行 export 命令. 在 irc 與 sussman 交談, 他完全沒有這種問題. 由於不太想把 repo 拿給別人測試, 所以就自己試著 debug. 學到了幾個指令, 趁著還記得時, 趕快寫下來, 以免下次還會用到.
1. gdb svn 2. break main 3. run export file://$SVN_ROOT/svn/trunk svn 4. break export.c:close_file 5. c 6. s 7. n 8. p *((struct file_baton*) file_baton) 9. p *((struct file_baton*) file_baton)->keywords_val
解說:
export file://$SVN_ROOT/svn/trunk svn為引數, 執行 svn.
這兩天有人問我, 裝 subversion 要 devel/libtool14 嗎?
NO. 前一篇的迴響已經有說了, svn 0.22.1 已修正這個問題, 所以 ports 裡的是正常的.
大概沒有特別說明的關係. 希望以上大大的 no 能明確地說明. :-)
這一版比較麻煩. Subversion 0.22 需要 libtool 1.4, 雖然有 devel/libtool14, 但是它是蓋過原先 libtool 1.3. 而且 這兩個看起來裝的是同一個檔案, 但是產生的結果不一樣......
因為不知道怎麼處理, 所以本版請手動處理. 首先先換到 libtool 1.4:
portupgrade -o devel/libtool14 -fv libtool
然後對 ports/devel/subversion 使用以下的 patch:
=================================================================== --- distinfo (revision 677) +++ distinfo (working copy) @@ -1 +1 @@ -MD5 (subversion-0.21.0.tar.gz) = b2ad91127fb652e764b750f4c0002528 +MD5 (subversion-0.22.0.tar.gz) = 13f00c5cca1e16b62fcd9dd6acc27641 Index: Makefile =================================================================== --- Makefile (revision 740) +++ Makefile (working copy) @@ -5,9 +5,9 @@ # $FreeBSD: ports/devel/subversion/Makefile,v 1.28 2003/05/02 18:23:08 bmah Exp $ PORTNAME= subversion -PORTVERSION= 0.21.0 +PORTVERSION= 0.22.0 CATEGORIES= devel -MASTER_SITES= http://subversion.tigris.org/files/documents/15/3712/ +MASTER_SITES= http://subversion.tigris.org/files/documents/15/4016/ MASTER_SITES+= ${MASTER_SITE_LOCAL} MASTER_SITE_SUBDIR= bmah
然後以
portupgrade -v subversion
更新. 安裝完了之後, 可以使用
portupgrade -o devel/libtool -fv libtool
把 libtool 換回來.
檢查修改過的程式是否有文法錯誤:
foreach f (`svn status | awk '{print $2}'`) perl -c $f |& grep -v OK end
以上使用 tcsh.
FreeBSD port for Subversion 0.20.1 is out. You could download it at here
The diff is sent to the maintainer of devel/subversion. Before use this port, you have to apply pr #50309 to upgrade apr to 0.92-alpha.
因為
08:21 <@plasmabal> jabbot: msg 08:21 <@jabbot> plasmabal: from gugod: 求求你, 做個 svn 0.2 package 吧 3_3
所以就有了這個 port .
請先刪掉 devel/apr 與 devel/subversion, 然後再把壓縮檔裡的內容解出來.
diff 已經送回給 maintainer 了. 看看什麼時候會送 ports 吧.
剛剛在升級 Subversion 0.20, 研究出如何讓 --encoding 也能使用中文來寫. 以下是研究步驟:
cd apr ./buildconf make all install cd ..
./buildconf env CONFIG_SHELL=/bin/sh CPPFLAGS="-I/usr/local/include" \ -LDFLAGS="-L/usr/local/lib" ./configure --prefix=/usr/local \ i386-portbld-freebsd4.7 --with-apr=../apr --with-expat=/usr/local \ --with-iconv=/usr/local make all install cd ..
rm -rf apr apr-util
./configure --with-ssl \ --with-berkeley-db=/usr/local/include/db4:/usr/local/lib \ --with-apr=/usr/local --with-apr-util=/usr/local make all install
來試驗看看.
plasma@plasmanb:~/tmp> svn mkdir file:///home/plasma/tmp/SVN/REPOS --encoding big5 -m "建立 REPOS"Committed revision 1.
plasma@plasmanb:~/tmp> svn log file:///home/plasma/tmp/SVN/REPOS
------------------------------------------------------------------------
rev 1: plasma | 2003-03-24 21:26:14 +0800 (Mon, 24 Mar 2003) | 1 line建立 REPOS
------------------------------------------------------------------------
大功告成!
另外, 我的 terminal 的 locale 設定是 zh_TW.Big5, 所以上述的 --encoding big-5 可以拿掉也沒有問題.
再補充, 我的平台是 FreeBSD, 在安裝前, 請記得安裝 textproc/expat2 與 converters/iconv 兩個 port.
最近很奇怪, 對 Subversion book 特別熱血.
Anyway, 剛剛把 ch1-ch3 都翻完了, 一些基本概念與日常常用命令己包含進去. 接下來先休息個兩天, 再繼續下去吧. 每天都太累也不好.
Subversion book 的中譯版在 http://freebsd.sinica.edu.tw/~plasma/svnbook/.
只要有進度, 我都會在告一段落後, 將它作成 html 送上來. 請逕自連上看看. 別再問我進度如何了, 好了就好了. :)
另, 我希望獨立完成它 (只是想證明自己也能獨立完成一件事), 所以目前先不考慮其它人的幫忙, 謝謝. :)