博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
获取 SharpSvn 执行 svn 操作的实时日志
阅读量:5346 次
发布时间:2019-06-15

本文共 2713 字,大约阅读时间需要 9 分钟。

1 获取 SharpSvn 操作日志的方式

之前一篇随笔()讲到可以通过声称一个绑定到一个 SvnClient 对象的 SvnClientReport 对象。为了说明方便,将对应的程序片段再次写在下面,

using (SvnClient client = new SvnClient()){    StringBuilder strBuilder = new StringBuilder();    SvnClientReporter reporter = new SvnClientReporter(client, strBuilder);}

该程序片段使用一个 StringBuilder 对象来声称 SvnClientReport 对象。这样子,我们只能等到执行 svn 操作之后才能从 StringBuilder 对象中获取所有操作日志。如果执行的 svn 操作比较耗时(例如 commit 上千个文件),我们不能够实时地获取 SharpSvn 执行 svn 操作的日志,我们会以为程序卡住了。那么,如何实时获取 SharpSvn 操作的日志?

2 实时获取 SharpSvn 操作日志

首先, 获取 SharpSvn 执行 svn 操作日志只能通过声明 SvnClientReport 对象。这是我们的出现点,那么怎样声明一个实时获取操作日志的 SvnClientReport 对象?先看一下 SvnClientReport 类的构造函数(参考http://docs.sharpsvn.net/current/),

SvnClientReporter(SvnClient, TextWriter);

SvnClientReporter(SvnClient, StringBuilder);

SvnClientReporter(SvnClientArgs, TextWriter);

SvnClientReporter(SvnClientArgs, StringBuilder);

SvnClientReporter(SvnClient, StringBuilder, IFormatProvider);

SvnClientReporter(SvnClientArgs, StringBuilder, IFormatProvider);

通过 SvnClientReport 类的构造函数,我们可以看出我们只能使用一个 StringBuilder 或者 TextWriter 对象来声明一个 SvnClientReport 对象。上一节我们已经看到通过 StringBuilder 对象是无法实时获取 SharpSvn 操作日志的了,那我们只能从 TextWriter 下手了。

通过http://msdn.microsoft.com/zh-cn/library/ywxh2328%28VS.80%29.aspx,我们看到 TextWriter 是一个抽象类,那么我们是不是就可以通过定义一个TextWriter 派生类来实现我们实时获取 SharpSvn 操作日志呢?!

下面实现的 MyRealTimeTextWriter 类继承了抽象类 TextWriter,实现了属性 Encoding(必须实现),并且覆盖实现了 void Write(string) 和void WriteLine(string value) 两个方法,这两个方法通过触发 DataReceived事件告知外界其接收到的数据。

class MyRealTimeTextWriter : TextWriter{    //TextWriter派生类必须实现    public Encoding Encoding    {        get { return Encoding.UTF8; }    }        //接收到数据,就触发该事件    public event Action
DataReceived; private void OnDataReceived(string value) { if (DataReceived != null) { DataReceived(value); } } public override void Write(string value) { OnDataReceived(value); } public override void WriteLine(string value) { OnDataReceived(value); }}

有了 MyRealTimeTextWriter 类之后,我们就可实现下面的程序来实时获取 SharpSvn 操作的日志。

using (SvnClient client = new SvnClient()){    MyRealTimeTextWriter realtimeTextWriter = new MyRealTimeTextWriter();    realtimeTextWriter.DataReceived += new Action
( delegate (string value) { /* do on the sharpsvn operation logs */ }); SvnClientReporter reporter = new SvnClientReporter(client, realtimeTextWriter); /* do svn operations */}

上面程序通过一个 MyRealTimeTextWriter 对象来生成 SvnClientReport 对象。每当 SharpSvn 操作产生一条日志信息时就会调用 MyRealTimeTextWriter 对象的 Write(string) 或 WriteLine(string) 方法,而这两个方法立即触发 DataReceived 事件告知外面有日志生成了,于是便达到了实时获取 SharpSvn 操作日志的目的。

(done)

转载于:https://www.cnblogs.com/lienhua34/p/3943892.html

你可能感兴趣的文章
poj2406-Power Strings
查看>>
2018/12/18 JS会像Linux一样改变编程
查看>>
php环境搭建脚本
查看>>
FTP主动模式与被动模式说明
查看>>
php 编译常见错误
查看>>
MES架构
查看>>
【Python3 爬虫】15_Fiddler抓包分析
查看>>
高性能JavaScript-JS脚本加载与执行对性能的影响
查看>>
关于标签之间因为换行等问题造成的空白间距问题处理
查看>>
hdu 2767(tarjan)
查看>>
sklearn之分类模型混淆矩阵和分类报告
查看>>
MySQL各存储引擎
查看>>
项目--简单导出CSV文件
查看>>
Oracle session相关数据字典(一)
查看>>
织梦文章内容提取第一张或者多张图片输出
查看>>
C#用正则表达式 获取网页源代码标签的属性或值
查看>>
BZOJ 3399 [Usaco2009 Mar]Sand Castle城堡(贪心)
查看>>
WCF(一) 简单的认知
查看>>
[MFC][DShow]简单例子
查看>>
降序排列
查看>>