65.9K
CodeProject 正在变化。 阅读更多。
Home

为 SVN 源控制添加提交后钩子

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (2投票s)

2012年7月19日

CPOL

3分钟阅读

viewsIcon

27965

downloadIcon

156

如何为 SVN 源控制添加提交后钩子, 将电子邮件发送给团队

引言

Tortoise SVN 是一个被广泛使用的免费源代码控制工具。我发现它缺少的一个功能是关于签入或提交(在 SVN 中被称为)的电子邮件通知。在这里,我尝试分享如何通过电子邮件发送提交通知。

本文中提供的代码向预定义的邮件列表发送一封自动邮件,其中包含关于已签入/提交文件的详细信息。

背景

在团队合作中,有可能两个或更多的人正在处理不同但相互依赖的代码块。例如,负责应用程序数据层的人员可能已经更改了类中的方法签名。现在,负责业务层的人员将会受到影响,因为他的代码已经过时。

所以,与其让大家跑到彼此的座位上或输入电子邮件来告知他们所做的代码更改,不如使用自动电子邮件来节省时间。

自动构建是另一个可以添加到提交后钩子的步骤(我打算稍后用那个步骤更新当前的代码)。

使用代码

我打算将其作为安装手册,并将尝试逐步说明如何使用可执行文件和配置文件。如果你对代码细节不感兴趣,请略过。

此代码使用了两个值得提及的类

  • 进程
  • SmtpClient

在我们深入了解细节之前,让我们后退一步,看看 SVNLook.exe 提供了什么。这个可执行文件随 VirtualSVN 服务器一起提供,并允许用户检查已发生的事务。此可执行文件可用于诊断源代码控制中可能发生的问题。在这里,我们使用它来识别最近的提交细节。

该程序使用 SVNLook.exe 执行两个命令。首先,获取作者信息。以下 C# 代码执行一个命令,返回在给定存储库上执行上次提交操作的人员的用户名(如果您的 VSS/TFS 友好,则是分支)

                svnLook = new Process();
                svnLook.StartInfo = new ProcessStartInfo();
 
                svnLook.StartInfo.FileName = Settings.Default.SVNLookFilePath;
                svnLook.StartInfo.Arguments = "author " + Settings.Default.RepositoryPath;
                svnLook.StartInfo.UseShellExecute = false;
                svnLook.StartInfo.RedirectStandardOutput = true;
 
                string consoleMessage = string.Empty;
 
                svnLook.Start();
                svnLook.WaitForExit();
                consoleMessage = svnLook.StandardOutput.ReadToEnd(); 


此消息稍后将用于电子邮件内容。

接下来,我们执行 changed 命令以获取上述用户执行的提交的详细信息。

svnLook.StartInfo.Arguments = "changed " + Settings.Default.RepositoryPath; 
svnLook.Start(); 
svnLook.WaitForExit();
consoleMessage = svnLook.StandardOutput.ReadToEnd();  

一旦我们收到了信息,我们将撰写邮件并将其发送给用户列表。以下代码将电子邮件发送给用户

 mailMessage.From = new MailAddress(Settings.Default.FromAddress);
                mailMessage.Subject = Settings.Default.MailSubject;
                mailMessage.Priority = MailPriority.Low;
                foreach (var email in Settings.Default.ToAdress)
                {
                    mailMessage.To.Add(email);
                }
                mailMessage.IsBodyHtml = false;
                mailMessage.Body = mailContent;
                SmtpClient smtpClient = new SmtpClient();
                smtpClient.Host = Settings.Default.SMTPHost;
                smtpClient.Port = Settings.Default.SMTPPort;
                smtpClient.EnableSsl = Settings.Default.EnableSMTPSSL;
                smtpClient.Credentials = new NetworkCredential(Settings.Default.FromAddress, Settings.Default.FromAddressPassword);
                smtpClient.Send(mailMessage); 

您可能已经注意到代码中使用 Settings。Settings 是一种非常简单的方法,可以在您的应用程序中保持配置。 这里 链接更多地介绍了它。

薄弱环节

当前的代码版本没有采用良好的异常处理和日志记录机制。虽然,可以使用 Microsoft Enterprise Library 的异常处理和日志记录块来改进它。人们可能更喜欢编写自己的库来高效地执行这些操作。

使用可执行文件

如果您需要立即使用该可执行文件,请按照以下步骤操作

打开 SVNPostCommitHook.exe.config 文件并设置以下内容

  • FromAddress:将发送电子邮件的电子邮件地址
  • MailSubject:自动电子邮件的主题
  • ToAdress:要发送邮件的电子邮件地址(可以添加多个地址)
  • SMTPHost:用于 SMTP 事务的主机的名称/IP 地址
  • SMTPPort:用于 SMTP 事务的端口号
  • EnableSMTPSSL:设置是否应通过 https 执行 SMTP 事务
  • FromAddressPassword:将发送邮件的电子邮件地址的密码
  • LogFilePath:日志文件的路径。所有错误信息都将记录到此文件中
  • SVNLookFilePath:SVNLook.exe 文件的路径
  • RepositoryPath:设置钩子的存储库的路径
更新这些设置后,在 VirtualSVN 服务器管理器中执行以下操作

  1. 打开
    VirtualSVN 服务器管理器。右键单击需要提交后
    钩子的存储库。单击“属性”
  2. 切换到第二个选项卡:“钩子”在属性
    窗口中。选择“提交后钩子”并单击“编辑”。
  3. 粘贴
    用于执行提交后操作的可执行文件的路径
    工作。单击所有窗口的“确定”。

关注点

我希望在 CodeProject 上编写更多有用的 SVN 钩子并在此处分享。

历史

版本 1.0

© . All rights reserved.