C 實現svn server端的hook

2022-03-06 12:12:37 字數 2323 閱讀 3242

目標

要做的東東呢,就是在向svn提交檔案的時候,可以再server端讀到所有提交檔案的內容,並根據某些規則驗證檔案的合法性,如果驗證失敗,則終止提交,並在svn的客戶端上顯示錯誤資訊。

準備工作

1,安裝svn server,本文例子使用的是collabnetsubversion-server-1.6.3-3.win32,安裝時使用預設的repository目錄,即c:/svn_repository。 2,建立乙個svn repository。在命令列裡,執行「svnadmin create c:/svn_repository/test」命令,系統就會在svn_repository目錄下建立test資料夾,裡面有conf,db,hooks,locks四個資料夾,這個hooks資料夾就是我們的主場哦。 注:執行svnadmin命令前,可能需要重啟機器使環境變數生效,否則可能系統找不到svnadmin命令。 3,安裝svn client,這裡使用的是tortoisesvn,用於update,commit檔案,測試server端hook的可用性。

svn hook介紹

在hooks資料夾中,可以看到,系統已經生成了很多tmpl檔案,它們就是hook的模版檔案。使用hook的方法很簡單,只要把可執行檔案(如.exe/.bat)放入這個hooks資料夾中,並改成svn可識別的名字,就會被執行了。如把乙個pre-commit.exe放入hooks資料夾,它就會在**真正被commit之前執行。

注:tortoisesvn也提供hook功能,在setting中可以設定,也有precommit,postcommit等多個選項,並可以指定要執行的可執行檔案,但這個hook是是在客戶端的,與本文中所說的server端hook並不相同,而且似乎不能執行winform形式的程式。此hook非彼hook哦~~

開始c#

將預設的main方法返回值改成int 如果return 0,則提交成功;如果return 1,則導致提交失敗。 用console.error.writeling("...") 把錯誤資訊傳送到客戶端。 main函式的引數     args[0]: repository的路徑,例如「c:\svn_repository\test」     args[1]: pre-commit時是transactionid,post-commit時是revision number。 如果要取得本次提交的檔案列表或檔案內容,則需要使用svnlook命令,會用到這兩個引數。

** ————————————————————————

private static int main(string args)

svnlook

svnlook.exe放在svn安裝目錄裡,預設為「c:\program files\collabnet subversion server\svnlook.exe」

命令列:變化的檔案列表: svnlook changed -t transactionid repository_path   svnlook changed -r revisionnumber repository_path 輸出示例: u   folder1/1.txt d   2.txt a   3.txt

取得檔案內容 svnlook cat -t transactionid repository_path filepath svnlook cat -r revisionnumber repository_path filepath 輸出為該檔案的內容。

因為在pre-commit中,main函式的第二個引數是transactionid,所以要用-t,post-commit中引數是revisionnmuber,所以要用-r。其他hook中兩個引數到底為何,可以在hooks資料夾相應的tmpl檔案中找到答案。 使用c#執行命令列,以svnlook changed為例 ————————————————————————

using(var process = new process()) \"\"", transactionid, repository_path); //transactionid和repository_path即main函式中傳進的兩個引數。

process.start();          content = process.standardoutput.readtoend();  // 取得svnlook命令的返回內容         process.waitforexit();       }

以上就是所需要的內容了,組裝一下,加上自己的驗證邏輯等等,編譯,把exe檔案copy到hooks資料夾,重新命名,就可以執行嘍~~~

canvas實現畫板(移動端 h5)

如下 doctype html utf 8 畫板 title body canvas style head text align center 600 width 900 id canvas 親,您的瀏覽器不支援canvas,換個瀏覽器試試吧!span canvas div window.onloa...

移動端h5文字長按複製 H5實現移動端複製文字功能

前言 移動端專案開發中,經常遇到需要複製文字的場景,今天咱們就來聊一下,移動端複製文字的那些事 效果預覽 背景分析 業務需求很簡單,將指定的文字 例如 關鍵字 文案描述等 複製到手機的剪貼簿上,方便使用者直接進行貼上 解決方案 相關api document.execcommand setselect...

Flexible實現H5移動端適配小demo

看了宇哥關於移動端適配的分享後,加上目前公司專案也需要做移動端適配,今天就抽空搞了搞。目前業界還是比較推崇手淘使用 rem viewport 的解決方案,今天自己模仿手淘flexible的解決方案,實現了個簡單的demo。flexible動態獲取裝置寬度和dpr,為html元素新增兩個屬性 data...