[转]loginfo.rb:自動寄送修改記錄信件
在CVS主機的Repository內有一個特殊的CVS控制目錄:CVSROOT,此目錄內存放著許多控制CVS操作行為的小檔案,或許可以簡化的稱為 CVS的Event handler,例如:loginfo是在commit、輸入Log message後會讀取的檔案。
loginfo內除了註解(井號開頭)外的每一列都會被CVS程式讀取,依開頭的樣式來決定此次commit的檔案是否要執行其後的命令。例如:
# 井號開頭是註解行 模組樣式 命令 [參數1 [參數2 [...參數n]…]] |
模組樣式是使用正規運用式(Regular Expression)來示符合要執行的是那些模組,例如:
^inetpub | 表示以inetpub開頭的模組(目錄) |
ALL | 表示所有模組都符合 |
DEFAULT | 由可執行的第一列開始都不符合的,最後會執行DEFAULT列的指令 |
模組樣式後面接的是要執行的命令。有一個相當好用的指令是Rob Partington寫的loginfo.rb,一支用來產生mail的Ruby程式,將修改人、修改時間、修改程式等訊息寄給需要通知的相關人等。loginfo.rb的使用說明如下:
# Usage: loginfo.rb CVSROOT USER ‘CVS-LOG-STRING’ MAIL_ADDRESSES # [-d HELO_DOMAIN] [-s SMTP_SERVER] [-p SUBJECT_PREFIX] # [-S SENDER_ADDRESS] [-R REPLY_TO_ADDRESS] [-x X_HEADER_PREFIX] # [-w CVSWEB_URL] [-C PATH_TO_CVS] [-qJ] # # -d specify the domain to use in the SMTP session and in the mail header # (default: FQDN of the host) # -s specify the SMTP server to mail via # (default: "localhost") # -S specify the sender address for the mail # (default: USER + "@" + HELO_DOMAIN) # -R specify the reply-to address for the mail # (default: none) # -p specify the prefix for the mail subject (which will be surrounded # by `[' and `]‘) # (default: "cvs") # -q be quiet # -x specify the prefix for the CVS informative headers # (default: "X-") # -w specify the URL of the CVSweb with two @’s, one for a path, and # the other for a query (e.g. "‘http://a.b/cvsweb.cgi@?cvsroot=xyz&@’") # (default: none – no CVSweb links will be added) # -C specify the full path to cvs # (default: "/usr/bin/cvs") # -J enable Japanese support (send mail in the JIS encoding) # (default: disabled) |
使用範例:
# 把inetpub與其子目錄內檔案的commit都寄通知給紅色字體的電子郵件帳號 # %s 是輸入的log message ^inetpub $CVSROOT/CVSROOT/loginfo.rb $CVSROOT $USER %s adam@hotmail.com,bill@gmail.com,cathy@pchome.com.tw -s mail.box.com.tw -S cvs_logingo@mail.box.com.tw |
要使用loginfo.rb當然要安裝Ruby環境;另外,以上指令都是在Linux上執行的,Windows環境需要做些小修改。在Windows中有一個叫做CVSMailer的Delphi程式,也可以用來寄送修改記錄,但我幾年前測試時始終無法正常運行,您也可以試看看。
如果想要對程式版本間的修改做更詳細的記錄與追蹤的話,可以自行撰寫程式,將修改程式、Log訊息等寫入資料庫,則日後就能使用SELECT敘述做查詢了。
##