在准备迁移到Mercurial时,我想对数千个v文件进行一些系统的更改。 (我将编辑原件的副本,我赶紧补充。)
我所追求的各种变化的例子:
[Fred Bloggs]
),如果注释中的用户名与v文件中的作者匹配,则从提交中删除不必要的用户名文本消息我考虑过的事情:
rcs -m
更改此历史记录。这方面的问题包括:
rcs -m
- 所以如果修订版消息包含单引号和/或双引号,或跨越多行,那将是一个相当挑战的引用它在脚本中正确\n
是否有其他方法可以减少工作量,或者是否有任何实现此类功能的现有代码?
答案 0 :(得分:2)
您的第一种方法可能是最好的方法。我知道在Perl中,处理引号和多行不会有问题。例如:
my $revision = ...;
my $log_message = ...;
system('rcs', "-m$revision:$log_message", $filename);
其中$log_message
可以包含任意文本。由于字符串不通过shell,因此不会重新解释换行符和其他元字符。我相信你可以用Python做同样的事情。
(至于你的第二种方法,我不希望行结尾成为一个问题。如果你有Unix风格的\n
结尾和Windows风格的\r\n
结尾,你可以只对待尾随\r
作为行的一部分,一切都应该保持一致。我在这里假设,v
文件的布局。)
答案 1 :(得分:0)
我编写了一个Python库EditRCS(PyPi),该库实现了RCS format,因此用户可以将RCS文件作为Python对象树加载,以编程方式对其进行修改并保存到一个新的RCS文件。
您可以使用mapDeltas()将函数应用于每个修订版,例如应用于change an author's name;或使用getNext()一起走到更复杂的地方,例如joining two file histories。