Svn 如何避免Subversion预提交钩子中的行分隔符转换(导致错误的行号)?

Svn 如何避免Subversion预提交钩子中的行分隔符转换(导致错误的行号)?,svn,checkstyle,Svn,Checkstyle,我们有以下环境:通过WebDAV使用Apache 2.2.14和SVN 1.6.6的Windows 2008服务器。多个开发人员从不同的Windows平台提交Java代码 现在,我们想在存储库中实现一个预提交钩子,在提交的代码上运行Checkstyle。我们使用SVNChecker()来实现这一点,它非常有效。不幸的是,当Checkstyle报告错误时,报告中的行号是实际行号的两倍值 当您在SVN中提交某些内容时,它会用新文件创建一个临时目录。然后,运行预提交钩子,如果成功,新文件将实际提交到存

我们有以下环境:通过WebDAV使用Apache 2.2.14和SVN 1.6.6的Windows 2008服务器。多个开发人员从不同的Windows平台提交Java代码

现在,我们想在存储库中实现一个预提交钩子,在提交的代码上运行Checkstyle。我们使用SVNChecker()来实现这一点,它非常有效。不幸的是,当Checkstyle报告错误时,报告中的行号是实际行号的两倍值

当您在SVN中提交某些内容时,它会用新文件创建一个临时目录。然后,运行预提交钩子,如果成功,新文件将实际提交到存储库。我在十六进制编辑器中分析了这些临时文件,发现所有换行符(\n)都被回车符和换行符(\r\n)替换。当我们在文件中使用Windows换行符(\r\n)时,会产生\r\r\n,这被Checkstyle和几个文本编辑器视为两个换行符。问题是,当从我们的存储库中签出时,换行符是正确的,因此它们会以某种方式转换回某个地方

我可以通过将属性svn:eol-style(请参阅)设置为native来解决这个问题。当时一切正常。不幸的是,对于我们来说,这意味着我们必须将此属性添加到存储库中的每个文件中。据我所知,SVN客户端中有一个设置,每当您添加新文件时,它会自动执行此操作,但不幸的是,我们无法告诉所有开发人员将此设置添加到他们的SVN客户端

eol样式属性的描述是“默认情况下,Subversion不会注意文件中使用的行结束(eol)标记的类型”。在我看来,换行符被转换似乎是SVN中的一个bug

有没有人知道如何在不使用难看的解决方法的情况下修复这种行为,比如在预提交钩子中手动转换换行符

谢谢你的帮助,
memminger

我认为SVN为预提交挂钩创建了一个临时目录是错误的。相反,预提交钩子可以使用svnlook和事务号访问源文件。SVNChecker将这些文件保存在临时目录中

导致行分隔符错误的原因是Python的一个特性,它自动转换换行符,以便所有Python应用程序都可以在内部使用Unix行分隔符。但是,默认情况下,只有一些函数将外部源的换行符转换为Python内部换行符。SVNChecker不处理此问题,这已被报告为上的错误