C++ 用于在签出/更新时重命名成员变量的svn脚本

C++ 用于在签出/更新时重命名成员变量的svn脚本,c++,svn,C++,Svn,我和一个家伙一起工作,他喜欢使用mCamelCase约定命名他的成员变量,例如:mSomeVar或mSomeOtherVar。我受不了这种格式。我更喜欢m_camelCase对流,例如:m_someVar或m_someOtherVar。看着对方的代码,我们会让对方发疯 现在我们为球队增加了一名新球员,他更喜欢不加前缀。因为我们使用svn,所以我们认为可以开发一个svn脚本,当您从服务器下载代码时,可以动态重命名成员变量。这样,每个人都可以得到他们想要的命名的成员变量 有人有任何svn脚本的例子可

我和一个家伙一起工作,他喜欢使用mCamelCase约定命名他的成员变量,例如:mSomeVar或mSomeOtherVar。我受不了这种格式。我更喜欢m_camelCase对流,例如:m_someVar或m_someOtherVar。看着对方的代码,我们会让对方发疯

现在我们为球队增加了一名新球员,他更喜欢不加前缀。因为我们使用svn,所以我们认为可以开发一个svn脚本,当您从服务器下载代码时,可以动态重命名成员变量。这样,每个人都可以得到他们想要的命名的成员变量


有人有任何svn脚本的例子可以做这种事情吗?我已经看到了一些脚本,它改变了注释头,但是我们需要一些包含C++处理器的东西。

子版本没有更新的钩子——可以有一个后提交的钩子,允许你从一个约定转换为另一个约定(仓库标准),您可以使用自己编写的脚本进行签出,然后执行必要的调整,但这会在

svn diff
等上给您错误的读数

我的建议是和你的同事坐下来,商定一个标准。不过,post-commit钩子对于捕捉错误仍然很有用


*我在想,如果发生了提交,会自动签出并修改代码以遵守存储库标准约定,然后在必要时提交。另一种选择是使用预提交钩子,如果代码不符合标准,则不允许提交。

Subversion没有可用于更新的钩子-您可以使用后提交钩子*,它允许您从一种约定转换为另一种约定(存储库标准),您可以使用自己编写的脚本进行签出,然后执行必要的调整,但这会在
svn diff
等上给您错误的读数

我的建议是和你的同事坐下来,商定一个标准。不过,post-commit钩子对于捕捉错误仍然很有用


*我在想,如果发生了提交,会自动签出并修改代码以遵守存储库标准约定,然后在必要时提交。另一种选择是使用预提交钩子,如果代码不符合标准,则不允许提交。

听起来像是一种灾难。为了实现这一点,您需要确定一个存储库范围的标准,其中每个文件都使用相同的变量命名约定。如果你能做到,为什么不让每个人都这样编码?!关于约定,重要的不是你使用哪个约定,而是每个人都实际使用相同的约定


找一个资历比你高的人来打电话(如果可以的话,也可以提高排名),其他人只需接受就行了。

听起来像是灾难的秘诀。为了实现这一点,您需要确定一个存储库范围的标准,其中每个文件都使用相同的变量命名约定。如果你能做到,为什么不让每个人都这样编码?!关于约定,重要的不是你使用哪个约定,而是每个人都实际使用相同的约定


找一个资历比你高的人来打电话(如果可以的话,也可以提高排名),其他人只需要接受就行了。

我假设你为了研究目的想改变风格,这个问题只是假设。Joel S.似乎认为简单地说你做错了什么的答案根本不是好答案,所以我将尝试给你一些解决问题的途径

svn在转换方面做的最接近的事情是它可以更改签出时结束的行,并在签入时再次更改它。这样,存储库就可以对行尾有一个单一的概念,不同的客户端可以根据自己的喜好修改文件。虽然这个功能听起来相当直截了当,但许多人似乎在让它正常工作时遇到了问题。只需谷歌“svn eol风格”

由于svn不提供任何类型的可定制客户端过滤器,我认为可以安全地假设您需要修改svn客户端,并为您自己的目的编译它。也许您可以向svn提交补丁或扩展

因此,此时,您应该已经下载了svn源代码,并且能够让它编译客户端。此时,请将注意力转向
libsvn\u subr/subst.c
。该文件包含各种格式的转换例程。目前它在关键字扩展和eol上进行翻译

您只需创建一个新属性,可能称为
成员变量样式
。对于设置了此标志的文件,可以在
subst.c
代码中调用特殊转换。通过查看对
svn\u subst\u translate\u stream3
的调用,您可以跟踪到svn中对转换代码的引用

嗯。这是最简单的部分。现在,您需要获得一个函数来正确地将代码从一种形式转换为另一种形式。您不能简单地将cpp处理器从gcc中取出,因为不能保证代码是有效的/可编译的。你必须尽最大努力创建词法规则,希望它能在正确的变量上做正确的事情。对于以m或者甚至m开头的变量,这是相当直接的。不幸的是,对于你的团队中不使用My的成员来说,确定C++中的成员变量是一个很大的挑战。幸运的是,创建语法突出显示代码的人在该领域进行了大量研究。我会四处寻找一些代码,它们做得很好