在准备迁移到 Mercurial 时,我想对数千个 .v 文件进行一些系统更改。(我将编辑原件的副本,我赶紧补充。)
我所追求的各种变化的例子:
- 对于消息以某些文本开头的每个修订版,该文本指示已知用户名(例如
[Fred Bloggs]
),如果注释中的用户名与 ,v 文件中的作者匹配,则从提交消息中删除不必要的用户名文本 - 如果 ,v 包含有用的描述,请将其附加到修订版 1.1 的提交消息中(cvs2hg 忽略描述 - 但我们的许多 CVS 文件实际上来自 RCS,在 RCS 中很容易将初始提交消息放入描述字段中错误)
- 对于从某些共享用户帐户进行的编辑,请根据提交消息的内容调整作者。
我考虑过的事情:
- 在每个单独的 .v 文件上运行 'cvs log' - 解析输出,并使用
rcs -m
它来更改此历史记录。这方面的问题包括:- 似乎没有办法将文本文件传递给
rcs -m
- 因此,如果修订消息包含单引号和/或双引号,或者跨越多行,那么在脚本中正确引用它将是一个很大的挑战 - 我看不到 rcs 或 cvs 工具来更改与修订关联的作者姓名
- 不太重要的是,它可能会启动大量进程——我认为这可能会变慢
- 似乎没有办法将文本文件传递给
- 编写 Python 解析.v 文件,并调整内容。这方面的问题包括:
- 我们的 ,v 文件中混合了行尾 - 包括一些应该是文本的二进制文件,反之亦然 - 所以需要非常小心不要损坏文件
- 在任何提交消息中引用 @ 字符时需要小心,如果它落在多行注释中的行首
- 在已提交文件的最后一行被更改并且没有换行符的修订中也需要注意 - 这意味着 ,v 在一行的末尾有一个 @,而不是前面
\n
- 克隆我们正在使用的cvs2hg版本,并尝试调整其代码以就地进行所需的编辑
是否有任何其他方法可以减少工作量,或者是否有任何现有的代码可以实现这种功能?