上层: commit files


C.3.3.1 更新旧仓库停止使用废弃的命令行模板格式

由于新创建的仓库默认使用新的格式化字符串,所以当你创建新的仓库,可以不用担心本节 讲述的内容。

如果你要维护一个旧的仓库,并且使用了 commitinfo, editinfo, verifymsg, loginfo 和/或 taginfo hook,你使用现在的 cvs 也许不会马上碰到问题,但你的用户可能看到废弃警告。

产生的这个问题的原因是所有的脚本 hook 已经更新,采用新的命令行解析器,它可以支持 多个 loginfo & notify 风格的格式化字符串(参阅 syntax), 然而这种支持不完全兼容过去旧的格式化字符串。

快速的升级方式是在旧 loginfo 文件的每个格式化字符串后面插入 `1'。 例如:

     DEFAULT (echo ""; id; echo %{sVv}; date; cat) >> $CVSROOT/CVSROOT/commitlog

改成:

     DEFAULT (echo ""; id; echo %1{sVv}; date; cat) >> $CVSROOT/CVSROOT/commitlog

如果你只需行中的第一个 `%' 被替换为格式化字符串,你也许要将后面的百分号 写成两个。

如果你立即修改完并提交,所有都会正常运行。

现在添加下面一行到你的 config 文件中(参阅 config):

     UseNewInfoFmtStrings=yes

所有都运行正常,但你的用户或许会看到一个新的废弃警告。

处理现在由 commitinfo, editinfo, verifymsgtaginfo 产生的废弃警告比较容易。这要将下面的字符串,追加到每个文件的活动命令行模板:

commitinfo
` %r/%p %s'
editinfo
` %l'
taginfo
` %t %o %p %{sv}'
verifymsg
` %l'

如果你不希望新的信息传递给这些 hook 脚本,不需要再对这些文件做什么修改以确保 现在和以后兼容 cvs 的格式化字符串。

修复 loginfo 要稍费点事儿。旧风格的 loginfo 格式化字符串使空格 和逗号分割的参数传入替代格式化字符串。这也是由于你插入废弃的 `1' 到格式化 字符串造成持续产生警告。

因为新格式分割单独项,并作为分割的参数传入脚本(为了更好的理由 - 包含逗号和/或 空格的参数可以解析),从你的 loginfo 命令行模板里面删除废弃的 `1',你也许不得不 重写 hook 调用的脚本以应对新的参数格式。

还须注意,`%' 后面的未识别字符和过去 CVS 版本处理的 `{}' 在旧版本中 没有被严格地当作 bug。特别是,`%{}' 会吃掉下一个字符和未识别字串只解析 为空串,与文档所述相反。这个版本将会按文档描述一致(如果你以前只使用一些 `%{sVv}' 组合,比如 `%{sVv}',`%{sV}' 或 `%v', 你不会遇到麻烦)。

在好的一面,如果你能忍受一段时间的废弃警告,在所有旧格式字符串从 cvs 删除 之前,你可以有充足的时间来处理这些问题。