获取 SharpSvn 执行 svn 操作的实时日志
1 获取 SharpSvn 操作日志的方式
之前一篇随笔(使用 SharpSvn 执行 svn 操作)讲到可以通过声称一个绑定到一个 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<string> 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<string>(
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)
获取 SharpSvn 执行 svn 操作的实时日志的更多相关文章
- 使用 SharpSvn 执行 svn 操作的Demo
1. SharpSvn简介 SharpSvn.dll 是为.Net 2.0-4.0+ 应用提供的 Subversion Client API,更多详细介绍请见 https://sharpsvn.ope ...
- 通过DT10获取程序执行过程中的实时覆盖率
DT10是新一代的动态测试工具,可以长时间跟踪记录目标程序执行情况,获取目标程序动态执行数据,帮助进行难于重现的Bug错误分析,覆盖率检测,性能测试,变量跟踪等等功能. 系统测试覆盖率,通常是用于判断 ...
- RxJava2-后台执行耗时操作,实时通知 UI 更新(一)
一.前言 接触RxJava2已经很久了,也看了网上的很多文章,发现基本都是在对RxJava的基本思想介绍之后,再去对各个操作符进行分析,但是看了之后感觉过了不久就忘了. 偶然的机会看到了开源项目 Rx ...
- svn执行update操作后出现:Error : Previous operation has not finished; run 'cleanup' if it was interrupted.
svn执行update操作后出现: Error : Previous operation has not finished; run 'cleanup' if it was interrup ...
- ASP.NET服务器端执行耗时操作的工作记录
公司之前有这样一个业务需求: 一名同事做出文件a0和b0,然后将a0加密为a1.b0加密为b1:再将文件a0.a1.b0和b1上传至服务器M:同时要将服务器N上的数据表添加一条记录,该记录的ID就是前 ...
- [转]SVN操作手册
[转]SVN操作手册 2012-04-28 11:26 by NewSea, 2495 阅读, 0 评论, 收藏, 编辑 原文: http://hi.baidu.com/caiqiupeng/blog ...
- 苏宁基于Spark Streaming的实时日志分析系统实践 Spark Streaming 在数据平台日志解析功能的应用
https://mp.weixin.qq.com/s/KPTM02-ICt72_7ZdRZIHBA 苏宁基于Spark Streaming的实时日志分析系统实践 原创: AI+落地实践 AI前线 20 ...
- ELK实时日志分析平台环境部署--完整记录
在日常运维工作中,对于系统和业务日志的处理尤为重要.今天,在这里分享一下自己部署的ELK(+Redis)-开源实时日志分析平台的记录过程(仅依据本人的实际操作为例说明,如有误述,敬请指出)~ ==== ...
- docker logs 查看实时日志
docker logs -f -t --since="2017-05-31" --tail=10 edu_web_1 --since : 此参数指定了输出日志开始日期,即只输出指定 ...
随机推荐
- 4. 支持向量机(SVM)原理
1. 感知机原理(Perceptron) 2. 感知机(Perceptron)基本形式和对偶形式实现 3. 支持向量机(SVM)拉格朗日对偶性(KKT) 4. 支持向量机(SVM)原理 5. 支持向量 ...
- [转]mysql delete 使用别名 语法
原文地址:https://www.cnblogs.com/wuyun-blog/p/6178303.html 今天删除数据,写了这么条sql语句, DELETE from sys_menus s ...
- Unity2017与Visual Studio2017的兼容问题
Unity2017中新建脚本后,用Visual Studio2017打开发现不兼容. 方法一:管理员权限运行Unity. 方法二:打开Visual Studio Installer,下载Unity相关 ...
- 在CentOS 6.4中支持exfat格式的U盘
CentOS系列一直没有默认支持使用exfat格式的大容量U盘. 可以通过添加fuse-exfat模块来支持.根据网上资料,整理如下: 1.下载fuse-exfat支持软件: exfat支持是通过fu ...
- node学习笔记5——post数据传递
上一篇有讲到get数据的传递.有了上一篇的了解,今天讲下如何获取到post传递过来的数据. 通过post传送的数据,在node里面主要是通过req.on('data',function (data) ...
- Should I expose synchronous wrappers for asynchronous methods?
In a previous post Should I expose asynchronous wrappers for synchronous methods?, I discussed " ...
- Some Parameter Interpretation On Using Mininet
MiniNet使用很简单,下面以下面帮助界面截图为例,简单讲述常见的几个命令即可: sudo mn --topo single,3--mac --switch ovsk--controller rem ...
- ubantu linux的bash shell初接触
本人是Linux初习者,同时也刚刚开始学习,将我的学习成长记录下来,来和大家一同分享! 我用的系统是Ubuntu 12.04,脚本编辑器用的是VIM,觉得很顺手!Shell语言用的是Bash Shel ...
- tensorflow 模型前向传播 保存ckpt tensorbard查看 ckpt转pb pb 转snpe dlc 实例
参考: TensorFlow 自定义模型导出:将 .ckpt 格式转化为 .pb 格式 TensorFlow 模型保存与恢复 snpe tensorflow 模型前向传播 保存ckpt tensor ...
- Lamp后端开发技能表v0.1(转)
专业技能 Linux 阿里云服务器免费购买 服务器环境搭建 常用命令:慕课网-Linux达人养成计划 编辑器vim:床用命令.模式等等 shell Apache/Nginx 环境配置 一些配置项的参数 ...