如何在单个xml文件中为分支中的所有非二进制文件获取递归svn blame报告?

StackOverflow https://stackoverflow.com/questions/413777

如何为分支中的所有非二进制文件获取完全递归的svn blame报告,其中输出位于xml格式的单个文件中,并包括修订版,日期,作者,文件名和文件。路径,以及文件本身的行文本?整个输出需要在一个文件中。它将作为构建的一部分通过CCNet实例执行。

可用工具是nant和nantcontrib,msbuild以及最新命令行svn的最新稳定版本。

以下是我遇到的一些问题:命令行svn blame命令不支持目录递归。 Blame的--xml选项不包括每一行的实际文本,尽管它确实包含其他所有内容。默认情况下,nantcontrib传递--quiet参数(与任务引用相反),blame命令不支持该参数。 Nantcontrib svn任务可能不接受--xml参数。

有帮助吗?

解决方案

简单的答案是没有任何简单的方法可以做到这一点。最好,最正确的方法是编写自己的svn客户端(或扩展现有的客户端),以便它具有您需要的功能。几乎无足轻重。

还有一种错误的方法,它还涉及编写代码。 不要这样做

find . -type f | grep -v .svn | xargs svn blame > line_data
find . -type f | grep -v .svn | xargs svn --xml blame > xml_data

您可以将两个 svn 命令编写在一起,以避免两次运行 find ,但这仍然会非常缓慢。要添加侮辱伤害,您必须自己解析这两个文件,将实际的源代码行添加到xml数据中。

可悲的是,我认为这是对标准svn客户端所需支持的程度,我找不到任何其他更好做事的客户端(有些甚至不支持 blame )。

其他提示

我不知道你在使用什么操作系统。但是你可以尝试使用一个简单的FOR循环和命令“svn ls -R”。以递归方式列出分支中的所有文件(workspace / url),然后将其传递给“svn blame --xml”。

我已经在我的SVN命令行提示符中尝试了这一点,它运行正常(Windows XP,SVN 1.4.4)。我使用的命令如下:

FOR / F" usebackq delims ==" %i IN( svn ls -R http:// myurl / mybranch )DO @svn blame --xml%i

注意:您可以避免使用某些“未找到网址”如果在工作空间中键入此命令(反映您的分支根目录)并使用'svn ls -R`而不是上面命令中的url,则会出现错误类型。

希望这有帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top