如何获取SharpSVN中已更改文件的列表(如svn diff --summarize --xml)

时间:2012-03-17 00:42:39

标签: c# svn sharpsvn

我正在尝试从SharpSVN获取已更改文件的列表。我可以在命令行上获取我需要的数据,如下所示:

svn diff -r <startrev>:HEAD --summarize --xml

有人能指出我在SharpSVN迷宫中的正确位置来复制这个吗?理想情况下,我可以获取已更改文件的集合,但如果需要,我可以解析流。

2 个答案:

答案 0 :(得分:4)

相当于svn diff --summarize的SharpSvn是SvnClient.DiffSummary()

您可以将其用作

using (var client = new SvnClient())
{
   var location = new Uri("http://my.example/repos/trunk");
   client.DiffSummary(new SvnUriTarget(location, 12), new SvnUriTarget(location, SvnRevision.Head),
                      delegate(object sender, SvnDiffSummaryEventArgs e)
                      {
                        // TODO: Handle result
                      });
}

当你想要结果的时候。

如果您想以列表形式访问最终结果,也可以使用.GetDiffSummary()

答案 1 :(得分:2)

这是最简单的方法,但这里有一些不同的方法:

使用sharpsvn使用状态命令来检索WorkingCopy和Repository Status中的所有文件状态,然后在它们之间进行比较

示例:

using (SvnClient cl = new SvnClient())
  cl.Status(YourPath, new SvnStatusArgs {
    Depth = SvnDepth.Infinity, ThrowOnError = true,
    RetrieveRemoteStatus = true, Revision = SvnRevision.Head}, 
    new EventHandler<SvnStatusEventArgs>(
       delegate(object s, SvnStatusEventArgs e) {
          switch (e.LocalContentStatus) {
             case SvnStatus.Normal:break;
             case SvnStatus.None: break;
             case SvnStatus.NotVersioned: break;
             case SvnStatus.Added:break;
             case SvnStatus.Missing: break;
             case SvnStatus.Modified: break;
             case SvnStatus.Conflicted: break;
             default: break;
          }
          switch (e.RemoteContentStatus) {
             case SvnStatus.Normal:break;
             case SvnStatus.None: break;
             case SvnStatus.NotVersioned: break;
             case SvnStatus.Added:break;
             case SvnStatus.Missing: break;
             case SvnStatus.Modified: break;
             case SvnStatus.Conflicted: break;
             default: break;
          }
       }));