C#实现svn server端的hook

目标

要做的东东呢,就是在向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#

创建一个Console Application,这个工程产生的.exe文件即可放入hooks文件夹,重命名为pre-commit.exe。

将默认的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) {        if(.....)          return 0;      Console.Error.WriteLing(errorMessage);      return 1; }

————————————————————————

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()) {         process.StartInfo.UseShellExecute = false;         process.StartInfo.RedirectStandardOutput = true;         process.StartInfo.FileName = @"C:\Program Files\CollabNet Subversion Server\svnlook.exe";         process.StartInfo.Arguments = string.Format("changed -t {0} \"{1}\"", transactionId, repository_path); //transactionId和repository_path即Main函数中传进的两个参数。

process.Start();          content = process.StandardOutput.ReadToEnd();  // 取得svnlook命令的返回内容         process.WaitForExit();       }

————————————————————————

以上就是所需要的内容了,组装一下,加上自己的验证逻辑等等,编译,把exe文件copy到hooks文件夹,重命名,就可以运行喽~~~

原文来自:http://zaocanhebaodan.blogbus.com/logs/41743640.html

时间: 2024-10-07 10:39:49

C#实现svn server端的hook的相关文章

redmine和svn server的部署

作为一个程序猿,想要很好的管理自己项目和代码,我们需要一些工具做辅助. 项目管理工具redmine和代码版本管理工具 SVN(Subversion). 我们选择在虚拟机里面安装windows部署这两套系统,简单暴力. bitnami redmine 下载:https://bitnami.com/stacks , collabnet svn 下载: http://www.collab.net/downloads/subversion redmine: redmine安装起来看教程是相当复杂,还好,

(总结)CentOS Linux搭建SVN Server配置详解

PS:今天给开发的同事搭建一个公网的SVN Server,google一下,发现下面这篇最详细,就记录下来,重新排版一下.顺便根据自己的使用经验,补充了几个细节和总结.本文配置是基于CentOS 5.x的,但一样适用于其他Linux发行版! SVN简介和工作原理 subversion(简称svn)是近几年崛起的版本管理软件,是cvs的接班人,目前绝大多数开源软件都使用svn作为代码版本管理软件.Subversion支持linux和windows,但较多安装在linux下. svn服务器有两种运行

git跟svn 服务端对比

Git已经火了很久,简单的使用也没有问题,但有几个问题一直以来都没有搞清楚:git跟svn有哪些异同,两者相互的优劣是什么,git的分布式怎么理解,为什么有离线提交,,,自己动手,分别看一下服务端跟客户端使用有什么异同,大概也就了解了. 选择的服务端分别是gitlab跟visual svn server. 1.gitlab简单说明: svn是我们比较熟悉的,svn有服务端跟客户端:虽然git是分布式的,但平时我们使用的时候往往都是有一个服务端的,比如gitlab,github等. Gitlab是

SVN Server配置详解 及备份

SVN简介和工作原理 subversion(简称svn)是近几年崛起的版本管理软件,是cvs的接班人,目前绝大多数开源软件都使用svn作为代码版本管理软件.Subversion支持linux和windows,但较多安装在linux下. svn服务器有两种运行方式:独立服务器和借助于apache. svn://或http://svn客户端tortoisesvnsvn的基本工作原理: 在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序.有源代码库管理员统一管理这些源程序.每个用户在使用

SVN server的搭建

当做大的项目是,svn是代码管理的好工具,假设是用自己的server,那么须要搭建SVNserver. Subversion是一款很优秀的svnserver工具,笔者採用VisualSVN server ,由于它集成了apache,不用再进行过多的配置. 首先下载安装 VisualSvn Server 选择VisualSVN ,然后下载. Download 之后,进行VisualSVN的安装 点next 继续next location 选择安装VisualSVN Server 的文件夹 Repo

CentOS Linux搭建SVN Server配置详解

SVN简介和工作原理 subversion(简称svn)是近几年崛起的版本管理软件,是cvs的接班人,目前绝大多数开源软件都使用svn作为代码版本管理软件.Subversion支持linux和windows,但较多安装在linux下. svn服务器有两种运行方式:独立服务器和借助于apache. svn://或http://svn客户端tortoisesvnsvn的基本工作原理: 在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序.有源代码库管理员统一管理这些源程序.每个用户在使用

svn server从svn+ssh访问方式切换到svn访问

根据客户需求现在需要把SVN的访问方式由原来的svn+ssh的方式变为单独的svn的方式,但是在切换的过程中遇到了几个问题,先做一个归纳. 关于如何在linux下搭建这两种方式的svn server,可以具体参考博文“Centos 下面搭建svn 服务”来搭建, 首先明确两种方式的访问原理, svn:读取仓库下面的配置文件来达到成功访问 svn+ssh:利用linux用户,将其加入到svn组以达到成功访问 问题一:配好了svn访问方式之后,提示svn server拒绝访问, 1,检查svn se

如何使用CentOS Linux搭建SVN Server

之前给开发的同事搭建一个公网的SVN Server,google一下,发现下面这篇最详细,就记录下来,重新排版一下 顺便根据自己的使用经验,补充了几个细节和总结.本文配置是基于CentOS 5.x的,但一样适用于其他Linux发行版! subversion(简称svn)是近几年崛起的版本管理软件,是cvs的接班人 目前绝大多数开源软件都使用svn作为代码版本管理软件.Subversion支持linux和windows,但较多安装在linux下 svn服务器有两种运行方式:独立服务器和借助于apa

SVN 服务端和客户端的安装及使用

SVN是一种集中式管理代码的版本控制系统,原理就是把代码都保存到一个固定的位置,每次从这个位置拷贝更新代码,进行编辑:再把修改后的代码提交到该目录中.多人协作开发也是如此.相当于用来存放代码的数据库.https://www.visualsvn.com/visualsvn/download/ -------------------------------SVN下载网址第一步.先下载SVN的服务端(32位的系统就下32位的)!第二步.双击下载的安装包,点击NEXT(下一步) 第三步.勾上点击next