Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mercurial 用于调整RCS/CVS,v文件中的历史记录的脚本_Mercurial_Cvs_Rcs - Fatal编程技术网

Mercurial 用于调整RCS/CVS,v文件中的历史记录的脚本

Mercurial 用于调整RCS/CVS,v文件中的历史记录的脚本,mercurial,cvs,rcs,Mercurial,Cvs,Rcs,为了准备迁移到Mercurial,我想对数千个,v文件进行一些系统性的更改。(我会编辑原件的副本,我赶紧补充。) 我所追求的各种变化的示例: 对于消息以指示已知用户名的文本开头的每个版本(例如,[Fred Bloggs]),如果注释中的用户名与v文件中的作者匹配,则从提交消息中删除不必要的用户名文本 如果,v包含有用的描述,请将其附加到修订版1.1的提交消息中(cvs2hg忽略该描述-但我们的许多CVS文件实际上来自RCS,在RCS中很容易错误地将初始提交消息放入描述字段) 对于从某些共享用户帐

为了准备迁移到Mercurial,我想对数千个,v文件进行一些系统性的更改。(我会编辑原件的副本,我赶紧补充。)

我所追求的各种变化的示例:

  • 对于消息以指示已知用户名的文本开头的每个版本(例如,
    [Fred Bloggs]
    ),如果注释中的用户名与v文件中的作者匹配,则从提交消息中删除不必要的用户名文本
  • 如果,v包含有用的描述,请将其附加到修订版1.1的提交消息中(cvs2hg忽略该描述-但我们的许多CVS文件实际上来自RCS,在RCS中很容易错误地将初始提交消息放入描述字段)
  • 对于从某些共享用户帐户进行的编辑,请根据提交消息的内容调整作者
  • 我考虑过的事情:

  • 在每个单独的v文件上运行“cvs日志”-解析输出,并使用
    rcs-m
    更改此历史记录。这方面的问题包括:
    • 似乎没有办法将文本文件传递给
      rcs-m
      ——因此,如果修订消息包含单引号和/或双引号,或者跨越多行,那么在脚本中正确引用它将是一个相当大的挑战
    • 我看不到rcs或cvs设施可以更改与修订相关的作者名称
    • 不那么重要的是,它可能会启动大量的进程——我认为这可能会变得缓慢
  • 编写Python来解析,并调整内容。这方面的问题包括:
    • 在我们的,v文件中混合了行尾-包括一些本应为文本的二进制文件,反之亦然-因此需要非常小心,以免损坏文件
    • 如果@字符落在多行注释的行首,则在任何提交消息中引用@字符时都需要小心
    • 如果提交文件的最后一行已更改,并且没有换行符,则需要注意修订,这意味着,v在行尾有一个@,而不是前面有
      \n
  • 克隆我们正在使用的版本,并尝试调整其代码以进行适当的编辑

  • 是否有其他方法可以减少工作量,或者有任何现有代码可以实现这种功能?

    您的第一种方法可能是最好的方法。我知道在Perl中,处理引号和多行不会是问题。例如:

    my $revision = ...;
    my $log_message = ...;
    system('rcs', "-m$revision:$log_message", $filename);
    
    其中,
    $log\u message
    可以包含任意文本。由于字符串不经过shell,因此不会重新解释换行符和其他元字符。我相信你可以用Python做同样的事情

    (至于第二种方法,我不认为行结尾会有问题。如果您有Unix风格的
    \n
    结尾和Windows风格的
    \r\n
    结尾,您可以将尾部的
    \r
    作为行的一部分,并且所有内容都应该保持一致。我在这里对
    ,v
    的布局进行一些假设

    我编写了一个Python库(),它实现了,因此用户可以将RCS文件作为Python对象树加载,以编程方式修改它并保存到一个新的RCS文件


    您可以使用mapDeltas()将函数应用于每个修订版,例如to;或使用getNext()遍历树以获得更复杂的内容,例如一起使用。

    谢谢-两个非常有用的建议。您可以使用:
    rcs-m1.2:$(cat/path/to/file)将文本文件从shell传递到
    rcs-m
    但是正确的引用确实很棘手!