2016-07-15 57 views
1

设置合并时,TortoiseSvn客户端有一个美妙的复选框,标记为“隐藏不可合并修订”。我正在寻找重现使用SharpSvn启用时显示的修订列表。使用SharpSvn获取“mergable修订”

TortoiseSvn

TortoiseSvn documentation解释此复选框:

当使用合并跟踪,日志对话框将先前显示合并的版本和修订前约会,共同的祖先点,即在分支前被复制,灰色。 “隐藏不可合并修订版”复选框允许您完全过滤这些修订版,以便仅查看可合并的修订版。

如何在SharpSvn代码中重现此功能? 我需要一个SvnLogEventArgs(或类似的)作为合并候选者的列表。

当前状态:我只得到了拉两个分支的日志。我无法弄清楚如何获得适当的svn:mergeinfo属性,或者一旦得到它,我该如何处理它。

回答

1

我一直刻苦,并以下链接,这里就是我结束了:

using (var client = new SvnClient()) 
{ 
    var release = SvnTarget.FromUri(new Uri(@"https://******/branches/Release")); 
    var trunk = SvnTarget.FromUri(new Uri(@"https://******/trunk")); 

    string trunkMergeinfo, releaseMergeinfo; 
    client.GetProperty(release, "svn:mergeinfo", out releaseMergeinfo); 
    client.GetProperty(trunk, "svn:mergeinfo", out trunkMergeinfo); 
    var relInfos = releaseMergeinfo.Split("\n"); 
    var trunkInfos = trunkMergeinfo.Split("\n"); 

    // This is here because I don't know what will happen once I merge something into trunk. 
    Debug.Assert(relInfos.Except(trunkInfos).Count() == 1,"Too many unknown merge paths"); 

    var trunklist = relInfos.SingleOrDefault(i => i.StartsWith("/trunk:")); 
    var revisions = trunklist.Replace("/trunk:", "").Split(",").SelectMany(t => 
    { 
     // If the log contains a range, break it out to it's specific revisions. 
     if (t.Contains("-")) 
     { 
      var match = Regex.Match(t, @"(\d+)-(\d+)"); 
      var start = int.Parse(match.Groups[1].Value); 
      var end = int.Parse(match.Groups[2].Value); 
      return Enumerable.Range(start, end - start + 1).ToArray(); 
     } 
     else 
      return new[] { int.Parse(t) }; 
    }).Select(x => (long)x); 

    Collection<SvnLogEventArgs> baseRevs; 
    // Why can't this take "trunk" or a property thereof as an argument? 
    client.GetLog(new Uri(@"https://******/trunk"), new SvnLogArgs { Start = 1725, End = SvnRevisionType.Head }, out baseRevs); 
    baseRevs.Reverse().Where(r => !revisions.Contains(r.Revision)).Select(x => x.LogMessage).Dump(); 
} 

希望这可以帮助别人,但我会注意,不会有很多理智的检查我是否会输入生产代码 - 这是快速和肮脏的版本。

相关问题