7 结束语

王朝学院·作者佚名  2016-08-28
窄屏简体版  字體: 小  |  中  |  大  |  超大  

1. SharpSvn简介SharpSvn.dll 是为.Net 2.0-4.0+ 应用提供的 Subversion Client API,更多详细介绍请见 https://sharpsvn.open.collab.net/。

2. 鉴权操作SharpSvn 通过 Authentication 接口提供相关的鉴权操作,例如用户名和密码获取、证书确认等。Authentication 接口分别为这些操作定义了相关的事件句柄(Handlers)。当需要某些鉴权操作时,SharpSvn 就会去调用相对应的句柄。我们只需要将我们需要执行的鉴权操作挂载到相对应的句柄上即可。下面各提供用户名和密码获取、证书确认的例子。

2.1 用户名和密码获取当执行某个 svn 操作需要用户权限认证时,会调用 UserNamePassWordHandlers 中的句柄来获取用户名和密码。例如,

using(SvnClient client =newSvnClient())

{

client.Authentication.UserNamePasswordHandlers+=newEventHandlers<SvnUserNamePasswordEventArgs>(delegate(objects, SvnUserNamePasswordEventArgs e)

{

e.UserName="test";

e.Password="password";

});

}

2.2 证书确认当我们访问的 Svn 服务器使用的协议不是我们默认执行标准,svn 客户会让用户确认这个服务器是否值得信任并继续访问。此时,SharpSvn 会执行 Authentication 接口中的 SslServerTrustHandlers 中挂载的事件句柄。例如,

using(SvnClient client =newSvnClient())

{

client.Authentication.SslServerTrustHandlers+=delegate(objects, SvnSslServerTrustEventHandlerArgs>e)

{

e.Save=true;//e.Cancel = true;//表示不信任该服务器,放弃访问。};

}

2.3 SharpSvnUI绑定SharpSvn.UI.dll 提供了一个默认的操作界面。例如上面的用户名和密码获取界面、证书确认界面。我们只需要将下面这两行代码写入我们程序中,SharpSvn 会自动挂载相对应的事件句柄。当需要用户名和密码获取或者证书确认时就会弹出相对应的界面。

using(SvnClient client =newSvnClient())

{

SharpSvn.UI.SvnUIBindArgs uiBindArgs=newSharpSvn.UI.SvnUIBindArgs();

SharpSvn.UI.SvnUI.Bind(client, uiBindArgs);

}

3 SVN基本操作3.1 更新 Updateusing(SvnClient client =newSvnClient())

{stringpath = @”d:\\svn\temp";SvnUpdateArgs updateArgs =newSvnUpdateArgs();

updateArgs.Depth=SvnDepth.Empty;

client.Update(path, updateArgs);

}

3.2加入版本控制 Addusing(SvnClient client =newSvnClient())

{stringpath =@"d:\\svn\temp\new.txt";

SvnAddArgs args=newSvnAddArgs();

args.Depth=SvnDepth.Empty;

client.Add(path, args);

}

3.3 提交 Commitusing(SvnClient client =newSvnClient())

{

SvnCommitArgs commitArgs=newSvnCommitArgs();

commitArgs.Depth=SvnDepth.Empty;

commitArgs.LogMessage="My Test Commit";

SvnCommitResult commitResult=null;

client.Commit(@"d:\\svn\temp\test.txt", commitArgs,outcommitResult);

}

其他操作,例如 Delete、Lock、Unlock 等,这些基本操作的代码结构跟上面这几个操作类似,这里就不赘述了。

3.4 获取本更文件列using(SvnClient client =newSvnClient())

{

SvnStatusArgs args=newSvnStatusArgs();

args.Depth=SvnDepth.Empty;

args.RetriveRemoteStatus=false;

Collection<SvnStatusEventArgs> list =newCollection<SvnStatusEventArgs>();

client.GetStatus(@"d:\\svn\temp", args,outlist);foreach(SvnStatusEventArgs eventArgsinlist)

{//从eventArgs中获取每个变更文件的相关信息}

}

4 SharpSvn 操作日志获取通过 SvnClientReporter 可以将 SharpSvn 的操作日志信息进行重定向,可以重定向到一个 StringBuilder 或者某个文件中,下面的这两行代码SharpSvn 重定向到某个 StringBuilder 中,

using(SvnClient client =newSvnClient())

{

StringBuilder strBuilder=newStringBuilder();

SvnClientReporter reporter=newSvnClientReporter(client, strBuilder);

}

注:SharpSvn 可重定向到多个目标,可一个多次重定向到同一个目标。例如,如果对于同一个 StringBuilder,定义了多个 SvnClientReporter 对象,则该 StringBuilder 中的 SharpSvn 操作日志会记录多份。可以手工调用SvnClientReporter 对象的 Dispose()释放某个日志重定向。

5 取消操作SharpSvn 的取消机制类似与线程的取消机制。SharpSvn 的操作过程中会有一些取消检测点。当操作执行到某个检测点时会判断一下用户是否设置了取消标志,如果没有,则继续操作;如果设置了取消标志,则终止当前操作。

在 SharpSvn 的操作过程中,当到达一个取消检测点时会处罚一个Cancel 事件,通过 Cancel 事件来获取用户是否设置了取消标志。当我们要取消 svn 操作时,注册一下 Cancel 事件处理方法,则改方法中设置SvnCancelEventArgs 对象的 Cancel 属性为 true 即可。例如,

using(SvnClient client =newSvnClient())

{//do somethingclient.Cancel +=delegate(objects, SvnCancelEventArgs e)

{

e.Cancel=true;

};//do svnOperations}

6 Svn 远程会话 SvnRemotesession

通过提供的一个 Svn 控制元素路径可以即可建立一个 Svn 远程会话SvnRemoteSession,

stringelementPath =@"https://10.23.34.45:6801/svn/temp/test.txt";

SvnRemoteSession remoteSession=newSvnRemoteSession(newUri(elementPath));

调用 SvnRemoteSession 对象的 GetRepositoryRoot() 方法可以获取当前svn 配置库服务器的根目录,

Uri repoRootUri =null;

remoteSession.GetRepositoryRoot(outrepoRootUri);

获取到 svn 配置库的根目录之后,我们就可以调用 Reparent() 方法将SvnRemoteSession 会话对象设置到 svn 配置库的根,

remoteSession.Reparent(repoRootUri);

将远程会话设置到 svn 配置库根目录之后,我们就可以各个配置库元素执行相关的远程操作,例如列出某个配置库目录下的所有元素、获取当前配置库的最新版本号、获取某个元素的提交记录等。下面分别给出这三个操作的例子,

6.1 列出目录下的所有元素(非递归)stringdirPath =@"https://10.23.34.45:6801/svn/temp";stringdirRelPath = remoteSession.MakeRepositoryRootRelativePath(newUri(dirPath));//获取相对目录相对配置库根目录的相对路径remoteSession.List(dirRelPath,newEventHandler<SvnRemoteListEventArgs>(delegate(objects, SvnRemoteListEventArgs e)

{//e.Name: 元素名//e.Path: 元素路径//e.RetrievedRevistion: 元素的版本号}));

6.2 获取配置库最新版本号longlatestRevision =0;

remoetSession.GetLatestRevision(outlatestRevision);

6.3 获取指定文件的提交记录Uri fileUri =newUri(@"https://10.23.34.45:6801/svn/temp/test.txt");stringfileRelPath =remoteSession.MakeRepositoryRootRelativePath(fileUri);delegate(objects, SvnRemoteLogEventArgs e)

{//e.Author: 提交人//e.Revision: 版本号//e.LogMessage: 提交备注信息}));

7 结束语SharpSvn 项目自身提供的 Demo 样例几乎没有,提供的文档对各个 API 介绍的少得可怜。之前因工作需要,在网上搜索也没有发现多少关于 SharpSvn 的样例介绍。上面这些只是自身因需要用到而进行验证得来的一些 demo 样例,后面就没有再更多得使用 SharpSvn,所以关于SharpSvn 的探索就这么浅薄了,也懒得再继续深入了。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航