获取 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)

时间: 2024-08-08 17:54:52

获取 SharpSvn 执行 svn 操作的实时日志的相关文章

使用 SharpSvn 执行 svn 操作的Demo

1. SharpSvn简介 SharpSvn.dll 是为.Net 2.0-4.0+ 应用提供的 Subversion Client API,更多详细介绍请见 https://sharpsvn.open.collab.net/. 2. 鉴权操作 SharpSvn 通过 Authentication 接口提供相关的鉴权操作,例如用户名和密码获取.证书确认等.Authentication 接口分别为这些操作定义了相关的事件句柄(Handlers).当需要某些鉴权操作时,SharpSvn 就会去调用相

SVN操作异常解决日志

1 svn locked某个目录-无法进行更新 产生这种情况大多是因为上次svn命令执行失败且被锁定了.如果cleanup没有效果的话只好手动删除锁定文件. 在命令提示符下cd 到svn项目出现问题的文件所在目录下,然后执行如下命令 del lock /q/s 就把锁删掉了.如图所示: 2.svn remains in conflict错误解决 情形:当有人在对某文件进行修改,假设为A文件,并提交至svn服务器,如果此时你正在修改A页面,并对其进行更新.会出现一些残余文件信息.如果在未删除这些文

C# Winform中执行post操作并获取返回的XML类型的数据

/// <summary> /// 返回指定日期的订单数据 /// </summary> /// <param name="StartDate">起始日期</param> /// <param name="EndDate">结束日期</param> /// <returns>DataTable</returns> public System.Data.DataTable

svn执行update操作后出现:Error : Previous operation has not finished; run &#39;cleanup&#39; if it was interrupted.

svn执行update操作后出现: Error : Previous operation has not finished; run 'cleanup' if it was interrupted. Error : Please execute the 'Cleanup' command. 提示要去执行下Cleanup命令,于是就去执行下Cleanup命令,结果出现了: 于是,解决方法只能是清空掉svn的队列.具体操作步骤如下: 1.下载sqlite3.zip 2.找到你svn项目下的.svn,

新浪是如何分析处理32亿条实时日志的?

服务介绍 随着实时分析技术的发展及成本的降低,用户已经不仅仅满足于离线分析.目前我们服务的用户包括微博,微盘,云存储,弹性计算平台等十多个部门的多个产品的日志搜索分析业务,每天处理约32亿条(2TB)日志. 技术架构 简单介绍一下服务的技术架构: 这是一个再常见不过的架构了: (1)Kafka:接收用户日志的消息队列 (2)Logstash:做日志解析,统一成json输出给Elasticsearch (3)Elasticsearch:实时日志分析服务的核心技术,一个schemaless,实时的数

使用svn钩子脚本控制svn库的实时备份

Svn镜像库实时同步实现 一, 配置rsync的同步机制先实现能手动同步 环境:svn源码库 192.168.115.120 Svn镜像库 192.168.115.121 1,在源码库中配置rsync服务 (配置文件默认没有需要手动建立 /etc/rsyncd.cong) 上面 [ UGOR]就是要更新的模块,然后启动服务 rsync –deamo查看服务状态lsof –I 873 注:认证账户格式为 用户:密码,文件权限为 600, (rsync.pass) 2,在镜像库中同步内容执行 rsy

Storm实时日志分析实战

项目背景 最近公司做一个项目,用户需要对网站访问者的广告点击/浏览记录进行实时统计分析,分析结果存入数据库,输出报表.我们采用了Kafka+Storm+Zookeeper的解决方案.之前没有接触过,经过一段时间的研究,最终完成了项目.接下来的内容我将介绍我们的解决方案.供大家参考.我们的系统结构如下: 总体结构介绍 业务系统把点击/浏览广告业务日志统一按规定的格式发送到Kafka集群中,不同的业务日志可以分别发送给Kafka不同的主题.Storm集群中运行了我们的实时统计拓扑,该统计拓扑分别从K

用ElasticSearch,LogStash,Kibana搭建实时日志收集系统

用ElasticSearch,LogStash,Kibana搭建实时日志收集系统 介绍 这套系统,logstash负责收集处理日志文件内容存储到elasticsearch搜索引擎数据库中.kibana负责查询elasticsearch并在web中展示. logstash收集进程收获日志文件内容后,先输出到redis中缓存,还有一logstash处理进程从redis中读出并转存到elasticsearch中,以解决读快写慢速度不一致问题. 官方在线文档:https://www.elastic.co

svn操作的坑

1,如果本地文件误删了,服务器上有,导入方法:终端输入(注意空格) svn checkout svn://192.168.1.162/zuozuo空--username=yangqinglong空--password=yangqinglong /Users/njfifthcity/Desktop/zuozuo2 2,svn上传期间,如果意外中断,被操作的文件会被自动加锁,解决方法: 最上方finder位置的导航栏,找到clean,可以自动解锁,然后继续操作. 其他的坑(度娘说的): 1.Xcod