【问题标题】:Removing Keyword Substitution comments from source files?从源文件中删除关键字替换注释?
【发布时间】:2011-06-27 11:12:29
【问题描述】:

注意:为了更好的词,我在源文件的开头称为绒毛 --

/* @(#) $Id: file.c,v 1.9 2011/01/05 11:55:00 user Exp $
   **************************************************************************
   * COPYRIGHT, 2005-2011                                                   *
   ...
 */

--Keyword Substitutioncmets,虽然我不知道这是否只是一个颠覆术语。

无论如何,现在问题:我们有一个第三方供应商,我们可以从它那里获取源代码。这些 c 源 all 有这些关键字 subst cmets,每次我们从供应商处获得新版本时,all (1000+) 个文件都会更改,因为它们会更新这些 cmets他们发送给我们的每个版本,即使在这些文件中没有进行任何源代码更改,所以唯一的更改是 cmets。现在,在我们编译和使用这些源代码之前,我们有兴趣对代码进行粗略的审查,以查看已更改的区域。 (永远不要相信发布历史)。然而,这相当困难,因为做一个简单的文件夹 diff 显然会列出所有文件。

我现在正在寻找的是是否已经存在任何简单的工具来从源文件中删除这些特殊的多行 cmets。也许有人有一个 grep 或 sed 脚本的链接,可以从文件中刮掉这些东西?

【问题讨论】:

  • 从差异输出而不是源文件中剥离它们。
  • 就像 Jim Balter 所说:只要找到一种方法在比较期间忽略它们即可。大多数差异化工具应该有某种方式来忽略某些模式。
  • @Jim, Otherside :随意提供一个答案,描述一个体面的 diff 工具,用于 Windows 能够做到这一点。
  • @Martin 十几种脚本语言(包括 sed,但不包括 grep,它只搜索)中的任何一种都可用于从文件中删除由正则表达式指定的文本。我可以随意提供一般性建议,也可以不为您编写脚本。
  • @Martin 你在你的“问题”中没有提到使用交互式工具。您所说的是“粗略的代码审查以查看已更改的区域”-可以通过 diff --recur | striprcsids(差异和管道可通过 Windows 上的 Cygwin 获得,但我确信有本机 Windows 等效项),然后进行手动检查,这可能比使用 rcsids 克隆源树然后再进行克隆要快得多使用交互式差异工具单独检查每个文件。但是,如果您想这样做,请考虑 Jens Gustedt 的回答。

标签: c version-control comments keyword-substitution


【解决方案1】:

类似:

perl -ne 'if(m+/\*.*\$Id: +) $c = 1; print unless $c; if($c && m+\*/+) $c = 0;'

请注意,只有在

  • 此类 cmets 用 /*...*/ 分隔
  • 在第一行有$Id:
  • */ 之后没有任何内容
  • /* 之前没有*/

并且它将删除评论开头和评论结尾之间的所有行。

我没有测试过!

【讨论】:

    【解决方案2】:

    首先,我会尝试说服他们审查他们的版本控制系统(看起来他们仍然使用 RCS 吗?),或者如果无法让他们连接到 svn 或 git 服务器以提交他们的更改.但也许你已经这样做了?

    如果在这个意义上什么都不可能,我会尝试建立一个 git 存储库来保存他们提供给您的版本。 Git 允许您在导入或导出时使用过滤器,并且还支持忽略版本之间差异的此类标签。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      • 2016-02-10
      • 2015-10-18
      • 2018-04-07
      相关资源
      最近更新 更多