【发布时间】:2012-06-08 07:23:00
【问题描述】:
在 LibGit2Sharp 中迭代 TreeChanges 的最佳(如高性能、简单)方法是什么?
如果我访问 .Patch 属性,我会检索更改的全文。这对我来说还不够……理想情况下,我希望能够遍历 diff 行,并且每行检索行的状态(修改、添加、删除)并从中构建我自己的输出。
更新:
假设我想构建自己的差异输出。我想做的是迭代更改的行,在迭代期间我会检查更改的类型(添加、删除),并构造我的输出。
例如:
var diff = "";
foreach (LineChange line in changes) // Bogus class "LineChange"
{
if (line.Type == LineChange.TYPE_ADDED)
diff += "+";
else
diff += "-";
diff += line.Content;
diff += "\n";
}
上面只是一个简单的例子,我正在寻找什么样的灵活性。能够完成更改,并根据行更改类型运行一些逻辑。 Patch 属性已经“构建”,一种方法是解析它,但库首先构建输出然后我解析它似乎很愚蠢......我宁愿直接使用构建成分。
我需要这种功能,以便我可以显示更改的视觉差异,这涉及比我上面给出的简单示例更多的代码和逻辑。
【问题讨论】:
-
能否请您添加一个您所追求的快速示例(“我想构建我自己的差异输出,按照它们在文件中出现的正确顺序”) 什么已经可用?这将非常有帮助,因为我不确定是否清楚地理解“订购”问题...
-
@nulltoken 我已经更新了我的问题。 :)
-
与你的问题无关,但你不应该在这样的循环中连接字符串,因为它的性能很差(O(n²))。请改用
StringBuilder(或StringWriter)。
标签: c# .net libgit2 libgit2sharp