2008年6月1日 星期日

[軟體] 如何在 Windows 上安裝版本追蹤系統 -- Trac 0.11 (使用 Python 2.5)

你希望你的版本控制軟體, 管理你的程式碼像下面這樣, 用瀏覽器自由的瀏覽各個歷史版本紀錄的 source code 嗎?

snap003

這一切都發生在程式出錯時 ...

寫 DirectShow Filter 有時候真的很討厭, 不小心整個程式就卡住不會動了. 而自己還搞不清楚到底改了哪些東西.

這時還得向 svn server 翻舊程式出來比較, 這操作手續還挺麻煩的.

如果你有安裝 Trac, 那麼他的 browse source 功能就派上用場了. 不用自己下指令到 svn 把以前的 code 吐出來, 只要用瀏覽器查一下版本間的差別就可以了.

雖然我們依然可以用那隻[烏龜]做到相同的效果, 可是用瀏覽器查閱各版本 source 就是方便.

接下來, 看看本文內容大綱:

Trac

首先, 你需要先使用 SubVersion 管理你的專案.
如果你還不懂沒關係, 很簡單, 安裝版本控制軟體 svn 不會超過 5 個步驟, 但會為你帶來巨大的好處. 請參閱我過去的文章,

1. [程式設計] 為你的程式加上版本控制 -- SVN

2. [程式設計] 如何建立一個 branch

你就知道有多簡單了.

現在我們來看看 Trac 如何地把 svn 的專案管理, 推向使用 Web 介面以及更好用的境界.

下載軟體工具 (別擔心, 全部只是下載與安裝兩個動作, 不會問東問西的)

Step 1: Python: ActivePython 2.5 (這個要先安裝)

Step 2: 其他工具 (一次下載)

各項工具原始網址:

1. 設定工具: setuptools-0.6c7.win32-py2.5.exe
2. 語法剖析工具: Genshi-0.4.4.win32.exe
3. Trac 主程式: Trac-0.11b2.win32.exe
4. 資料庫介面: pysqlite-2.4.0.win32-py2.5.exe
5.
最簡單的資料庫: sqlite-3_5_9.zip (選 Precompiled Binaries For Windows)
:只是解開一個檔 (sqlite3.exe) 而已, 放到 Pyton2.5\Scripts 裡面
: sqlite-3_6_17.zip 測試過 ok!

6. 版本控制工具介面: svn-python-1.4.6.win32-py2.5.exe

------------------------------------------------------------------------------

版本號碼必須一致
注意:
因為我使用的是 svn-win32-1.4.6.zip, 所以我下載的是 svn-python-1.4.6.
(svn-win32-1.5.3.zip 與 svn-python-1.5.3 測試過了, 沒問題)

版本控制工具介面: svn-python-1.4.6.win32-py2.5.exe 必須跟你的 svn server 版本號碼
相同, 否則會出現下面的錯誤

SubversionException: ("Expected FS format '2'; found format '3'", 160043)

------------------------------------------------------------------------------

* Html模版工具: (注意: Trac 將在 0.11 版以後, 不使用 Clearsilver [1] )


開始安裝 Trac

下載後, 先排好準備一個一個安裝

snap003 安裝後, 如右圖


->
snap003

設定 Trac ( 3 steps 完成)

Step 1: 先設定 Path 到 C:\Python25\Scripts

Step 2: 建立你自己的 Trac Environment 根目錄位置目錄. (ex: c:\trac)

mkdir trac

cd c:\trac

Step 3: 下指令建立 Trac 專案

C:\trac>trac-admin trac001 initenv

(你也可以下 trac-admin-script.py trac001 initenv)

其中 trac001 對應到的是專案根目錄名稱. 看下面的圖你就明白了.

snap003

你看到的樣子, 應該如下所示

snap003

其中

* Project Name: 是你的專案名稱 (可以是中文)
* Database connection string :
直接按 Enter 即可
* Repository type: 直接按 Enter
* Path to repository: 這裡指向你的 svn repository 絕對路徑位置.
例如: 我的 EZLearn 語言學習機 svn 位置是 E:\00_svn_repository_root \
EZLearn_svnRoot.

那麼 Path to repository 的設定就是這個位置.

好了, 我們想先看看這東西到底會不會動.

首先, 你會在 c:\trac\ 目錄下看到建立的專案目錄

snap003

測試

設定好就可以先啟動 Trac 看看有沒有問題

tracd --port 8000 c:\trac\trac001

開啟瀏覽器: http://localhost:8000/trac001

如果你看到的畫面, 長的像下面一樣, 那表示你安裝成功了.

snap003

  • 限制一定要使用 local host, 以防止網路上任何人存取你的資料, 你可以用下面的指令
    tracd --hostname=localhost -p 8080 c:\trac\trac001
  • 若你有多個專案要管理, 則下面指令可以幫助你 .
    tracd -p 8080 /path/to/project1 /path/to/project2

  • 離開 server
    直接按 Ctrl + C 即可

如果你現在按 login 的話, 會出現
Trac Error
Authentication information not available. 的字樣.

這是告訴你, 啟動 tracd 時, 必須要先設定權限.[2]

設定權限

如果你使用的是 Apache 那直接使用 htdigest 指令即可. 但是我不想裝 Apache, 只想讓我的系統乾乾淨淨的執行, 那怎麼辦呢?

詳細作法如下:

Step 1: 先把下面產生 password 的程式存成 trac-digest.py , 然後設定一下環境變數 Path . (通常為了方便管理, 所以我就直接把 trac-digest.py 放到 C:\Python25\Scripts 裡面)

from optparse import OptionParser
import md5

# build the options
usage = "usage: %prog [options]"
parser = OptionParser(usage=usage)
parser.add_option("-u", "--username",action="store", dest="username", type = "string",
help="the username for whom to generate a password")
parser.add_option("-p", "--password",action="store", dest="password", type = "string",
help="the password to use")
(options, args) = parser.parse_args()

# check options
if (options.username is None) or (options.password is None):
parser.error("You must supply both the username and password")

# Generate the string to enter into the htdigest file
realm = 'trac'
kd = lambda x: md5.md5(':'.join(x)).hexdigest()
print ':'.join((options.username, realm, kd([options.username, realm, options.password])))





Step 2: 產生 passwd


trac-digest.py -u 你的名稱 -p 你的密碼 >> c:\digest.txt


例如:


trac-digest.py -u jing -p 密碼 >> c:\digest.txt




Step 3
: 啟動 trac 系統


tracd --port 8000 --auth=專案名稱,c:\digest.txt,trac
專案所在絕對路徑



例如:

tracd --port 8000 --auth=trac001,c:\digest.txt,trac
C:\trac\trac001


現在你按 login 就會出現, 正常的登入畫面了.

snap003





如何管理 Trac



* 取消任何匿名登入



指令: trac-admin.py 你的trac 專案絕對位置 permission remove anonymous *



例如: trac-admin.py c:\trac\trac001 permission remove anonymous *





* 如何加入一個新的使用者 (2 steps, only)



Step 1: 建立 user 與 passwd 指令




trac-digest.py -u admin -p 密碼 >> c:\digest.txt




Step 2: 指定權限




C:\trac>trac-admin c:\trac\trac001 permission add admin TRAC_ADMIN




建立管理者.

(即新增一個使用者 admin 讓他擁有 TRAC_ADMIN 權限)





* 利用 Web 介面管理使用者 - 設定群組, 修改權限 (2 steps)



Step 1: 修改 /你的 trac 專案目錄/conf/trac.ini, 增加下面的條列.



[components]

webadmin.* = enabled



Step 2: 完成.



在新的 Trac 0.11 版中, 已經內定 Web 管理介面 (WebAdmin) 了. 所以直接用 admin login 進去. 你會看到 Admin 標籤.



snap003



選擇 Permissions



snap003



接下來, 你可以自由的指定權限給某一個使用者.



snap003



你還可以建立與管理群組



snap003





中文顯示的問題 (2 steps)



因為 trac 專案內部使用的是 iso-8859-15 顯示非 Unicode 字元, 所以當你的程式碼檔案不是使用 Unicode 編碼方式存檔時, 就會遇到亂碼的問題.



<sol> 很簡單, 以台灣來說, 中文大都用 big5 編碼格式, 所以只要在 trac.ini 中設定一下即可.



Step 1: 把 /trac 專案路徑/conf/trac.ini 打開



Step 2:



[trac]

default_charset = iso-8859-15



換成



default_charset = big5



Step 3: 完成 (別忘了重新啟動 tracd 喔) ^_^





你看看, 中文顯示不就來了嗎?



snap003





Upgrade problem :



如果你安裝新的版本出現 pkg_resources.DistributionNotFound: Trac==0.11rc1, 則處理方式如下 [6]:



Step 1: 刪除 c:\Python25\Lib\site-packages\ 裡面 trac 開頭 egg-info

Step 2: 刪除 c:\Python25\Lib\site-packages\trac



Step 3: 重新安裝 trac 版本, 即可.







整理一下:



建立新的 trac 專案:



trac-admin 專案名稱 initenv



增加一個新的使用者: (你可以調整 digest.txt 的位置)



trac-digest.py -u admin -p 密碼 >> c:\digest.txt



設定使用者權限:
直接用 admin 登入, 用 WebAdmin 直接管理.



中文顯示問題:


修改 trac.ini 中 [trac] default_charset = big5





啟動 tracd 範例



tracd --port 8000 --auth=trac001,c:\digest.txt,trac C:\trac\trac001





Enjoy.



by Jing





參考資料



[1] http://trac.edgewall.org/wiki/TracOnWindows/Python2.5


[2] Standalone 設定 http://trac.edgewall.org/wiki/TracStandalone


[3] h
ttp://blog.xuite.net/emisjerry/tech/12578393



[4] 更多的 trac 操作指令, 可以在http://localhost:8000/trac001/wiki/TracGuide 找到


[5] 更多的 trac.ini 設定說明



[6] Upgrade 問題的解決

沒有留言:

張貼留言