windows下svn post-commit的實現

來源:互聯網
上載者:User

標籤:提取   bug   路徑   取出   color   goto   倉庫   svn   com   

前言:

       好的!在結束了上一部落格教程的Subversion安裝之後。我們開始了下一項工作,windows版本下 svn post-commit的實現。說實話,這方面的知識網上的知識並不是很多~~~~~~~。

       >>>post-commit是幹什麼的?

       當使用者實現commit操作的時候,就會執行相應的post-commit檔案裡的內容。實現commit時的自動觸發。

       >>>那麼這個  post-commit.bat 檔案應該放在哪裡呐?

        嗯嗯,這個問題主要取決於你安裝VisualSVN Server時選擇安裝Repository的目錄位置。這裡就假如你選擇了預設安裝位置 C:\Repository 下吧。

        當你在VIsualSVN Server下建立了相應的repository後,假如你建立的倉庫名字為 test。那麼在你的 C:\Repository 下就會產生相應的 test 倉庫。

        好的,現在就把你的 post-commit.bat 檔案放到 C:\Repository\test\hooks 目錄下吧。

 

================================================================================

好的。下面就需要實現相應的 post-commit.bat 檔案的功能啦。當然,每個人的需求時不一樣的啦。我這裡是提取出相應的svn資料資訊,然後通過curl工具

將相應的資料post到對應的url。

下面是我編寫的post-commit.bat, 大家可以作為參考(當然啦~。~,這裡你還得熟悉熟悉windows的批處理。。。。。):

@echo on:: 將該檔案放置到svn repository的hooks目錄,如D:\subversion\test\hooks:: 1. 名字一定要是post_commit:: 2. 修改case裡面的curl為easyops應用流水線的svn鉤子SET LOGFILE=C:\post-commit.logSET REPOS=%1SET REV=%2SET TXN_NAME=%3::UUIDsvnlook uuid %REPOS% > .\data.txtSET /p UUID=< .\data.txt::AUTHORsvnlook author %REPOS% -r %REV% > .\data.txtSET /p AUTHOR=< .\data.txt::LOGsvnlook log %REPOS% -r %REV% > .\data.txtSET /p LOG=< .\data.txt::DATEsvnlook date %REPOS% -r %REV% > .\data.txtSET /p DATE=< .\data.txtecho %REPOS% %REV% %TXN_NAME% %UUID% >> %LOGFILE%::==================================================::CHANGEsvnlook changed %REPOS% -r %REV% > .\data.txtfor /f "delims=" %%i in (.\data.txt) do (set CHANGE=%%i)&(goto exit_change_for):exit_change_for::TYPEfor /f "tokens=2 delims= " %%t in ("%CHANGE%") do for /f "tokens=1 delims=/" %%c in ("%%t") do set TYPE=%%c::TAGfor /f "tokens=2 delims= " %%t in ("%CHANGE%") do for /f "tokens=2 delims=/" %%c in ("%%t") do set TAG=%%c::======================================================echo "judge from %CHANGE%, type is %TYPE%" >> %LOGFILE%:: 按應用需求,在不同的類型裡面填入easyops的svn鉤子url,如果不區分分支,則在*)裡面填if "%TYPE%"=="trunk" goto label_trunkif "%TYPE%"=="tags"  goto label_tagif "%TYPE%"=="branchs" (goto label_branchs) else goto label_all:label_trunkSET url="http://r.easyops.cn/hook/subversion/org/1888/app/5ac9dd6f01ca7/pipeline/4dc5522c75d5d5e68e5b0d89925c3802"goto exit_type:label_tagsSET url=""::url=‘http://admin.easyops.local/hook/subversion/org/1888/app/598beb9fbcc06/pipeline/85df75da575635744a1f2feefa913a61‘goto exit_type:label_branchsSET url=""goto exit_type:label_allSET url="" && goto exit_type:exit_typeif "%url%"=="" (echo "not found trigger url in %TYPE% type, exit" >> %LOGFILE% && exit 0) else echo "will trigger %url%"  >> %LOGFILE%::將win下路徑的 \ 替換為 \\ 。不然會出現格式問題set REPOS=%REPOS:\=\\%set REV=%REV:\=\\%set TXN_NAME=%TXN_NAME:\=\\%set UUID=%UUID:\=\\%set TAG=%TAG:\=\\%set AUTHOR=%AUTHOR:\=\\%set DATE=%DATE:\=\\%set TYPE=%TYPE:\=\\%::generate_post_dataset post_data="{\"repos\": \"%REPOS%\",\"rev\":\"%REV%\",\"txn_name\":\"%TXN_NAME%\",\"uuid\":\"%UUID%\",\"type\":\"%TYPE%\",\"tag\":\"%TAG%\",\"author\":\"%AUTHOR%\",\"date\":\"%DATE%\"}"set curl=C:\curl.exe%curl% -i -X POST -H "Content-Type: application/json" --data %post_data% %url%
View Code

 

將相應 post-commit.bat 檔案放到相應的倉庫hooks目錄下

=============================================================================

下面就是測試 post-commit 的實現效果了。。。。

(1)首先checkout 在VisaulSVN伺服器下建立的 test 倉庫 到自己想要的目錄下。(點擊滑鼠右鍵就可以看到相應的 svn checkout操作)

(2)checkout結束之後,在copy下來的test倉庫裡面添加或者更新相應的檔案或目錄。

(3)完成上面的操作後,滑鼠右鍵發現svn commit 操作,然後點擊實現。

 

當然這裡會出現各種各樣的bug。還是需要去解決的。

windows下svn post-commit的實現

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.