亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源配置管理工具 > SVN
SVN強制寫Log失敗的解決方案一例
作者:網絡轉載 發布時間:[ 2014/3/24 17:07:04 ] 推薦標簽:SVN 解決方案

【1.業務需求】
為部門的SVN服務器添加一項commit控制:即用戶在提交改變時必須寫注釋,且不得低于10個字符。

【2.基本思路】SVN本身并不提供這種強制寫log的功能,而是通過一系列的鉤子程序(我們稱為hook腳本),在提交之前(pre-commit),提交過程中(start-commit),提交之后(post-commit),調用預定的鉤子程序來完成一些附加的功能。

本次我們要實現的是在提交到版本庫之前檢查用戶是否已經寫了注釋,當然要使用pre-commit這個鉤子程序。我們打開SVN的repository下的hook目錄,可以發現有好幾個文件,其中一個是“pre-commit.tmpl”。這個文件是一個模板文件,它告訴了我們如何實現提交前控制。打開該模板文件,我們看到如下一段說明:

# The pre-commit hook is invoked before a Subversion txn is
# committed.  Subversion runs this hook by invoking a program
# (script, executable, binary, etc.) named 'pre-commit' (for which
# this file is a template), with the following ordered arguments:
#
#   [1] REPOS-PATH   (the path to this repository)                           
#   [2] TXN-NAME     (the name of the txn about to be committed)
#
# The default working directory for the invocation is undefined, so
# the program should set one explicitly if it cares.
#
# If the hook program exits with success, the txn is committed; but
# if it exits with failure (non-zero), the txn is aborted, no commit
# takes place, and STDERR is returned to the client.   The hook
# program can use the 'svnlook' utility to help it examine the txn.

我們看到在一個提交事務執行之前,該hook腳本會被調用。然后向該腳本傳遞兩個參數:REPOS-PATH和TXN-NAME,一個是用戶要提交的URL,一個是本次事務的一個事務號。如果提交成功則返回0,否則返回其它非0結果。那么我們的鉤子程序是要在事務提交之前,攔截這些請求,然后通過svnlook命令來檢查是否已經寫了log。

【3.示例代碼】下面這段代碼是網上直接拷貝的一段代碼:

@echo off
setlocal
set REPOS=%1
set TXN=%2 
rem check that logmessage contains at least 10 characters
svnlook log "%REPOS%" -t "%TXN%" | findstr "." > nul
if %errorlevel% gtr 0 goto err
exit 0
:err
echo Empty log message not allowed. Commit aborted! 1>&2
exit 1

下面解析一下綠色高亮處代碼的作用:

 ①set REPOS=%1
    set TXN=%2
   還記得我們前面提到的但事務提交時,會傳遞兩個參數嗎?這里是分別用來接收URL和事務號的
 
②svnlook log "%REPOS%" -t "%TXN%" | findstr ".........." > nul
   這句是核心程序。首先svnlook log是用來查看某個版本庫某次提交的log的,那么我們怎么知道這兩個
   參數呢?答案是我們前面已經保存的REPOS和TXN參數。
   它的作用是查看%REPOS%這個URL第%TXN%次提交的log信息,那么| findstr ".........."呢?細心
   的讀者會發現這里有10個圓點號,即表示10個字符。
   整句的作用是先獲取當前提交的log內容,然后判斷是否有10個字符以上

③echo Empty log message not allowed. Commit aborted! 1>&2
   這句話的作用是當提交檢查失敗時,輸出的提示信息

【4. 運行測試及錯誤解決】到這里我們應該可以正常運行了吧?下面我們把上面這個程序保存為pre-commit.bat,保存到hook目錄下。啟動SVN,隨意修改一個文件后,不寫注釋提交。看看下面的結果: 居然提示我們找不到svn repository目錄下的format文件:

Svnlook:不能打開文件”C:pengOther ewRepofom…” The system cannot find The path specified.

真郁悶!這是什么原因。仔細檢查文件,沒有發現語法錯誤。從SVN的官網上下了一份同樣內容的bat文件,測試通過!那會不會是文件的格式原因呢?我試著比較了這兩份文件的字符數,發現居然不一樣。會不會是一些控制字符的原因。

于是打開舊的文件,重新整理格式,發現每一行后面都多了一個中文的換行符。刪除這些換行符再測試,測試通過!

教訓:從網頁上直接拷貝代碼有時會帶有特殊字符,諸如控制字符會中文空格等,這些字符有時會引起一些不必要的錯誤。

軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 在线观看午夜 | 老湿影院免费体验区 | 人人澡天天澡夜夜澡 | 禁视频网站在线观看漫画 | 中文字幕在线观看免费 | 1204曰韩欧美成人看片 | 国产专区青青草原亚洲 | 中文无码日韩欧 | 国产一级理论片 | 影音先锋国产 | 久久99精品麻豆国产 | 亚洲一区在线观看视频 | 亚洲一区二区三区香蕉 | 亚洲经典三级 | 一级大片免费观看 | 性v天堂 | 插综合网 | 亚洲高清专区 | 亚洲欧美人成人让影院 | 国产成人午夜精品免费视频 | 日韩欧美在线综合网 | 国产成人a大片大片在线播放 | 在线观看黄a大片爽爽影院免费 | 2019偷偷狠狠的日日 | 国产日韩一区二区 | 91亚洲国产成人久久精品网站 | 动漫精品一区二区三区视频 | 波多野结衣在线视频观看 | 男人女人的免费视频网站 | 午夜看片网 | 一二三四视频社区在线1 | 欧美一二三区在线 | 男女做污污无遮挡激烈免费 | 欧美三级一区二区三区 | 日本在线网 | 亚洲一级毛片免费看 | 欧洲美女乱之伦 | 操久久 | 日批视频在线看 | 视频日韩p影院永久免费 | 天天碰免费视频 |