我与一个喜欢使用mCamelCase约定命名其成员变量的人合作,例如:mSomeVar或mSomeOtherVar.我不能忍受这种格式.我更喜欢m_camelCase对流,例如:m_someVar或m_someOtherVar.我们互相疯狂地看着对方的代码.
现在我们已经为团队添加了一个新人,他根本不喜欢任何前缀.由于我们使用svn,我们认为我们可以开发一个svn脚本,当您从服务器下载代码时,它会动态重命名成员变量.这样每个人都可以获得他们想要的成员变量.
有没有人有任何示例svn脚本可以做这种事情?我见过更改注释标题的脚本,但我们需要一些包含C++处理器的东西.
听起来像灾难的食谱.为了使其工作,您需要决定存储库范围的标准,其中每个文件使用相同的变量命名约定.如果你能做到这一点,为什么不让每个人都这样编码?!关于约定的重要事情不是你使用哪种约定,而是每个人实际使用相同的约定!
找一个具有资历的人来打电话(或者如果可以的话,拉一个等级),其他人都只需要吮吸它.
我假设你想改变用于研究目的的风格,问题只是假设.Joel S.似乎认为简单地说你做错事的答案根本就不是好的答案,所以我会试着给你一些途径来解决你的问题.
svn在转换方面最接近的是它可以更改签出结束时的行,并在签入时再次更改它.这允许存储库只有一个行结束的概念,并允许不同的客户端将文件修改为其首选项.虽然这个功能听起来相当直接,但很多人似乎都无法正常工作.简单的谷歌'svn eol-style'.
由于svn不提供任何类型的可自定义客户端过滤器,我认为可以安全地假设您需要修改svn客户端,并根据自己的目的进行编译.也许您可以将补丁或扩展名提交回svn.
所以在这一点上,你应该已经下载了svn源代码,并且能够让它来编译客户端.此时,请将注意力转向libsvn_subr/subst.c.此文件包含要转换为各种格式的例程.目前它在关键字扩展和eol上进行翻译.
您只需创建一个新属性,也许需要调用member-variable-style.对于设置了此标志的文件,您可以在subst.c代码中调用特殊变换.您可以通过查看调用来跟踪svn中的引用到转换代码svn_subst_translate_stream3.
好.这很容易.现在,您需要获得一个函数,以便将代码从一种形式正确地转换为另一种形式.你不能简单地从ccc中取出cpp处理器,因为无法保证代码有效/编译.你必须尽最大努力创建lexing规则,希望能在正确的变量上做正确的事情.对于以m_或m开头的变量,这是相当直接的.不幸的是,对于团队中完全不使用m_的成员来说,确定它在C++中的成员变量是一个很大的挑战.幸运的是,创建语法高亮代码的人在该领域中进行了相当多的研究.我会四处寻找并找到一些能够突出显示C++代码的代码.
最后,由于这些转换可能变得非常复杂,我建议你在这个阶段将svn shell发送到过滤器程序.这对于性能来说并不是很好,但它可以使编写和调试过滤器变得更加容易.然后,您可以使用Perl或您选择的语言编写过滤器.有关使用外部外部过滤器程序的一个很好的示例,请参阅Squid重定向器.
祝好运!